背景
公司的項(xiàng)目在使用Firebase-Crashlytics進(jìn)行App的崩潰監(jiān)控,近期發(fā)現(xiàn)在Firebase上看不到新發(fā)布的幾個(gè)App版本的崩潰數(shù)據(jù),這里記錄下排查過(guò)程。
原因
經(jīng)過(guò)一番排查,發(fā)現(xiàn)原因是我們?cè)谶M(jìn)行包瘦身工作時(shí),在項(xiàng)目中設(shè)置EXPORTED_SYMBOLS_FILE選項(xiàng),提供了一個(gè)空文件。Crashlytic SDK的正常啟動(dòng)依賴(lài)__mh_execute_header。在Firebase的Github上有這個(gè)問(wèn)題的討論。找到原因后,解決方案也很簡(jiǎn)單:在EXPORTED_SYMBOLS_FILE的文件中,增加一行__mh_execute_header即可。
排查過(guò)程
排查該問(wèn)題的過(guò)程比較曲折,可以分為3個(gè)階段:
- 對(duì)比代碼版本變化,從代碼上尋找與Firebase相關(guān)的改動(dòng)。發(fā)現(xiàn)清理警告時(shí)改動(dòng)過(guò)我們內(nèi)部封裝的Crash庫(kù),但是改動(dòng)內(nèi)容可以確定對(duì)Firebase不會(huì)產(chǎn)生影響。
- Firebase SDK版本過(guò)低。正常來(lái)說(shuō)這種使用廣泛的SDK,即使版本更新,也會(huì)保持對(duì)舊版本的兼容,所以Firebase SDK版本過(guò)低導(dǎo)致無(wú)法收集日志的可能性不大。
- 查看控制臺(tái)日志。這個(gè)方法比較實(shí)用,這次問(wèn)題的原因也是通過(guò)查看控制臺(tái)日志找到的。連接手機(jī),Mac上打開(kāi)控制臺(tái),選擇手機(jī)設(shè)備,啟動(dòng)APP,即可過(guò)濾相關(guān)的日志輸出。在控制臺(tái)的日志中,發(fā)現(xiàn)Crashlytics的日志,啟動(dòng)失敗,提示需要
__mh_execute_header信息。
總結(jié)
這次也是踩到了Firebase的一個(gè)坑,記錄一下,如果恰巧有同行遇到類(lèi)似的問(wèn)題,可以作為參考。同時(shí)推薦通過(guò)控制臺(tái)查App日志的方式進(jìn)行問(wèn)題排查,有些問(wèn)題在不需要運(yùn)行Xcode項(xiàng)目的情況下,就可以快速定位到。比如這次遇到的Crashlytics啟動(dòng)失敗問(wèn)題、以及之前遇到過(guò)的App測(cè)試包無(wú)法安裝問(wèn)題,在控制臺(tái)都會(huì)輸出有用的錯(cuò)誤日志。