作為壹名應用開發者,相信妳經常碰到以下情景:
在妳將應用提交到App Store之前,想必妳已經做了大量的測試工作,在妳的設備上它也運行的很好,然而,還是會出現使用時閃退的情況。相信大家已經做好了Crash log的收集工作。
Crash log主要分為兩種情況:
1.連接真機進行調試
2.App Store上應用的Bug追蹤
本文主要講的是App Store上bug的分析。
上圖正是Apple給的崩潰日誌,下面我們逐步分析壹下日誌的內容。
1.進程信息
Incident Identifier :crash的id
CrashReporter Key :crash的設備id
Hardware Model :手機型號
Process :[app名字] [進程ID]
Path :app的位置
Identifier :bundle ID
Version :版本號
AppStoreTools
Code Type :arm64
Role :app處於前臺
Parent Process
Coalition
2.基本信息
Date/Time :crash發生時間
Launch Time :app啟動時間
OS Version :iOS版本
Release Type
Baseband Version
Report Version
3.異常信息
Exception Type :異常類型
Exception Codes :異常地址
Exception Note :描述
Triggered by Thread :異常發生的線程
4.異常回溯
發生異常時的線程堆棧
在分析之前需要準備 dSYM 文件, crash log 和 symbolicatecrash (Xcode自帶的崩潰分析工具)。
什麽是dSYM文件?
Xcode編譯項目後,我們會看到壹個同名的 dSYM 文件,dSYM 是保存 16 進制函數地址映射信息的中轉文件,我們調試的 symbols 都會包含在這個文件中,並且每次編譯項目的時候都會生成壹個新的 dSYM 文件,位於 /Users/用戶名 /Library/Developer/Xcode/Archives 目錄下,對於每壹個發布版本我們都很有必要保存對應的 Archives 文件
dSYM文件作用
我們可以通過crash log中出錯的函數地址去查詢 dSYM 文件中程序對應的函數名和文件名
1.在桌面新建壹個文件夾 crashtemp
找到"symbolicatecrash" 文件, 拷貝到剛才創建的 "crashtemp" 文件夾裏。
3. Xcode->Window->Organizer->Archives 顯示包內容 獲取dSYM文件拷貝到剛才創建的 "crashtemp" 文件夾裏。
4.crash log文件拷貝到 crashtemp 裏。
5.打開終端進入 crashtemp 文件夾:
6.檢驗crash、dSYM文件是否匹配
每壹個xx.app.dSYM 文件都有對應的 UUID,crash 文件也有自己的 UUID,只要這三個文件的 UUID 壹致,我們就可以通過他們解析出正確的錯誤函數信息了。
在 terminal 中輸入以下命令,查看UUID:
7.輸入以下命令
這時候終端將會進行處理......
生成壹個新的文件 symbol.crash ,這就是我們認識的crash文件。
有時候通過 symbolicatecrash 並不能解析出來崩潰信息,或者APP自身的堆棧能解析出來,但是系統的堆棧解析不出來。
可以通過 atos 命令逐行解析,通過這個命令可以解析指定的某壹行堆棧。