【IOS開發基礎系列】Xcode工具使用技巧

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

http://blog.csdn.net/yang3wei/article/details/39966263

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容