什么是 dSYM 文件徽缚?
Xcode編譯項(xiàng)目后哲鸳,我們會(huì)看到一個(gè)同名的 dSYM 文件霜幼,dSYM 是保存 16 進(jìn)制函數(shù)地址映射信息的中轉(zhuǎn)文件瘾婿,我們調(diào)試的 symbols 都會(huì)包含在這個(gè)文件中,并且每次編譯項(xiàng)目的時(shí)候都會(huì)生成一個(gè)新的 dSYM 文件向拆,位于 /Users/<用戶名>/Library/Developer/Xcode/Archives 目錄下亚茬,對(duì)于每一個(gè)發(fā)布版本我們都很有必要保存對(duì)應(yīng)的 Archives 文件 ( AUTOMATICALLY SAVE THE DSYM FILES 這篇文章介紹了通過腳本每次編譯后都自動(dòng)保存 dSYM 文件)。
dSYM 文件有什么作用浓恳?
當(dāng)我們軟件 release 模式打包或上線后刹缝,不會(huì)像我們?cè)?Xcode 中那樣直觀的看到用崩潰的錯(cuò)誤,這個(gè)時(shí)候我們就需要分析 crash report 文件了颈将,iOS 設(shè)備中會(huì)有日志文件保存我們每個(gè)應(yīng)用出錯(cuò)的函數(shù)內(nèi)存地址梢夯,通過 Xcode 的 Organizer 可以將 iOS 設(shè)備中的 DeviceLog 導(dǎo)出成 crash 文件,這個(gè)時(shí)候我們就可以通過出錯(cuò)的函數(shù)地址去查詢 dSYM 文件中程序?qū)?yīng)的函數(shù)名和文件名晴圾。大前提是我們需要有軟件版本對(duì)應(yīng)的 dSYM 文件颂砸,這也是為什么我們很有必要保存每個(gè)發(fā)布版本的 Archives 文件了。
如何將文件一一對(duì)應(yīng)疑务?
每一個(gè) xx.app 和 xx.app.dSYM 文件都有對(duì)應(yīng)的 UUID沾凄,crash 文件也有自己的 UUID,只要這三個(gè)文件的 UUID 一致知允,我們就可以通過他們解析出正確的錯(cuò)誤函數(shù)信息了。1.查看 xx.app 文件的 UUID叙谨,terminal 中輸入命令 :dwarfdump --uuid xx.app/xx (xx代表你的項(xiàng)目名)2.查看 xx.app.dSYM 文件的 UUID 温鸽,在 terminal 中輸入命令:dwarfdump --uuid xx.app.dSYM 3.crash 文件內(nèi)第一行 Incident Identifier 就是該 crash 文件的 UUID。dSYM工具
dSYM工具:下載鏈接:http://pan.baidu.com/s/1bnkxPvT
使用步驟:1.將打包發(fā)布軟件時(shí)的xcarchive文件拖入軟件窗口內(nèi)的任意位置(支持多個(gè)文件同時(shí)拖入,注意:文件名不要包含空格)2.選中任意一個(gè)版本的xcarchive文件涤垫,右邊會(huì)列出該xcarchive文件支持的CPU類型姑尺,選中錯(cuò)誤對(duì)應(yīng)的CPU類型。3.對(duì)比錯(cuò)誤給出的UUID和工具界面中給出的UUID是否一致蝠猬。 4.將錯(cuò)誤地址輸入工具的文本框中切蟋,點(diǎn)擊分析。
同時(shí)也可以集成BUGLY于項(xiàng)目中榆芦,上傳對(duì)應(yīng)的dSYM文件后柄粹,上報(bào)的crash日志更為清晰。