項目崩潰,crashLog可是你的救命稻草淤堵,能讓你快速分析出bug的問題所在耀鸦,不會收集可不行柬批。
當(dāng)然項目在開發(fā)時,可以通過控制臺log看到調(diào)用堆棧袖订,發(fā)布版的crash 收集一般有三種方式可選:
1.蘋果Crash收集服務(wù)
通過iTunes Connect(Manage Your Applications - View Details - Crash Reports)獲取用戶的crash日志氮帐。在XCode 中Window->Organizer->Crashes也可以看到同樣的crash日志,請看這篇文章:如何查看iOS已上架app崩潰分布洛姑、定位crash發(fā)生的行
但是 收集crash功能需要用戶設(shè)置->隱私->診斷與用量->診斷與用量數(shù)據(jù)(iOS8一下在通用中設(shè)置) 選擇自動發(fā)送上沐,并與開發(fā)者共享即可;所以不推薦用楞艾。
2.自己實現(xiàn)應(yīng)用內(nèi)崩潰收集参咙,并上傳服務(wù)器
在程序啟動時加上一個異常捕獲監(jiān)聽,用來處理程序崩潰時的回調(diào)動作NSSetUncaughtExceptionHandler (&UncaughtExceptionHandler)硫眯。UncaughtExceptionHandler是一個函數(shù)指針蕴侧,該函數(shù)需要我們實現(xiàn),可以取自己想要的名字两入。當(dāng)程序發(fā)生異常崩潰時戈盈,該函數(shù)會得到調(diào)用,這跟C谆刨,C++中的回調(diào)函數(shù)的概念是一樣的。
獲取到了崩潰日志归斤,如何發(fā)送給開發(fā)者呢痊夭,目前一般有以下兩種方式:
將崩潰信息持久化在本地,下次程序啟動時脏里,將崩潰信息作為日志發(fā)送給開發(fā)者她我。通過郵件發(fā)送給開發(fā)者。 不過此種方式需要得到用戶的許可,因為iOS不能后臺發(fā)送短信或者郵件番舆,會彈出發(fā)送郵件的界面酝碳,只有用戶點擊了發(fā)送才可發(fā)送。
3.第三方收集crash
使用友盟恨狈、bugHD疏哗、Flurry 等第三方崩潰統(tǒng)計工具,原理都是根據(jù)系統(tǒng)產(chǎn)生的crash日志進行了一次提取或封裝禾怠,然后將封裝后的crash文件上傳到對應(yīng)的服務(wù)端進行解析處理返奉。
優(yōu)點是快速集成crash收集功能,有完善的后臺管理界面和解析處理(crash文件是要解析后才能看懂的)吗氏,好用還不要錢芽偏。
友盟崩潰統(tǒng)計官方文檔 bugHD統(tǒng)計 Flurry
最后 惡意覆蓋問題
崩潰收集統(tǒng)計函數(shù)應(yīng)該只進行一次調(diào)用,如果用第三方的話也最好只用一個第三方弦讽,這樣我們獲取崩潰統(tǒng)計信息的途徑也是唯一的污尉。
第三方統(tǒng)計工具并不是用的越多越好,使用 多個崩潰收集第三方會導(dǎo)致NSSetUncaughtExceptionHandler()函數(shù)指針的惡意覆蓋往产,現(xiàn)在很多第三方崩潰收集工具為了確保自己能最大可能的收集到崩潰信息被碗,會對NSSetUncaughtExceptionHandler()函數(shù)指針的惡意覆蓋。因為這個函數(shù)是將函數(shù)地址當(dāng)做參數(shù)傳遞捂齐,所以只要重復(fù)調(diào)用就會被覆蓋蛮放,這樣就不能保證崩潰收集的穩(wěn)定性。