前言:平日里我們使用Xcode,一些常用的功能已得心應(yīng)手,但有些不常用的小技巧,也可以提高我們的效率。本文借鑒了網(wǎng)上的一些文章博客,整理成篇,共同學(xué)習(xí)分享。
實用小技巧
范圍編輯
很多時候,我們希望修改一個變量的名稱。若是在一個文件內(nèi)一處處去修改效率太低,而范圍編輯(Edit All in Scope,默認快捷鍵Ctrl+Command+E),就可以選中該頁面當前所有該變量,進行修改。


Who did?
團隊協(xié)作時,有一些陌生的代碼錯誤了,你是否想知道是who do it ? 把光標移動到報錯的那一行,單擊右鍵選擇然后在菜單里選擇Show Blame for Line。

Address Sanitizer: 媽媽再也不用擔(dān)心 EXC_BAD_ACCESS?
EXC_BAD_ACCESS一直是很多開發(fā)者的噩夢,因為這個錯誤很不直觀,出現(xiàn)后往往要花很長時間才能定位到錯誤。
然而,在項目的Scheme中Diagnostics下,選中enable address sanitizer(注意選中后Xcode會重新編譯整個項目)。

這樣設(shè)置后,如果再出現(xiàn)類似的錯誤會有更詳細的錯誤信息提示,甚至?xí)袃?nèi)存使用情況的展示

靜態(tài)分析器和Inspector(檢查器)
Xcode中還有兩個工具可以幫我們清理代碼,減少代碼出錯的幾率。對Xcode而言,靜態(tài)分析器工具是一個非常棒用來改善代碼的工具。比如檢測出沒有使用過的對象,沒有release對象(針對Core Foundation對象,ARC仍然會有這樣的問題)。通過選擇Product菜單中的‘Anlayze’可以查看到相關(guān)建議。
檢查器是非常強大的一組工具,通過檢查器不僅可以從不同的角度檢查程序?qū)?nèi)存的使用情況,文件系統(tǒng)的使用情況(增加、刪除、修改等),甚至還提供了自動UI交互的方法。通過選擇Product菜單中的‘Profile’可以查看到這些檢查器。
選擇‘Profile’會打開一個Instrument窗口,這里可以選擇一個配置模板進行運行。最常用的模板有zombies,activity monitor和leaks。在程序運行時,對內(nèi)存泄露進行捕捉時,Leaks可能是最有用的一個模板。
Zombies是你的朋友,雖然在有ARC的地方很難再遇到讓人難受的EXC_BAD_ACCESS錯誤了,但是在某些確定的情況下,該錯誤還是會發(fā)生的。當在處 UIPopoverController 或者 core foundation 對象時,我們可以訪問一個已經(jīng)被 release 掉的對象。一般,當我們release內(nèi)存中的一個對象時,該對象將被銷毀。但是,當 Zombies開啟時,只是將對象標記為release,實際上該對象還停留在內(nèi)存中。當我們訪問一個Zombie對象時,Xcode可以告訴我們正在訪 問的對象是一個不應(yīng)該存在的對象了。因為Xcode知道這個對象是什么,所以可以讓我們知道這個對象在哪里,以及這是什么時候發(fā)生的。這里有兩種方法可以查找出Zombies對象。使用檢查器中的Zombie配置模板,或者在‘Run’ build選項中開啟Zombie診斷選項。在Stop按鈕的旁邊,點擊scheme名稱,然后選擇‘Edit Scheme’,點擊diagnostic tab項,并勾選上‘Enable Zombie Objects’。注意,Zombie只能用在模擬器調(diào)試中,真機上不能使用。

發(fā)布后的crash跟蹤,輕松定位崩潰代碼
在升級iOS9后,蘋果會詢問用戶是否同意收集應(yīng)用崩潰報告。這樣在itunes connect的后臺統(tǒng)計中就可以看到一些收集到的數(shù)據(jù)(通常會有相當一部分用戶不同意,所以只是部分數(shù)據(jù))。
查看崩潰統(tǒng)計信息:
在connect后臺中選擇app分析

進入分析頁面后,tab中選擇“指標”

然后在左側(cè)的菜單中選擇“崩潰”

這樣就可以看到蘋果收集到的崩潰統(tǒng)計,一定要注意這里只是一部分的數(shù)據(jù),舉例來說如果你看到的崩潰是10次,但是可能蘋果只收集了20%的用戶信息。所以你可以大概估計應(yīng)該是10*5=50次崩潰。
在Xcode中查看具體崩潰信息
在xcode中菜單的window下選擇organizer,在打開的窗口中選擇Crashes,這樣Xcode會開始下載相關(guān)的崩潰信息到本地中(網(wǎng)絡(luò)環(huán)境不好時可能要等待一些時間)。

organizer窗口
可以在左側(cè)選擇你要查看崩潰信息的發(fā)布版本


在崩潰信息這一欄蘋果會按照崩潰數(shù)量排序,將崩潰數(shù)量最多的排在最前。右側(cè)的詳細信息會顯示是崩潰時的調(diào)用堆棧,可以看到是哪行代碼導(dǎo)致的崩潰。

選中要解決的崩潰后,可以在窗口右側(cè)選擇 open in project 。

神奇的事情發(fā)生了?。?!在打開的項目中,會直接定位到崩潰的那行代碼。這大大提高了調(diào)試的效率!我已經(jīng)的迫不及待要和開發(fā)安卓的同事分享這份喜悅了。
注意!注意!
因為之前的項目發(fā)布時沒有用Xcode7打包,所以猜測符號表可能沒有上傳到蘋果服務(wù)器,所以以前的項目可能不能直接顯示是哪行代碼,而是顯示調(diào)用時出錯的內(nèi)存地址。不過下個版本你用Xcode發(fā)布后就可以正??吹嚼病?br> 在解決完這個crash后可以標記為已經(jīng)解決。有兩個地方可以標記。


頂部不常用的菜單選項
file欄
Revert to Saved:將此文件的修改直接回退到上次保存時
Unlock :要對第三方庫或系統(tǒng)文件進行修改時解鎖
Open with External Editor :使用外部編輯器打開
Edit欄
Format - > Transformations :可以將英文轉(zhuǎn)成全大寫,全小寫,首字母大寫。
Convert:轉(zhuǎn)換成ARC,swift等
Emoji & symbols:emoji表情和特殊符號
View欄
Standard Editor :標準模塊
Assistant Editor :助理模塊
Version Editor: 版本模塊
Hide Toolbar 隱藏工具欄(XCode頂部 快捷鍵 option+cmd+T)
Show Tab Bar 隱藏標簽欄(出現(xiàn)Tab Bar 然后可以用cmd+T添加tab頁,control+tab切換tab頁,)
Show All Tabs 顯示所有Tab頁
Find
Find Call Hierarchy:查找到調(diào)用層級。
Navigate
Reveal in Project Navigator :在項目導(dǎo)航中揭示出此文件
Reveal in Symbol Navigator :在符號導(dǎo)航中揭示出某方法
Open in Assistant Editor:用分屏助理打開
Open in .. 你想怎么打開
Jump to Definition 跳轉(zhuǎn)到定義
Editor(選中文件狀態(tài)下)
Show issue: 展示錯誤和隱藏錯誤,相當于點左邊的按鈕
Issues: 可以控制展示全部錯誤警告,還是僅僅展示警告。
Structure->Balance Delimiter:直接選中光標所在的整個大括號
Structure->Re-Indent : 將格式縮進整理一下 (快捷鍵 選中文字 ^+I)
Structure->Shift Right/Left :往前或往后移一個tab(Cmd+ [ 或 ] ),
Structure->Move Line Up /Down :往上往下移一行 (option+cmd+[或])
Code Folding: 提供各種折疊和取消折疊
Show Invisibles: 顯示所有隱藏的東西,比如空格。
Show Blame for Line: 顯示選中的行的修改者和log。
Show Code Coverage: 展示代碼的覆蓋范圍
Editor:(選中xib狀態(tài)下)
Canvas -> Show Selection Highlights: 顯示選中控件的高亮
Canvas ->Show Resize Knobs:顯示約束旁邊的小方塊
Canvas ->Show Constraints :顯示約束
Canvas ->Show Involved Views For Selected Constraints:顯示約束涉及到的視圖
Canvas ->Show Layout Rectangles 布局矩形
Reveal in Document Outline:在左邊的層級圖中揭示出來
Arrange : 可以上移下移或移到背景等
Embed : 嵌入,可以嵌nav,tabbar,scrollView
Unembed 解除嵌入
Snap to Guides:讓引導(dǎo)線具有吸附功能,讓控件靠近就自動對齊
Guides:設(shè)置引導(dǎo)標尺線(中垂線)
Automatically Refresh Views:自動刷新視圖
Refresh All Views:刷新所有視圖
Debug Selected Views:調(diào)試選中的視圖?
Resolve Auto Layout issues:解決自動布局的問題,類似于點
Refactor to Storyboard:把VC重構(gòu)成SB?
Debug欄
Capture GPU Frame: 捕獲GPU位置
Simulate Location: 模擬模擬器的位置
Simulate Background Fetch: 讓模擬器去后臺
iCloud: 蘋果云相關(guān)
View Debugging: 關(guān)于視圖的調(diào)試
Take Screenshot of Active Device:截圖
Capture View Hierarchy: 用3D圖 來捕獲視圖層次
Show View Frame: 在模擬器上顯示各個控件的尺寸大小
Show Alignment Rectangles: 顯示對齊矩形
Show View Drawing: 顯示查看繪圖
Show Responsive Scrolling Status: 顯示響應(yīng)滾動狀態(tài)
Deactivate Breakpoints 停用中斷點。
Breakpoints: 相當于左下角的加號,增加各種斷點。
Debug Workflow:可以顯示內(nèi)存和清除打印等操作。
Always Show Disassembly: 這要是勾上就只顯示堆棧信息不看代碼
Attach to Process by PID or Name: 設(shè)置權(quán)限id或name
Attach to Progress: 附加到進程
Detach: 跳過所有的斷點
Help
API Changes:打開網(wǎng)站了解更新的API
Xcode Help :打開Xcode Help 關(guān)于xcode的詳細文檔
what is new in Xcode Xcode新特性
Release Notes:打開xcode各版本更新迭代的log。
Report an issue :提交發(fā)現(xiàn)的錯誤
實用快捷鍵
快速定位
control + L 鍵,將打印的行數(shù)輸入,Enter后,就可以立刻跳到打印的行數(shù)。配合XGLog(@"----%s----%d-------WIFI",FILE,LINE);
FILE %s 打印出在項目中哪個文件中打印的
LINE %d 打印出在項目中哪個文件中的第幾行打印的
可以用 command +shift + F 打開全局搜索,將文件名復(fù)制、粘貼到框框中,按Enter鍵,在查找出的內(nèi)容中點擊文件,即可進入,然后輸入行數(shù)快速定位。

跳轉(zhuǎn)到方法
在使用類或者結(jié)構(gòu)時,我經(jīng)常需要快速的跳轉(zhuǎn)到類的某個特定方法。通過快捷鍵Control + 6 再輸入算法的頭幾個字母就可以非常方便的做到這點。

顯示項目導(dǎo)航器
在一個有很多文件和文件夾的大型項目中, 顯示項目導(dǎo)航命令(Reveal in Project Navigator) 可以為你節(jié)省很多時間,這個命令可以在界面左側(cè)的項目導(dǎo)航欄中顯示當前文件,默認快捷是Command + Shift + J.
快速查看文檔
在任意文件中按下 command + shift + O (是字母O)

快速查看官方文檔
即打開“幫助”菜單哦:Command + shift + 0(是數(shù)字0)
