用Xcode 和 on-device Detection 追踪 APP挂起
什么是hangs?
短时间无反应,大于250毫秒没反应。
主线程忙,或者主线程等待其他线程或系统资源, 导致APP反应慢。
检测挂起的新增时期
在iOS16和Xcode14以前,MetrickKit可以在beta App和public App阶段收集挂起率和诊断报告,Xcode Organizer可以在public App阶段提供挂起的统计数据。
在iOS16和Xcode14以后,在APP开发、beta测试和已发布时期都可以获取挂起信息。
- 在开发阶阶段Xcode新增Thread Performance Checker功能,Instrument工具的Time Profiler新增hangs信息
- 在beta测试阶段可以使用测试机的 On-Device Hang Detection
-
在APP发布时期,Xcode Orgainer 新增了hangs 数据项目,可以查看线上APP hangs数据,
在不同时期应用挂起检测
1.APP开发调试阶段
-
开启Thread Performance Checke功能
在 Edit schema -> Run -> Diagnostics 选项中开启 Thread Performance Checker
调试APP期间,当执行的代码优先级不对的时候,即出现主线程等待子线问题时,会在Xcode问题导航器中通知出现挂起问题
2.如果挂起时想知道其他线程在干什么,需要知道栈调用信息,可以使用Instrument的Timer Profiler, 出现挂起时Timer Profiler 会检测到Hangs并提供调用信息,三击检测项会出现不同线程CPU的使用情况
此外Instrument还单独提供了Hang tracing工具,可以为检测和标记hangs配置一个hang阈值,检测是否存在hang行为
2.beta版阶段
可以在开发设备被打开 Hang Detection功能,打开位置 Settings -> Developer -> Hang Detection
此处可以设置挂起阈值为250ms、500ms、1000ms、2000ms不同的值,出现hang时APP内会有实时的弹框提示,Hang Detection中也会保留hang日志。
3.APP发布时期
Xcode Organizer支持hang报告和诊断数据,每条hang数据会包含执行函数名、挂起时间、不同手机和系统版本的统计信息
在 App Stroe Connect Rest APIS 也可以获取hangs报告信息。
参考:
https://developer.apple.com/videos/play/wwdc2021/10258
https://developer.apple.com/videos/play/wwdc2022/10082/