iOS Crash檔案獲取及符號化
阿新 • • 發佈:2020-06-24
-
Crash
檔案獲取
- 大致可以分為兩種方式:遠端獲取和本地獲取;具體可以分為如下四種途徑
1.1. 遠端獲取;已經上傳到iTunes Connect
的應用,可以通過iTunes Connect
的App分析
檢視App
崩潰情況不會有崩潰日誌
,如果是TestFlight
測試,則可以在iTunes Connect
獲取到崩潰日誌
1.2. 遠端獲取;通過Xcode
選單Window -> Organizer -> Crashes
獲取使用者的崩潰日誌
- 注意:以上兩種途徑都需要登入開發者賬號,並且需要使用者共享
iPhone
分析,才能夠獲取到使用者的崩潰日誌 - 注意:官方提供的崩潰資訊並不是實時的,只能檢視兩天之前的崩潰資訊,需要實時的可以使用第三方工具
1.3. 本地獲取;在手機上設定 -> 隱私 -> 分析與改進 -> 分析資料
中,根據應用名稱和日期時間找到你需要的日誌,點選進去後,右上角會有個分享按鈕,分享給Mac
1.4. 把手機連線到Mac
,通過Xcode
選單Window -> Devices and Simulators -> Devices -> View Device Logs
獲取使用者的崩潰日誌
- 注意某些
iOS
系統會沒有上面提到的分享按鈕,這時候可以全選複製,再傳送給Mac
-
Crash
檔案符號化
- 大致也是分為兩種方式:使用
Xcode
自動符號化和通過手動命令列工具symbolicatecrash
dSYM
檔案,只不過前者是Xcode
自動幫我們完成的 - 注意:如果你們的應用是通過
Xcode
上傳iTunes Connect
的,並同時上傳了.xcarchive
檔案(實際上是一個資料夾,包含.ipa和.dSYM檔案)
,Xcode
會預設幫你勾選該選項,那麼從iTunes Connect
獲取到的日誌就已經是符號化過的了
2.1. 使用Xcode
自動符號化Crash
檔案,Xcode
自帶的工具非常好用
- 如果你用的
Mac
就是打包的機子,並且得到了發生崩潰的手機,那麼手機連線電腦,通過Xcode
選單Window -> Devices and Simulators -> Devices -> View Device Logs
Re-Symbolicate Log
- 如果只有
Mac
出包機,沒有手機只有崩潰日誌,那麼同樣可以通過Xcode
選單Window -> Devices and Simulators -> Devices -> View Device Logs
把崩潰日誌直接拖進去,就是符號化過後的,如果沒有符號化,就稍微等待一會兒,或者右擊點出選單選擇Re-Symbolicate Log
- 注意:在有些版本的
Xcode
是拖不進去的,遇到這種情況可以用下面的手動符號化方式 - 注意:上面的方法不一定要是出包機,本質是隻要你的電腦上有
dSYM
檔案,Xcode
就能自動找到他併為你符號化
2.2. 通過終端命令列工具symbolicatecrash
符號化
大概需要如下三個檔案,下面是獲取這些檔案的方法
- 通過選單
Xcode -> Window -> Organizer -> Archiver
找到打包的專案,右鍵Show In Finder
,找到AppName.xcarchive
,右鍵顯示包內容,找到AppName.app.dSYM
- 在桌面建立一個資料夾
tmp
,將以上兩個檔案拷貝到tmp
資料夾中 - 開啟終端,用
find /Applications/Xcode.app -name symbolicatecrash -type f
查詢symbolicatecrash
,其中/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash
路徑是需要的symbolicatecrash
檔案,將symbolicatecrash
檔案也拷貝到tmp
資料夾中 - 將需要分析的
crash
檔案也拷貝到tmp
資料夾中,crash
檔案的格式可能是.beta
、.crash
或.ips
- 在終端中使用以下命令列,
crash
檔案格式以.crash
為例
# 進入到 tmp 資料夾中
cd ~/Desktop/tmp
# 分析 crash 檔案,會在 `tmp` 資料夾中生成 crash.log 檔案
./symbolicatecrash ./xxx.crash ./AppName.app.dSYM > crash.log
或./symbolicatecrash ./xxx.crash ./.app.dSYM > crash.log
複製程式碼
- 如果終端報類似這樣的錯
zsh: permission denied: ./symbolicatecrash
說明是symbolicatecrash
檔案有問題,可能該檔案不是本機獲取的,或者是之前獲取的、Xcode
升級等問題造成的,重新在本機上按上面方法獲取即可 - 如果終端報類似這樣的錯
Error: "DEVELOPER_DIR" is not defined at ./symbolicatecrash line 69.
嘗試以下命令後,再重複上面命令,正常情況就可以分析bug了export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer
- 符號化之前,首先得確保
Crash
檔案和dSYM
這兩個檔案裡面的UUID
是一致的,如果不一致,就說明不是本次Crash
對應的檔案,就不能進行符號化;檢視dSYM
檔案裡面的UUID
命令:dwarfdump --uuid AppName.app.dSYM
;檢視Crash
檔案檔案的UUID
就比較簡單了,直接開啟,Crash
最上面的就是各種資訊,不同系統版本給的格式可能會有不同,下圖內容為參考
-
Xcode
在Debug
模式下預設關閉生成dSYM
檔案,Release
模式下預設生成dSYM
檔案的, 要生成dSYM
檔案需要檢視一下專案的Build Settigns -> Build Options -> Debug information Format
屬性;只有該屬性設定為DWARF with dSYM File
時,編譯才會生成dSYM
檔案 - 該文是在
Xcode 11.2
和iOS 13.2
上寫的教程,不同的系統版本的Xcode
和手機系統獲取路徑和符號化方式會有變化