蘋果iOS App開發(fā)難免會遇到Bug,需要進(jìn)行調(diào)試。筆者曾經(jīng)遇到一個問題是提交到App Store審核的App會報錯,但是在本地測試,哪怕是用TestFlight下載提交的那個版本測試,也不會報錯。蘋果審核員提供了幾個crash的文件,建議我們進(jìn)行問題排查。這就杯具了。因為開發(fā)人員在發(fā)布的時候,在設(shè)置中設(shè)置“Strip Debug Symbols During Copy”中“Release”為“Yes”。

所以,打開crash文件一看,在自己的APP那里,顯示的都是一堆內(nèi)存地址,像“0x10004000”這樣。

這該如何處理呢?
首先必須認(rèn)識到,crash文件的解讀離不開“Symbolication”(符號化)。沒有符號化的crash文件就象上圖一樣,完全沒法理解。而如果正確的符號化了,就會變成下圖的樣子:

符號化的關(guān)鍵是一個叫做“.dSYMfile”的文件,這是在打包(Archieve)時一并生成的。一般情況下,Xcode的默認(rèn)配置,打包(Archieve)都會選擇“Release”的配置,而“Release”配置會默認(rèn)設(shè)置“Strip Debug Symbols During Copy”為“Yes”,這樣生成的binary實際上是不能提供符號信息的。
遇到這種情況,可以按照以下步驟處理:
1)獲取和App Store上的版本一致的代碼包。配置管理這個時候就顯出重要性了:)(所有的代碼都必須做配置管理,每一次發(fā)布都要打Tag?。。?。
2)修改“Strip Debug Symbols During Copy”下“Release”為“No”。
3)重新打包(Archieve)。
4)打開“Windows”->“Devices”,選擇開發(fā)機,點擊右側(cè)的“View Device Logs”。

5)將crash文件拖入左側(cè),并點擊“All Logs”。這時,就可以看到右側(cè)原來不可讀內(nèi)容變成可讀的代碼,并且定位到了代碼行。

6)如果還是僅有內(nèi)存地址,那么就在左側(cè)的crash記錄上點擊右鍵,選擇“Re-Symbolicate Log”。如下圖:

有了明確的crash記錄做指導(dǎo),我們很快就定位到了真正問題所在。快速地解決了問題。
By the way:上圖所示的問題實際上是百度的逆地址查詢有可能返回空字符串的城市名稱,坑爹的是,百度給出的結(jié)果狀態(tài)卻是正確的。但這空的城市名稱實際上是沒法處理的。在國內(nèi),大多數(shù)情況下,可能都能得到正確值,但蘋果審核員在米國?。。。?/p>
附上蘋果官方文檔鏈接: