1. Crash Report(With Xcode)
2. symbolicate crash log(With symbolicatecrash)
下面這張圖是Apple官方文件的圖,描述了方法1和方法2
ref: https://developer.apple.com/library/archive/technotes/tn2151/index.html?fbclid=IwAR1JhuffKjVQhf9RC77pyy4kRr2ejZS7cp3FNwYvWWWl06TRflhkWRrunM*
(1) 編譯器(Compiler)把我們的程式碼轉成機器碼(binary code)時,同時也產生debug symbol(讓binary code能對應到我們寫的程式碼).debug symbol有可能和binary code包在一起或是在另一個獨立的Debug Symbo(dSYM)file.Xcode預設是產生獨立得dSYM file來減少binary code size.
(2) 當你為了發佈app進行打包的時候,Xcode會把app的binary code和dSYM file一起儲存在home folder底下(EX: /Users/YourUserName/Library/Developer/Xcode/Archives)
(3) 當你發佈你的app到App Store或TestFlight(Beta測試)時,會有一個選項讓你選擇是否要上傳dSYM檔,請選擇上傳,這樣才能夠收到一般使用者(p.s 需同意分享app診斷資料)或測試人員的crash report.
(4) 當你的程式發生crash,未符號化(unsymbolicated)的crash report將會存在ios裝置上
Note: 未符號化的crash report指的是機器碼
符號化的crash report指的是你的程式碼的某一行
(5)
如果你發佈app的方式是透過AdHoc or Enterprise distribution(i.e 沒上傳到App store上),則可以透過把裝置連接到mac,然後在Xcode中點選Window -> Devices and Simulators中去取出crash log
Note: 如果無法直接取得ios裝置,也可以請測試人員在iphone系統設定->隱私權->分析->分析資料中找到crash的log,把crash log用email方式寄到你的信箱
(6)
從Device中取出crash log後,可以像之前提到的,利用dSYM file來進行符號化,找出crash在哪一行.
Note: 可在Xcode裡面或無Xcode下進行符號化(之後會提到),唯一的差別是在Xcode裡面進行符號化,可以幫你導到crash的那一行.反之,則是看到crash那行code.意義一樣,沒有差別.
(7)
如果一般使用者選擇分析診斷資料給Apple或是透過TestFlight下載的測試app,都會將crash report上傳到App Store.
(8)
App store會對crash report進行符號話並歸類.(這行為稱為Crash Point)
(9)
你可以在Xcode中的Window -> Organizer看到歸類好的crash report
1. Crash Report - Symbolicating iOS Crash Reports With Xcode
2. symbolicate crash log - Symbolicating Crash Reports With symbolicatecrash
1. Symbolicating iOS Crash Reports With Xcode
第一個方法只要在Xcode中的Window -> Organizer中去點到我們的app的Crash頁面,直接就可以看到符號化的結果,如果你的程式碼是當時build的版本,則直接點crash就可以導到我們程式碼crash的那一行
2. Symbolicating Crash Reports With symbolicatecrash
這個方法是利用Xcode的一個工具symbolicatecrash
步驟如下:
1.設定DEVELOPER_DIR環境變數
export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer
2. 先切換到有symbolicatecrash的路徑:
/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources
在這個資料夾底下就有symbolicatecrash這個工具 (注意不同版本Xcode,這個工具的路徑可能不同)
3.輸入以下指令 (假設crash log和dSYM都放在~/Desktop/test/底下,而我們符號化的結果存在Result.log檔案裡)
./symbolicatecrash ~/Desktop/test/XXXX.log ~/Desktop/test/XXXX.app.dSYM/ > ~/Desktop/test/Result.log
這樣你就可以產生出對應到程式碼的crash log了
詳細可參考下面這個連結:
ref: https://www.jianshu.com/p/da186c14db0f