今天突然發現了一個解析iOS crash log的好方法,忍不住來分享一下。
相信每個做iOS開發的TX都應該不會對symbolicatecrash陌生,我們第一次遇到真機上產生的崩潰日志時,在網上搜到的大部分教程都告訴我們說要用symbolicatecrash來解析crash log,我信了,所以相當長一段時間內,我都是用這個工具來解析crash log的。
每次都去敲命令來解析crash log本身就是一件很蛋疼的事情,但這還不是麻煩的,最麻煩的是用symbolicatecrash還經常遇到問題:怎么crash log又解析失敗了?怎么批量解析crash log?
問題出在方法上,實際上我們完全用不着symbolicatecrash的,因為Xcode中自帶的organizer就是很好的解析crash log工具了。
舉個例子,如果我們的應用是在自己的機器上編譯生成的,把應用裝在真機上如果有崩潰產生,把真機通過數據線連接到Mac電腦上,打開Xcode菜單上的Window——Organizer,找到設備的device logs項中的crash log,稍等片刻,你就會發現這里的crash log已經被自動解析過了(大部分情況會自動解析,如果不行請右鍵點擊選擇Re-Sysbomlicate)。
但是如果應用不是在自己的編譯上生成的,你會發現organizer不會自動解析crash log(除了系統函數)。怎么在這種情況下也讓organizer也能自動解析crash log呢?
其實之前的organizer之所以能自動解析你設備上的crash log,是因為它能根據spotlight的索引來找到對應的.app和dSYM文件,對於這一點,我的猜測是在自己的Mac電腦上編譯生成應用時,系統自動對其進行了索引。這個索引應該是根據app uuid來索引的。這個uuid可以執行下面的命令得到:
dwarfdump —uuid YourApp.app/YourApp
dwarfdump —uuid YourApp.app.dSYM
如果要能解析出crash log,crash log中攜帶的uuid與dSYM文件的uuid必須與app uuid一致。
既然spotlight能自動進行索引,那是不是也可以手動進行索引呢?答案是能,這正是自動解析的關鍵。手動索引的命令是mdimport。比如,把iOS應用的.app和.dSYM文件放到一個文件夾中,執行命令mdimport foldername就可以。命令執行完成后再用剛才的organizer去查看crash log,你會發現也能自動解析了。
這意味着什么呢?意味着你把應用所有版本的.app和.dSYM文件放入一個專門的文件夾中,只要mdimpor這個文件夾,以后的organizer就能自動解析出你所有的crash log。
好處不僅僅是這一點。organizer還有一個import功能,借助這個功能,我們可以把其它Mac電腦上的crash log導入到自己電腦中的organizer,然后就可以自動解析。更好的是,用這個功能可以批量導入收集到的crash log,然后我們就可以批量解析所有的crash log。
比起用symbolicatecrash,這種方法簡便了許多,從現在起,你可以拋棄symbolicatecrash了。但其實這還不是最好的方法,目前先進的方法是用crash report管理系統來管理所有的crash,比如使用QuincyKit, Crashlytics, Flurry等來進行管理,有時間自己也研究研究。