做了快兩年的開發(fā)了,沒有寫過博客,最近公司app上架,程序崩潰被拒絕了,可是給的crash文件,又看不出哪里的問題,網(wǎng)上各種搜,終于找到了解決的辦法,想想還是寫個博客吧,希望給哪些也遇到這類問題的朋友一點幫助吨灭。
什么是dSYM文件
? ? ? Xcode編譯項目后悍及,我們會看到一個同名的dSYM文件缎除,dSYM是保存16進(jìn)制函數(shù)地址映射信息的中轉(zhuǎn)文件配喳,我們調(diào)試的symbols都會包含在這個文件中雷袋,并且每次編譯項目的時候都會生成一個新的dSYM文件欢嘿,位于/Users/<用戶名>/Library/Developer/Xcode/Archives目錄下屎鳍,對于每一個發(fā)布版本我們都很有必要保存對應(yīng)的Archives文件莉给。
dSYM文件有什么作用
? ? ?當(dāng)我們軟件release模式打包或上線后毙石,不會像我們在Xcode中那樣直觀的看到用崩潰的錯誤,這個時候我們就需要分析crash report文件了颓遏,iOS設(shè)備中會有日志文件保存我們每個應(yīng)用出錯的函數(shù)內(nèi)存地址徐矩,通過Xcode的Organizer可以將iOS設(shè)備中的DeviceLog導(dǎo)出成crash文件,這個時候我們就可以通過出錯的函數(shù)地址去查詢dSYM文件中程序?qū)?yīng)的函數(shù)名和文件名叁幢。大前提是我們需要有軟件版本對應(yīng)的dSYM文件滤灯,這也是為什么我們很有必要保存每個發(fā)布版本的Archives文件了。
通過Mac自帶的命令行工具解析Crash文件需要具備三個文件
1.symbolicatecrash曼玩,Xcode自帶的崩潰分析工具鳞骤,使用這個工具可以更精確的定位崩潰所在的位置,將0x開頭的地址替換為響應(yīng)的代碼和具體行數(shù)黍判。?
2.我們打包時產(chǎn)生的dSYM文件豫尽。
3.崩潰時產(chǎn)生的Crash文件,例如:*.crash。
下面開始解析
? ? ? ? 第一步,在桌面新建一個文件夾,一般命名為Crash,然后將.Crash , ,.app.dSYM,?symbolicatecrash三個放到這個文件夾里,首先找到.app.dSYM文件,打開xcode,window->Organizer打開之后,找到上傳時候?qū)?yīng)的版本然后show in Finder
到了這個界面之后顯示這個包的內(nèi)容
到了這個頁面就可以看到.app.dSYM了
第二步,找到symbolicatecrash
首先給xcode打一個補(bǔ)丁:命令行運(yùn)行
/usr/bin/xcode-select -print-path ? ? ? ? ? ? ? ? ? ??
?如果輸出"/Developer"或者其他非"/Applications/Xcode.app/Contents/Developer/"的內(nèi)容顷帖,運(yùn)行下面的命令:
sudo /usr/bin/xcode-select -switch/Applications/Xcode.app/Contents/Developer/
2.查找symbolicatecrash:
find /Applications/Xcode.app -name symbolicatecrash -type f
獲取路徑美旧,這個命令可能執(zhí)行的時間長一點,耐心等待一下,找到這個路徑后復(fù)制下來,前往這個路徑就可以找到symbolicatecrash,把它復(fù)制下來放到開始建的那個文件夾里,Xcode7.3我當(dāng)時的路徑是/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash
第三步,把三個文件都放到那個文件夾里,然后在終端執(zhí)行命令
1.首先切換到這個文件夾
cd /Users/app/Desktop/crash
2.解析這個Crash文件,*,xx指相應(yīng)的文件名字,多個Crash文件,重復(fù)使用這個命令就行,不過一定要把導(dǎo)出的文件名symbol.text改一下,以免覆蓋原來的
./symbolicatecrash ./*.crash ./xx.app.dSYM> symbol.text
3.如果上邊的命令不成功,使用命令檢查一下環(huán)境變量,返回結(jié)果是:/Applications/Xcode.app/Contents/Developer/
xcode-select -print-path
4.如果返回的不是上面的結(jié)果,需要使用下面的命令設(shè)置一下導(dǎo)出的環(huán)境變量,然后重新解析就行了
export DEVELOPER_DIR=/Applications/XCode.app/Contents/Developer
解析完成后,會在Crash文件夾生成一個symbol.text
打開后圖中紅色部分就是崩潰的地方