GYMonitor
GYMonitor是用于监控iOS app性能状况的代码库,目前包括有FPS监控,发现FPS过低会自动产生堆栈,便于在开发过程中发现卡顿问题。
安装
使用CocoaPods
# Podfile
platform :ios, '7.0'
target 'YourTarget'
pod 'GYMonitor'
手工导入
- 拖动
GYMonitor
整个文件夹到已有的Xcode工程。值得注意的是GYMonitor
里面有CrashReporter.framework
这个库。 - 包含头文件
#import "GYMonitor.h"
- 将
dsymInfo
文件夹拷贝到工程文件的同一个目录,然后在工程文件中的Build Phases
最后加上一个Run Script
,脚本内容为python ${PROJECT_DIR}/dsymInfo/backup.py
使用
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// normal code...
[self startMonitor];
return YES;
}
- (void)startMonitor {
[GYMonitor sharedInstance].monitorFPS = YES;
[GYMonitor sharedInstance].showDebugView = YES;
[[GYMonitor sharedInstance] startMonitor];
}
- (void)stopMonitor {
[GYMonitor sharedInstance].monitorFPS = NO;
[GYMonitor sharedInstance].showDebugView = NO;
[[GYMonitor sharedInstance] startMonitor];
}
运行效果
- 在模拟器/真机(真机只能看到部分符号)
- 在mac上反解
原理
- 通过
CADisplayLink
获取屏幕刷新频率,输出FPS的值 - 在子线程开启定时器监控FPS的值
- 当FPS的值过低时,通过
CrashReporter
获取全部线程的堆栈,保存为$currentController.crash
文件 - 编译项目成功后通过
dsymutil
产生dSYM文件然后保存,为了节省空间最多保存5个。还有为它们在所的目录添加Spotlight索引,反解堆栈时能让mac os自动找到它们 - 在手机可通过点击监控条,然后用AirDrop把crash文件传输到mac上,在mac使用
symbolicatecrash
反解堆栈,为了方便,我使用了Automator
为右键点击*.crash文件时添加服务项反解堆栈
,点击后会运行脚本去反解堆栈。