适用于 iOS 的堆日志框架(内存快照)
概述
MimirMemoryLogger 是一个内存日志框架(Swift & Objective-C),旨在帮助开发者在无法连接到 Xcode 时更好地调试内存问题。
该框架实现的功能基本上是捕获 iOS 设备的堆快照,并将其保存为 json 文件。然后,可以使用我编写的 Python 脚本对该 json 文件进行处理(请不要评判我的 Python 代码😅)
工作原理
- 触发保存内存堆快照的次数,例如当应用接收到
applicationDidReceiveMemoryWarning
时 - MimirMemoryLogger 将内存快照保存到磁盘
- 用户将内存快照(自动或手动)发送给开发者
- 开发者使用包含 json 内存快照的参数运行 Python 脚本
- 脚本显示了您应用程序的内存堆使用情况,允许开发者了解内存使用过多的原因
Python 脚本示例
这里是使用python脚本(包含在仓库中)与堆快照json文件的结果示例2个。
json内存快照示例在./Resources/snapshot-samples目录中。
使用说明 - Swift
拍摄内存快照
import MimirMemoryLogger // Do not forget this
MimirMemoryLogger.saveCurrentSnapshotToFile { (url) -> (Void) in
if let url = url {
print("Memory snapshot location: \(url.absoluteString)")
}
}
获取之前保存的快照
if let urls = MimirMemoryLogger.getSavedSnapshots() {
print("URLS of all saved snapshots: \(urls)")
}
定制
你可以设置磁盘上保留的最大快照数量。默认为5。
MimirMemoryLogger.maxNumberOfSnapshots = 3
如果你想在保存和获取快照时获取更多详细信息,可以在MimirMemoryLogger中将verbose设置为true。这将打印出追加的详细信息,例如保存快照所需的时间或是否存在任何错误。
MimirMemoryLogger.verbose = true
使用说明 - Python脚本
在终端中查看json快照
本项目的实现依赖于一个Python脚本,该脚本用于对json快照文件中的结果进行排序和美化,与readme文档开头提供示例图像中的效果相同。该脚本位于此处:./PythonScripts/MimirMemoryLogger.py
此脚本是在BeautifulTable的帮助下编写的。
只需将json文件作为参数调用此脚本即可(json快照的示例可在我处找到:./Resources/snapshot-samples)。
例如:
python3 MimirMemoryLogger sample-snapshot.json
注意
此框架仍处于早期阶段,将持续进化。
如果您使用此框架且喜欢它,请随时告诉我。
安装
Mimir可通过CocoaPods获取。要安装它,只需将以下行添加到Podfile中
pod 'MimirMemoryLogger'
作者
Amer Eid,[email protected]
许可
Mimir遵循MIT许可。更多信息请查阅LICENSE文件。