有很多問題是在開發測試過程中無法遇到和重制的,這就需要統計線上的崩潰資訊進行定位。
什麼是 dSYM
Xcode編譯項目後,我們會看到一個同名的 dSYM 檔案,dSYM 是儲存 16 進制函數位址映射資訊的中轉檔案,我們調試的 symbols 都會包含在這個檔案中,并且每次編譯項目的時候都會生成一個新的 dSYM 檔案,位于 /Users/<使用者名>/Library/Developer/Xcode/Archives 目錄下,對于每一個釋出版本我們都很有必要儲存對應的 Archives 檔案
當我們軟體 release 模式打包或上線後,不會像我們在 Xcode 中那樣直覺的看到用崩潰的錯誤,這個時候我們就需要分析 crash report 檔案了,iOS 裝置中會有日志檔案儲存我們每個應用出錯的函數記憶體位址,通過 Xcode 的 Organizer 可以将 iOS 裝置中的 DeviceLog 導出成 crash 檔案,這個時候我們就可以通過出錯的函數位址去查詢 dSYM 檔案中程式對應的函數名和檔案名。大前提是我們需要有軟體版本對應的 dSYM 檔案,這也是為什麼我們很有必要儲存每個釋出版本的 Archives 檔案了。
友盟的崩潰資訊跟蹤
友盟的使用比較簡單,因為崩潰資訊中有提示的指令,前提是上線時是你本機的 Xcode 進行的上傳或導出工作,因為這樣才會有dSYM檔案。
首先打開友盟的崩潰統計,找到要定位的 bug,點選綠色的記憶體位址,就會彈出一個彈框,拷貝彈框中的指令

然後打開Mac指令行, 将拷貝的指令粘貼進去,按 return 鍵執行,如果解析成功的話,就會列印出崩潰資訊了,方法、檔案、行數等。
其他崩潰統計或不是自己打包
如果使用的是其他的崩潰統計服務或者當時并不是自己打包的,隻有崩潰資訊的記憶體位址,可以使用下面的辦法。
首先,找到當時archive的.xcarchive檔案。
如果是本機進行的archive,那麼在
/Users/username/Library/Developer/Xcode/Archives
目錄下會找到所有的archive檔案,該目錄是預設的存放目錄,如果這是公司的辦公本,并且你沒有在該目錄下找到最近的檔案,則有可能是 Xcode 的設定被更改了。
打開 Xcode 首選項,選擇最右側的 locations,就可以看到 Xcode 的相關檔案存放路徑,點選箭頭即可打開檔案位置。
如果并不是本機進行的 archive,那麼找到當時的電腦或則從同僚那裡拷貝到archive也是可以的。
好的,archive檔案已經找到,下面就可以進行定位了。
右鍵archive檔案 選擇 顯示包内容,然後選擇 dSYMs 檔案夾裡的.dSYM 檔案再次顯示包内容,然後會找到一個 DWARF 的檔案夾,保持該 Finder 視窗打開
第三步,打開終端,先輸入 cd,然後選中将DWARF檔案夾拖到終端視窗上,會看到 cd 後面自動加上了DWARF檔案夾的路徑,按 return 鍵進入該目錄下
最後在終端裡輸入如下指令
atos -arch arm64 -o Xcode 項目名稱 記憶體位址
例如
atos -arch arm64 -o test-IOS
按 return 鍵執行就會列印出該記憶體位址的具體檔案、方法以及行數等資訊,找到崩潰的位置就知道可能的原因以及解決方法了!