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