******閱讀完此文,大概需要3分鐘******
一、背景
最近梳理了公司的Crash管理流程,感覺這個過程可以作為一款較大業務量App的參考流程,調研了其他,基本都是大同小異。
二、Crash檔案的産生與符号化
1、符号表
符号化的3種方法,不多說,前兩種不是本文讨論的,直接略過,說第三種。
每一個可執行程式都有一個build UUID來唯一辨別(這個UUID不同于使用者裝置的那個唯一UUID,這個是标示應用的),在Xcode項目編譯後,在編譯生成的二進制檔案.app的同級目錄下生成的同名的.dSYM檔案(符号表檔案)。.dSYM檔案其實是一個目錄,在子目錄中包含了一個16進制的儲存函數位址映射資訊的中轉檔案,所有Debug的symbols都在這個檔案中(包括檔案名、函數名、行号等),是以也稱之為調試符号資訊檔案。
2、3個檔案的一緻性
這3個檔案是:符号表(.dSYM檔案)、應用二進制檔案(.app檔案)、崩潰日志(.crash檔案), 通過比較三者的uuid是一緻的,隻有在這三者一緻的情況下,才能正确的把函數位址符号化出來。集齊這三個檔案,我們再借助atos工具(實際是一個可以把位址轉換為函數名(包括行号)的工具)就可以得到符号化後的crash資訊了。
三、自動化系統的搭建
.dsym符号化檔案是xcode編譯階段的産物,在打包編譯時就要保留好。因為我們使用者安裝的ipa包裡是沒有這個檔案的。是以需要每次打包完成都要save一份。如果要做到整個過程自動化,當然需要部署到機器上,建立一個符号化的服務,這個服務的大緻過程如下:
1、.dsym與.app檔案的上傳
前面說了,符号化前提是集齊三個檔案,其中.crash是使用者提供,那麼.dsym與.app就是釋出者提供了。記住xcode打包不一定會自動建立符号化檔案如果你xcode設定錯誤的話(Build Settings -> Build Options -> Debug Information Format 設定為DWARF with dSYM File),xcode打包完成時,啟動對應的上傳子產品,将.dsym和.app壓縮之後上傳到遠端服務。
2、使用者.crash檔案的擷取
蘋果的app每次crash都會産生一個.crash檔案,不可能奢望使用者給你提供裝置去擷取.crash檔案,是以App首先需要擁有擷取.crash檔案并上傳的能力,如果上傳成功,推薦及時清理掉.crash檔案(為了App的瘦身,也真是夠拼了)。
3、符号化與Crash分類
經過上面2步之後,就集齊了Crash符号化的3個必需檔案,擷取到具體的代碼檔案資訊後,可以根據代碼的歸屬類,進行進一步的分類,找到對應代碼的責任人,通過郵件或者其他方式通知責任人。
4、有沒有其他的方案
從上面的過程中,需要你去啟服務管理這個過程,如果你沒有服務支援人員,僅靠用戶端人員,也是有妥協方案的。例如,你可以将
.dsym檔案打包一起進入ipa安裝包(或者采取懶加載方式download,這個檔案大小也是客觀的),在App用戶端集齊這三個檔案,然後進行符号化(蛋疼的性能問題)。當然,這種也隻适合小型App用。
四、參考文獻:
1、https://developer.apple.com/library/content/documentation/IDEs/Conceptual/AppDistributionGuide/ConfiguringYourApp/ConfiguringYourApp.html
2、http://www.cocoachina.com/industry/20140514/8418.html
3、http://blog.csdn.net/longzs/article/details/51272980