用Xcode 和 on-device Detection 追蹤 APP掛起
什么是hangs馍悟?
短時(shí)間無(wú)反應(yīng)严拒,大于250毫秒沒(méi)反應(yīng)奴曙。
主線程忙由驹,或者主線程等待其他線程或系統(tǒng)資源募疮, 導(dǎo)致APP反應(yīng)慢炫惩。
檢測(cè)掛起的新增時(shí)期
在iOS16和Xcode14以前,MetrickKit可以在beta App和public App階段收集掛起率和診斷報(bào)告阿浓,Xcode Organizer可以在public App階段提供掛起的統(tǒng)計(jì)數(shù)據(jù)他嚷。
在iOS16和Xcode14以后,在APP開(kāi)發(fā)芭毙、beta測(cè)試和已發(fā)布時(shí)期都可以獲取掛起信息筋蓖。
- 在開(kāi)發(fā)階階段Xcode新增Thread Performance Checker功能,Instrument工具的Time Profiler新增hangs信息
- 在beta測(cè)試階段可以使用測(cè)試機(jī)的 On-Device Hang Detection
-
在APP發(fā)布時(shí)期退敦,Xcode Orgainer 新增了hangs 數(shù)據(jù)項(xiàng)目粘咖,可以查看線上APP hangs數(shù)據(jù),
在不同時(shí)期應(yīng)用掛起檢測(cè)
1.APP開(kāi)發(fā)調(diào)試階段
-
開(kāi)啟Thread Performance Checke功能
在 Edit schema -> Run -> Diagnostics 選項(xiàng)中開(kāi)啟 Thread Performance Checker
調(diào)試APP期間侈百,當(dāng)執(zhí)行的代碼優(yōu)先級(jí)不對(duì)的時(shí)候瓮下,即出現(xiàn)主線程等待子線問(wèn)題時(shí),會(huì)在Xcode問(wèn)題導(dǎo)航器中通知出現(xiàn)掛起問(wèn)題
2.如果掛起時(shí)想知道其他線程在干什么钝域,需要知道棧調(diào)用信息讽坏,可以使用Instrument的Timer Profiler, 出現(xiàn)掛起時(shí)Timer Profiler 會(huì)檢測(cè)到Hangs并提供調(diào)用信息,三擊檢測(cè)項(xiàng)會(huì)出現(xiàn)不同線程CPU的使用情況
此外Instrument還單獨(dú)提供了Hang tracing工具例证,可以為檢測(cè)和標(biāo)記hangs配置一個(gè)hang閾值路呜,檢測(cè)是否存在hang行為
2.beta版階段
可以在開(kāi)發(fā)設(shè)備被打開(kāi) Hang Detection功能,打開(kāi)位置 Settings -> Developer -> Hang Detection
此處可以設(shè)置掛起閾值為250ms、500ms拣宰、1000ms党涕、2000ms不同的值,出現(xiàn)hang時(shí)APP內(nèi)會(huì)有實(shí)時(shí)的彈框提示巡社,Hang Detection中也會(huì)保留hang日志膛堤。
3.APP發(fā)布時(shí)期
Xcode Organizer支持hang報(bào)告和診斷數(shù)據(jù),每條hang數(shù)據(jù)會(huì)包含執(zhí)行函數(shù)名晌该、掛起時(shí)間肥荔、不同手機(jī)和系統(tǒng)版本的統(tǒng)計(jì)信息
在 App Stroe Connect Rest APIS 也可以獲取hangs報(bào)告信息。
參考:
https://developer.apple.com/videos/play/wwdc2021/10258
https://developer.apple.com/videos/play/wwdc2022/10082/