如何自動(dòng)保存DSYM文件

原文地址:http://www.cimgf.com/2009/12/23/automatically-save-the-dsym-files/
如原作者發(fā)現(xiàn)有侵權(quán)行為可責(zé)令我在24小時(shí)之內(nèi)刪除,前提是你能看到。


曾幾何時(shí)起堂竟,用OC編寫的應(yīng)用程序盒发,不管是Mac應(yīng)用程序還是iOS程序缴挖,你在編譯的時(shí)候彈出來的調(diào)試信息都是一堆匯編或者二進(jìn)制信息亲桦。因此在應(yīng)用程序crash的時(shí)候殉摔,不像其他語言比如Java炮车,OC很難讓我們定位到程序奔潰的原因舵变。然而,殊不知OC程序在編譯的時(shí)候會(huì)生成一個(gè)dSYM文件示血,該文件可以讓這些調(diào)試信息和我們的奔潰日志相匹配棋傍,這樣就可以幫助我們更好的定位到crash的位置。

需要注意的是难审,dSYM文件必須直接和二進(jìn)制匹配(因?yàn)槊總€(gè)Mach-o對(duì)象中都內(nèi)嵌了一個(gè)uuid瘫拣,這個(gè)uuid必須和dsym文件中的uuid一一對(duì)應(yīng),所以重新打包后之前的uuid就不能用了)告喊,因此在每次項(xiàng)目打完測(cè)試包或者發(fā)布包之后都要手動(dòng)把dSYM文件保存下來麸拄,這對(duì)于開發(fā)者來說很痛苦。

為了解決每次手動(dòng)保存的問題黔姜,我寫了一段腳本拢切,每次我構(gòu)建包之后都會(huì)運(yùn)行這段腳本。這段腳本會(huì)把dSYM文件移動(dòng)到項(xiàng)目中一個(gè)同名(dSYM)的目錄下秆吵。這段腳本還會(huì)去檢查代碼是否提交到git倉(cāng)庫(kù)中淮椰,并將這個(gè)文件也提交到git中,為了解決重名問題,腳本會(huì)把文件名更改為當(dāng)前的日期加時(shí)間主穗。

失敗檢查

腳本做的第一件事是確保它能夠被正常的運(yùn)行泻拦。

if [ "$BUILD_STYLE" == "Debug" ]; then
  echo "Skipping debug"
  exit 0;
fi

第一行表示檢查項(xiàng)目的編譯模式是否為debug,因?yàn)閐ebug模式下打出來的包大多數(shù)時(shí)候試運(yùn)行在開發(fā)者的設(shè)備上忽媒,其中包含了很多調(diào)試信息争拐,而這些信息都是可以忽略的。

if [ "$EFFECTIVE_PLATFORM_NAME" == "-iphonesimulator" ]; then
  echo "Skipping simulator build"
  exit 0;
fi

第二步檢查運(yùn)行的設(shè)備是否為模擬器晦雨,如果是的話則不會(huì)保存dSYM文件架曹。

移動(dòng)文件

因?yàn)槌汕先f開發(fā)者的項(xiàng)目文件路徑是不同的,所以我使用了系統(tǒng)提供的環(huán)境變量來定位編譯后生成的dSYM文件位置闹瞧。

SRC_PATH=${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}
RELATIVE_DEST_PATH=dSYM/${EXECUTABLE_NAME}.$(date +%Y%m%d%H%M%S).app.dSYM
DEST_PATH=${PROJECT_DIR}/${RELATIVE_DEST_PATH}
echo "moving ${SRC_PATH} to ${DEST_PATH}"
 
mv "${SRC_PATH}" "${DEST_PATH}"

下一步就是建立文件夾并移動(dòng)文件了绑雄。我喜歡將文件路徑保存在變量里,這樣就可以通過控制臺(tái)將它們打印出來看是路徑否出錯(cuò)夹抗。

提交到版本控制中

現(xiàn)在應(yīng)該沒有項(xiàng)目是不進(jìn)行版本控制的吧绳慎。

if [ -f ".git/config" ]; then
  git add "${RELATIVE_DEST_PATH}"
  git commit -m "Added dSYM file for ${BUILD_STYLE} build" \
      "${RELATIVE_DEST_PATH}"
fi

最后一部分只有項(xiàng)目在遠(yuǎn)程倉(cāng)庫(kù)中的時(shí)候才會(huì)執(zhí)行,腳本會(huì)幫你將新建的文件夾提交到git倉(cāng)庫(kù)中漠烧,并配上一條簡(jiǎn)單的提交信息杏愤。

結(jié)論

最近我使用xcode自帶的symbolicatecrash工具時(shí)遇到了一點(diǎn)問題,但最終我們會(huì)解決它的已脓,這些dSYM文件是追蹤crash的好東西珊楼。
附件中提供了一個(gè)文件,我通常會(huì)將這個(gè)文件加入到項(xiàng)目中度液,有一段腳本專門去運(yùn)行文件中的腳本厕宗。
Move_dSYM_To_Storage.sh.zip

更新

Reader Rob Elkin給我了一點(diǎn)提示,下面是更新后的腳本堕担,也是我使用的最新版本:

echo "starting dsym archiving"
 
if [ "$BUILD_STYLE" == "Debug" ]; then
echo "Skipping debug"
exit 0;
fi
 
if [ "$EFFECTIVE_PLATFORM_NAME" == "-iphonesimulator" ]; then
echo "Skipping simulator build"
exit 0;
fi
 
SRC_PATH=${ARCHIVE_DSYMS_PATH}/${DWARF_DSYM_FILE_NAME}
RELATIVE_DEST_PATH=dSYM/${EXECUTABLE_NAME}.$(date +%Y%m%d%H%M%S).app.dSYM
DEST_PATH=${PROJECT_DIR}/${RELATIVE_DEST_PATH}
echo "moving ${SRC_PATH} to ${DEST_PATH}"
 
cp -r "${SRC_PATH}" "${DEST_PATH}"
 
if [ -f ".git/config" ]; then
git add "${RELATIVE_DEST_PATH}"
git commit -m "Added dSYM file for ${BUILD_STYLE} build" "${RELATIVE_DEST_PATH}"
fi
 
主要改動(dòng)的地方在這里:
 
SRC_PATH=${ARCHIVE_DSYMS_PATH}/${DWARF_DSYM_FILE_NAME}

以為現(xiàn)在構(gòu)建包之后的存儲(chǔ)路徑改變了(specifically ~/Library/Developer/Xcode/Archives//)
我還將mv指令改變成了cp -r已慢,我更喜歡將原文件復(fù)制一份到新的文件夾中,這樣對(duì)原文件就不會(huì)有任何影響霹购。
希望這能幫助到你佑惠,也要感謝Rob愿意分享你的想法。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末齐疙,一起剝皮案震驚了整個(gè)濱河市膜楷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌贞奋,老刑警劉巖赌厅,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異轿塔,居然都是意外死亡特愿,警方通過查閱死者的電腦和手機(jī)仲墨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來洽议,“玉大人宗收,你說我怎么就攤上這事⊙切郑” “怎么了?”我有些...
    開封第一講書人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵采驻,是天一觀的道長(zhǎng)审胚。 經(jīng)常有香客問我,道長(zhǎng)礼旅,這世上最難降的妖魔是什么膳叨? 我笑而不...
    開封第一講書人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮痘系,結(jié)果婚禮上菲嘴,老公的妹妹穿的比我還像新娘。我一直安慰自己汰翠,他們只是感情好龄坪,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著复唤,像睡著了一般健田。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上佛纫,一...
    開封第一講書人閱讀 49,792評(píng)論 1 290
  • 那天妓局,我揣著相機(jī)與錄音,去河邊找鬼呈宇。 笑死好爬,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的甥啄。 我是一名探鬼主播存炮,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼型豁!你這毒婦竟也來了僵蛛?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤迎变,失蹤者是張志新(化名)和其女友劉穎充尉,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體衣形,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡驼侠,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年姿鸿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片倒源。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡苛预,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出笋熬,到底是詐尸還是另有隱情热某,我是刑警寧澤,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布胳螟,位于F島的核電站昔馋,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏糖耸。R本人自食惡果不足惜秘遏,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望嘉竟。 院中可真熱鬧邦危,春花似錦、人聲如沸舍扰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)妥粟。三九已至审丘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間勾给,已是汗流浹背滩报。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留播急,地道東北人脓钾。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像桩警,于是被迫代替她去往敵國(guó)和親可训。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理捶枢,服務(wù)發(fā)現(xiàn)握截,斷路器,智...
    卡卡羅2017閱讀 134,629評(píng)論 18 139
  • 什么是符號(hào)表烂叔? 符號(hào)表是內(nèi)存地址與函數(shù)名谨胞、文件名、行號(hào)的映射表蒜鸡。符號(hào)表元素如下所示: <起始地址> <結(jié)束地址> ...
    深圳陽(yáng)光閱讀 12,187評(píng)論 28 5
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,761評(píng)論 25 707
  • 你可曾看過: 云追月 影逐日 風(fēng)撼樹 蝶戀花 魚游水 鳥銜枝
    弄花魚沉閱讀 124評(píng)論 0 0
  • 晚上放學(xué)路上還好端端的胯努,回到家閨女突然說肚子疼牢裳,我忙著在廚房做飯,也沒有空搭理她叶沛,心想不會(huì)是她無病呻吟吧蒲讯? 正好她...
    邱Q糖閱讀 513評(píng)論 0 1