項目崩潰,crashLog可是你的救命稻草,能讓你快速分析出bug的問題所在,不會收集可不行。
當然項目在開發時,可以通過控制臺log看到調用堆棧,發布版的crash 收集一般有三種方式可選:
1.蘋果Crash收集服務
通過iTunes Connect(Manage Your Applications - View Details - Crash Reports)獲取用戶的crash日志。在XCode 中Window->Organizer->Crashes也可以看到同樣的crash日志,請看這篇文章:如何查看iOS已上架app崩潰分布、定位crash發生的行
但是 收集crash功能需要用戶設置->隱私->診斷與用量->診斷與用量數據(iOS8一下在通用中設置) 選擇自動發送,并與開發者共享即可;所以不推薦用。
2.自己實現應用內崩潰收集,并上傳服務器
在程序啟動時加上一個異常捕獲監聽,用來處理程序崩潰時的回調動作NSSetUncaughtExceptionHandler (&UncaughtExceptionHandler)。UncaughtExceptionHandler是一個函數指針,該函數需要我們實現,可以取自己想要的名字。當程序發生異常崩潰時,該函數會得到調用,這跟C,C++中的回調函數的概念是一樣的。
獲取到了崩潰日志,如何發送給開發者呢,目前一般有以下兩種方式:
將崩潰信息持久化在本地,下次程序啟動時,將崩潰信息作為日志發送給開發者。通過郵件發送給開發者。 不過此種方式需要得到用戶的許可,因為iOS不能后臺發送短信或者郵件,會彈出發送郵件的界面,只有用戶點擊了發送才可發送。
3.第三方收集crash
使用友盟、bugHD、Flurry 等第三方崩潰統計工具,原理都是根據系統產生的crash日志進行了一次提取或封裝,然后將封裝后的crash文件上傳到對應的服務端進行解析處理。
優點是快速集成crash收集功能,有完善的后臺管理界面和解析處理(crash文件是要解析后才能看懂的),好用還不要錢。
友盟崩潰統計官方文檔 bugHD統計 Flurry
最后 惡意覆蓋問題
崩潰收集統計函數應該只進行一次調用,如果用第三方的話也最好只用一個第三方,這樣我們獲取崩潰統計信息的途徑也是唯一的。
第三方統計工具并不是用的越多越好,使用 多個崩潰收集第三方會導致NSSetUncaughtExceptionHandler()函數指針的惡意覆蓋,現在很多第三方崩潰收集工具為了確保自己能最大可能的收集到崩潰信息,會對NSSetUncaughtExceptionHandler()函數指針的惡意覆蓋。因為這個函數是將函數地址當做參數傳遞,所以只要重復調用就會被覆蓋,這樣就不能保證崩潰收集的穩定性。