1 工具使用技巧
1.1 模擬器安裝
1.1.1 Xcode7中安裝模擬器7.1報錯
XCode7模擬器報錯
Unable to?open?lib launch_sim.dylib Try reinstalling Xcode or the simulator runtime.
解決辦法解決辦法
一、找到目標文件
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/lib/system/host/liblaunch_sim.dylib
二、拷貝到目標地址。
目標地址一
/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS7.1.simruntime/Contents/Resources/RuntimeRoot/usr/lib/system/host/liblaunch_sim.dylib
????????圖中紅色部分是原文件名字進行了修改,為了以后備份使用,liblaunch_sim.dylib為拷貝過來的文件
1.1.2 XCode7不能折疊收起代碼
1.2 dSYM工具使用
1.2.1 dSYM文件
? ??什么是 dSYM 文件
????????Xcode編譯項目后,我們會看到一個同名的 dSYM 文件,dSYM 是保存 16 進制函數地址映射信息的中轉文件,我們調試的 symbols 都會包含在這個文件中,并且每次編譯項目的時候都會生成一個新的 dSYM 文件,位于 /Users/<用戶名>/Library/Developer/Xcode/Archives目錄下,對于每一個發布版本我們都很有必要保存對應的 Archives 文件(AUTOMATICALLY?SAVE THE DSYM FILES這篇文章介紹了通過腳本每次編譯后都自動保存 dSYM 文件)。
1.2.2 dSYM文件有什么作用
????????當我們軟件 release 模式打包或上線后,不會像我們在 Xcode 中那樣直觀的看到用崩潰的錯誤,這個時候我們就需要分析 crash report 文件了,iOS 設備中會有日志文件保存我們每個應用出錯的函數內存地址,通過 Xcode 的 Organizer 可以將 iOS 設備中的 DeviceLog 導出成crash 文件,這個時候我們就可以通過出錯的函數地址去查詢 dSYM 文件中程序對應的函數名和文件名。大前提是我們需要有軟件版本對應的 dSYM 文件,這也是為什么我們很有必要保存每個發布版本的 Archives 文件了。
1.2.3 如何將文件一一對應
????????每一個 xx.app 和xx.app.dSYM 文件都有對應的 UUID,crash 文件也有自己的 UUID,只要這三個文件的 UUID 一致,我們就可以通過他們解析出正確的錯誤函數信息了。
????1.查看xx.app 文件的 UUID,terminal 中輸入命令 :
dwarfdump --uuid xx.app/xx (xx代表你的項目名)
????2.查看xx.app.dSYM 文件的 UUID ,在 terminal 中輸入命令:
dwarfdump --uuid xx.app.dSYM
????3.crash 文件內第一行 Incident Identifier 就是該 crash 文件的 UUID。
1.2.4 dSYM工具使用
????????于是我抽了幾個小時的時間將這些命令封裝到一個應用中,也為以后解決bug提供了便利。使用步驟:
????1.將打包發布軟件時的xcarchive文件拖入軟件窗口內的任意位置(支持多個文件同時拖入,注意:文件名不要包含空格)
????2.選中任意一個版本的xcarchive文件,右邊會列出該xcarchive文件支持的CPU類型,選中錯誤對應的CPU類型。
????3.對比錯誤給出的UUID和工具界面中給出的UUID是否一致。
????4.將錯誤地址輸入工具的文本框中,點擊分析。Mac app下載地址項目源碼地址
1.3 工程配置
1.3.1 調試時靜態資源每次更新
XCODE調試時強制更新模擬器上的資源文件
http://blog.csdn.net/samuelltk/article/details/41250107
????????xcode使用模擬器調試時,拷貝到bundle中的資源文件有緩存,有時候修改了資源文件(比如圖片或者lua文件)后再次編譯運行,模擬器中的文件依然是舊版本。為了解決這個問題,可以在當前Target的Build Phases中添加一個Run Script項。
????????如果你用的是XCode5,界面上已經沒有直接添加的按鈕了,你需要通過菜單-Editor-Add ?Build Phase-Add Run Script Build Phase添加。
Shell:/bin/sh
????????編號為1的窗口中填入:
touch -cm ${SRCROOT}/../Resources/phone
????????或者來個更狠的,遞歸把所有資源文件都挨個touch一遍:
find ${SRCROOT}/../Resources/phone -exec touch -cm {}? \;
????????注意使用相對路徑,表示每次build后,都會對指定路徑中的文件進行touch操作還沒完,還有一個重要步驟,記得把Run Script拖到Copy Buddle Resources前面:
1.3.2 Xcode8注釋快捷鍵 不能使用
??? 這個是因為蘋果解決xcode ghost。把插件屏蔽了。解決方法
命令運行:sudo /usr/libexec/xpccachectl
然后必須重啟電腦后生效
http://www.cocoachina.com/bbs/read.php?tid-1693682-page-2.html
1.3.3 確保Xcode每次Build時都自動更新資源
http://www.tuicool.com/articles/nABr6n
解決Xcode 5資源文件更新后不自動復制的問題
http://blog.csdn.net/ym19860303/article/details/38401105
1.4 iTunesConnet崩潰日志查看
查看崩潰日志
http://blog.csdn.net/xuhanhanhan/article/details/50580093
????????現在是2016年一月份,已經不能在iTunes Connect查看崩潰日志上查看崩潰日志了,現在蘋果的做法是你在xcode上登錄你的賬號,打開xcode,點擊上面的window選擇organizer,出現如圖
,然后選擇你要查看的版本,就可以看對應的崩潰日志。
2 常見問題
2.1 代碼編寫問題
2.1.1 Xcode7下需要顯示聲明@synthesize才能自定義get方法,不然編譯器會報變量未聲明錯誤
@synthesize dataDic = _dataDic;
- (NSMutableDictionary*)dataDic
{
??? if (!_dataDic) {
??????? _dataDic = [[NSMutableDictionary alloc] init];
??? }
??? return _dataDic;
}
2.2 調試問題
2.2.1 Xcode與Safari聯合調試不能在同一個webcore線程中設置斷點
????????Xcode與Safari進行網頁聯合調試時,不能再同一個webcore線程中分別設置斷點,否則就會造成Xcode假死,必須在任務管理器中強制殺死進程。
3 參考鏈接
Unableto open liblaunch_sim.dylib. Try reinstalling Xcode or the simulator
http://www.cnblogs.com/songxing10000/p/4574236.html
dSYM文件分析工具
http://www.cocoachina.com/ios/20141219/10694.html
分析iOS Crash文件:符號化iOS Crash文件的3種方法
http://www.cocoachina.com/industry/20140514/8418.html
(Good)iOS通過dSYM文件分析crash