最近做個 IM 相關(guān)的項目,為了搞個開源的 IOS 版本,因此開啟了 XCode 開發(fā)使用
遇見了如下幾點問題
環(huán)境說明
Mac macOS High Sierra. 版本 10.13.6
XCode Version 9.4.1 (9F2000)
1. Pod
在 Java 的世界呆時間長了,習(xí)慣了 mvn, ant 等內(nèi)容, Pod 可以認(rèn)為是 ios 下的 mvn 用來管理依賴包,類似 mvn 或其他的工具類似,它有自己獨立的命令,如下所示 引用于 pod命令匯總:

如需要進(jìn)一步了解其使用,可以參見 pod <cmd> --help 進(jìn)行查看, 比如:
pod install --help
2. llvm 控制臺
進(jìn)入 llvm 控制臺的方式有兩種:
- 調(diào)試模式下進(jìn)入到斷點或Pause執(zhí)行程序
- 發(fā)生異常錯誤
當(dāng)進(jìn)入到 llvm 控制臺之后,可以進(jìn)行如下操作:
# 常見的 po 命令,用于打印對象內(nèi)容
# 比如 打印當(dāng)前模擬器運行時生成的工程文件位置
(llvm) po NSHomeDirectory()
"/Users/mac/Library/Developer/CoreSimulator/Devices/4467A339-CA05-4FBB-83A5-5C396770EFB1/data/Containers/Data/Application/2A4E420E-1575-461F-BBE3-85E2880C3749"
# 打印當(dāng)前線程堆棧信息
(lldb) bt
* thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGSTOP
* frame #0: 0x0000000116ec920a libsystem_kernel.dylib`mach_msg_trap + 10
frame #1: 0x0000000116ec8724 libsystem_kernel.dylib`mach_msg + 60
frame #2: 0x00000001103257d5 CoreFoundation`__CFRunLoopServiceMachPort + 229
frame #3: 0x0000000110324c19 CoreFoundation`__CFRunLoopRun + 1689
frame #4: 0x000000011032430b CoreFoundation`CFRunLoopRunSpecific + 635
frame #5: 0x0000000119a66a73 GraphicsServices`GSEventRunModal + 62
frame #6: 0x00000001124b0057 UIKit`UIApplicationMain + 159
frame #7: 0x000000010efc13c7 UCreaterChat`main at AppDelegate.swift:12
frame #8: 0x0000000116a5b955 libdyld.dylib`start + 1
同時也能執(zhí)行 gdb 信息,比如:
| 命令 | 備注 |
|---|---|
| break NUM | 在指定的行上設(shè)置斷點。 |
| bt | 顯示所有的調(diào)用棧幀。該命令可用來顯示函數(shù)的調(diào)用順序。 |
| clear | 刪除設(shè)置在特定源文件、特定行上的斷點。其用法為:clear FILENAME:NUM。 |
| continue | 繼續(xù)執(zhí)行正在調(diào)試的程序。該命令用在程序由于處理信號或斷點而導(dǎo)致停止運行時。 |
| display EXPR | 每次程序停止后顯示表達(dá)式的值。表達(dá)式由程序定義的變量組成。 |
| file FILE | 裝載指定的可執(zhí)行文件進(jìn)行調(diào)試。 |
| help NAME | 顯示指定命令的幫助信息。 |
| info break | 顯示當(dāng)前斷點清單,包括到達(dá)斷點處的次數(shù)等。 |
| info files | 顯示被調(diào)試文件的詳細(xì)信息。 |
| info func | 顯示所有的函數(shù)名稱。 |
| info local | 顯示當(dāng)函數(shù)中的局部變量信息。 |
| info prog | 顯示被調(diào)試程序的執(zhí)行狀態(tài)。 |
| info var | 顯示所有的全局和靜態(tài)變量名稱。 |
| kill | 終止正被調(diào)試的程序。 |
| list | 顯示源代碼段。 |
| make | 在不退出 gdb 的情況下運行 make 工具。 |
| next | 在不單步執(zhí)行進(jìn)入其他函數(shù)的情況下,向前執(zhí)行一行源代碼。 |
| print EXPR | 顯示表達(dá)式 EXPR 的值。 |
| print-object | 打印一個對象 (即 po ) |
| print (int) name | 打印一個類型 |
| print-object [artist description] | 調(diào)用一個函數(shù) (即 po ) |
| set artist = @"test" | 設(shè)置變量值 |
| whatis | 查看變理的數(shù)據(jù)類型 |
3. 斷點問題
[問題 1] 將某些變量放到 Watch 中之后,每次進(jìn)入到那個Watch 執(zhí)行的地方時候,基本都會發(fā)生崩潰( 原因是構(gòu)建那個對象時候,里面不支持,這時候直接 exit 0 ... )
[解決方法] 刪除 .xcworkspace/ 目錄下的 Expressions.xcexplist 文件即可。
mac$ find . -name "Expressions.xcexplist" -exec rm -f {} \;
4. 查看當(dāng)前調(diào)試界面對應(yīng)的 ViewController 等信息
在 XCode 中存在類似 Android 開發(fā)的 View Hierarchy 通過它可以打開相應(yīng)的界面查看屬性元素信息,如下圖:

注意點擊如下圖標(biāo)(Debug View Hierarchy) 按鈕,即可出現(xiàn)如上界面

其附近也存在類似的如 調(diào)試內(nèi)存使用的 按鈕 。
5. 調(diào)試相關(guān)參數(shù)設(shè)定
類似 Eclipse 或 Android Studio 中運行時參數(shù)設(shè)定一樣,對 IOS 中設(shè)定一些初始化設(shè)置,進(jìn)入方式如下: [Product] -> [Edit Scheme] 即可進(jìn)入如下界面:

比如 Enable Zombi Objects 或添加參數(shù)等,均在此進(jìn)行操作。
6. Profile 相關(guān)使用
將程序運行起來之后,進(jìn)入方式:[Product] -> [Profile] 進(jìn)入如下Instrument 模板界面:

選擇 [Time Profiler] 類似 Android 中可以調(diào)試函數(shù)執(zhí)行的時間消耗等信息,充分調(diào)試那些函數(shù)是最耗時步驟。
7. 常見快捷鍵
| 快捷鍵 | 說明 |
|---|---|
| command + 1 | 工程導(dǎo)航器 |
| command + 0 | 顯示/隱藏導(dǎo)航器面板 |
| command + [/] | 向前/后縮進(jìn)(Shift Left/Right) |
| command + option + [/] | 將當(dāng)前光標(biāo)所在行代碼上移或者下移(Move Line Up/Down) |
| option+command+←/→ | 折疊當(dāng)前代碼塊,包括@interface …@end、@implementation …@end |
| option+shift+command+←/→ | 折疊該文件內(nèi)所有代碼塊(方法/函數(shù):{ Methods&Functions }) |
| control+shift+command+←/→ | 折疊當(dāng)前注釋塊(/Comment Blocks/) |
| shift+command+J | 在項目導(dǎo)航中定位當(dāng)前編輯其中打開的文件(Reveal in Project Navigator)。 |
| command+L | 跳轉(zhuǎn)到指定行。 |
| shift+command+O | Open Quickly,快速全局查找文件、符號,非常常用! |
| command+點擊Editor中選中的符號 | 跳轉(zhuǎn)到符號定義(jump to definition)。 |
| control+command+J | 跳轉(zhuǎn)到指定符號的定義處或?qū)崿F(xiàn)處(Go to Declaration/Definition)。有時工程正在Loading、Indexing或Processing files時,“command+點擊”無法響應(yīng),此時可試試control+command+J |
| shift+command+Y | 顯示控制臺(Show/Hide the debug area) |
| shift+command+C | 激活聚焦控制臺,光標(biāo)定位到控制臺呈可輸入狀態(tài) |
| command+K | 清除控制臺(Debug->Debug Workflow->Clear Console) |
| command + \ | 當(dāng)前行設(shè)置/取消斷點;通過鼠標(biāo)點擊邊列中的藍(lán)色斷點來啟用/禁用當(dāng)前行斷點。 |
| command + Y | 全局激活或禁用所有的斷點,激活進(jìn)入調(diào)試模式(此時斷點藍(lán)色可見)。 |
| command + R | 運行 |
| command + control + i | 進(jìn)入 Profile 界面 |