-
Crash文件獲取
- 大致可以分為兩種方式:遠程獲取和本地獲??;具體可以分為如下四種途徑
1.1. 遠程獲取;已經(jīng)上傳到iTunes Connect的應用,可以通過iTunes Connect的App分析查看App崩潰情況不會有崩潰日志,如果是TestFlight測試,則可以在iTunes Connect獲取到崩潰日志
1.2. 遠程獲?。煌ㄟ^Xcode菜單Window -> Organizer -> Crashes獲取用戶的崩潰日志

- 注意:以上兩種途徑都需要登錄開發(fā)者賬號,并且需要用戶共享
iPhone分析,才能夠獲取到用戶的崩潰日志 - 注意:官方提供的崩潰信息并不是實時的,只能查看兩天之前的崩潰信息,需要實時的可以使用第三方工具
1.3. 本地獲??;在手機上設置 -> 隱私 -> 分析與改進 -> 分析數(shù)據(jù)中,根據(jù)應用名稱和日期時間找到你需要的日志,點擊進去后,右上角會有個分享按鈕,分享給Mac
1.4. 把手機連接到Mac,通過Xcode菜單Window -> Devices and Simulators -> Devices -> View Device Logs獲取用戶的崩潰日志
- 注意某些
iOS系統(tǒng)會沒有上面提到的分享按鈕,這時候可以全選復制,再發(fā)送給Mac
1.1該圖為早期iTunes Connect官網(wǎng),具體以當前官網(wǎng)為主
-
Crash文件符號化
- 大致也是分為兩種方式:使用
Xcode自動符號化和通過手動命令行工具symbolicatecrash符號化;這兩種方式原理一樣,都需要dSYM文件,只不過前者是Xcode自動幫我們完成的 - 注意:如果你們的應用是通過
Xcode上傳iTunes Connect的,并同時上傳了.xcarchive文件(實際上是一個文件夾,包含.ipa和.dSYM文件),Xcode會默認幫你勾選該選項,那么從iTunes Connect獲取到的日志就已經(jīng)是符號化過的了
2.1. 使用Xcode自動符號化Crash文件,Xcode自帶的工具非常好用
- 如果你用的
Mac就是打包的機子,并且得到了發(fā)生崩潰的手機,那么手機連接電腦,通過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是拖不進去的,遇到這種情況可以用下面的手動符號化方式 - 注意:上面的方法不一定要是出包機,本質(zhì)是只要你的電腦上有
dSYM文件,Xcode就能自動找到他并為你符號化
2.2. 通過終端命令行工具symbolicatecrash符號化
大概需要如下三個文件,下面是獲取這些文件的方法

- 通過菜單
Xcode -> Window -> Organizer -> Archiver找到打包的項目,右鍵Show In Finder,找到AppName.xcarchive,右鍵顯示包內(nèi)容,找到AppName.app.dSYM - 在桌面創(chuàng)建一個文件夾
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最上面的就是各種信息,不同系統(tǒng)版本給的格式可能會有不同,下圖內(nèi)容為參考
-
Xcode在Debug模式下默認關閉生成dSYM文件,Release模式下默認生成dSYM文件的, 要生成dSYM文件需要查看一下項目的Build Settigns -> Build Options -> Debug information Format屬性;只有該屬性設置為DWARF with dSYM File時,編譯才會生成dSYM文件 - 該文是在
Xcode 11.2和iOS 13.2上寫的教程,不同的系統(tǒng)版本的Xcode和手機系統(tǒng)獲取路徑和符號化方式會有變化


