Xcode技巧系列:http://www.reibang.com/notebooks/7639304/latest
1 什么是編譯方案
編譯方案:一系列編譯設(shè)置的集合俭令,包括了構(gòu)建項(xiàng)目時(shí)的編譯配置,以及當(dāng)啟動(dòng)項(xiàng)目時(shí)所使用的運(yùn)行環(huán)境。
項(xiàng)目創(chuàng)建,系統(tǒng)會(huì)自動(dòng)創(chuàng)建出一個(gè)編譯方案陨界,默認(rèn)和項(xiàng)目名稱相同索抓,如下:
圖中BLE就是系統(tǒng)自動(dòng)創(chuàng)建的編譯方案。
2 編輯管理編譯方案
上圖中老厌,我們點(diǎn)擊Manage Schemes...就可以進(jìn)入管理界面,如圖:
可以看到當(dāng)前項(xiàng)目所有的編譯方案黎炉,查看相關(guān)信息等枝秤。
2.1 創(chuàng)建新的方案
點(diǎn)擊“+”號(hào),出現(xiàn)創(chuàng)建表單:
填入創(chuàng)建方案所鏈接的對(duì)象Target和名稱Name慷嗜,即可創(chuàng)建淀弹。
編譯方案需要和對(duì)象綁定一起,因此必須要選擇要綁定的對(duì)象庆械。
同時(shí)薇溃,也可以選擇New Scheme...來(lái)創(chuàng)建。
2.2 方案排序缭乘,復(fù)制沐序,導(dǎo)入、導(dǎo)出堕绩,刪除
1.排序策幼,直接在管理界面拖動(dòng)即可
2.復(fù)制,選擇要復(fù)制的方案逛尚,點(diǎn)擊左下角齒輪垄惧,彈出菜單選擇Duplicate,便會(huì)復(fù)制出方案
3.導(dǎo)入绰寞、導(dǎo)出到逊,點(diǎn)擊方案铣口,點(diǎn)擊齒輪,Export即為導(dǎo)出觉壶,Import導(dǎo)入
4.選中要?jiǎng)h除的方案脑题,點(diǎn)擊“-”即可。
刪除對(duì)象時(shí)铜靶,對(duì)應(yīng)的方案并不會(huì)刪除叔遂,需要手動(dòng)刪除!
2.3 方案管理
Container即為容器争剿。一個(gè)項(xiàng)目的情況下已艰,是默認(rèn)的當(dāng)前項(xiàng)目。如果包含多個(gè)項(xiàng)目的工作區(qū)蚕苇,可以選擇將方案關(guān)聯(lián)到工作區(qū)或者其他項(xiàng)目哩掺。
Shared:方案共享開關(guān)。單人開發(fā)無(wú)需關(guān)心該功能涩笤。多人開發(fā)嚼吞,如果不需要?jiǎng)e人看到自己的編譯方案,不勾選即可蹬碧。
左上角Autocreate schemes復(fù)選框:表示創(chuàng)建對(duì)象時(shí)舱禽,是否自動(dòng)創(chuàng)建編譯方案,默認(rèn)勾選恩沽。
右上角Autocreate Schemes Now:立即為當(dāng)前對(duì)象創(chuàng)建默認(rèn)的編譯方案誊稚。
2.4 編輯方案
選擇Edit Scheme即可進(jìn)入編輯方案界面
1.左上角可以選擇和切換需要編輯的方案。
2.底部有復(fù)制方案按鈕飒筑。
3.管理方案按鈕可以切換到管理界面片吊。
4.可以開啟共享绽昏。
5.左側(cè)列表可以切換操作列表
2.4.1編譯操作Build
編譯操作是項(xiàng)目運(yùn)行协屡、分發(fā)前必須要做的,編譯優(yōu)先于其他所有操作全谤。編譯操作設(shè)置:
Parallelize Build:并行編譯肤晓,允許Xcode并行編譯多個(gè)獨(dú)立的對(duì)象,即不依賴于其它對(duì)象可單獨(dú)運(yùn)行的對(duì)象认然。
Find Implicit Dependencies:允許Xcode自動(dòng)尋找依賴补憾,某些情況下,某個(gè)對(duì)象依賴于另一個(gè)對(duì)象才能運(yùn)行時(shí)卷员,Xcode可自動(dòng)找出此類依賴盈匾。上述兩個(gè)選項(xiàng)保持默認(rèn)勾選即可。
下方列表列出了當(dāng)前方案所要編譯的全部對(duì)象毕骡。每個(gè)對(duì)象右側(cè)有多個(gè)復(fù)選框削饵,控制對(duì)應(yīng)操作運(yùn)行之前岩瘦,是否要編譯該目標(biāo)。一般來(lái)說(shuō)窿撬,都是需要編譯的启昧。
如果發(fā)現(xiàn)Xcode不能確定依賴關(guān)系,這時(shí)需要開發(fā)者自己通過“+”添加選擇一個(gè)對(duì)象劈伴。如果對(duì)象編譯順序十分重要的話密末,需要取消并行編譯選項(xiàng)。
2.4.2 運(yùn)行操作Run
運(yùn)行操作指定運(yùn)行過程中需要的可執(zhí)行文件跛璧、調(diào)試器严里、運(yùn)行環(huán)境等選項(xiàng)。
1.info信息:如上圖
Build Configuration:編譯配置追城,選擇運(yùn)行時(shí)所使用的配置(debug調(diào)試田炭,release發(fā)布),默認(rèn)調(diào)試配置漓柑。
Executable:可執(zhí)行文件教硫,選擇運(yùn)行的可執(zhí)行文件,也可以選擇在運(yùn)行時(shí)手動(dòng)指定辆布。如果改為沒有包含在本方案中的對(duì)象瞬矩,該對(duì)象會(huì)自動(dòng)添加到編譯方案中。沒有可執(zhí)行文件的對(duì)象的可以行文件設(shè)置是None锋玲。
Debug executable:調(diào)試可執(zhí)行文件景用,指定是否對(duì)當(dāng)前選定的可執(zhí)行文件執(zhí)行調(diào)試操作,如不執(zhí)行惭蹂,調(diào)試操作無(wú)作用伞插。
Debug Process as:允許開發(fā)者以自身賬號(hào)或者根用戶的身份運(yùn)行,如果開發(fā)者要調(diào)試某些需要權(quán)限才能運(yùn)行的應(yīng)用盾碗,則必須使用根用戶媚污。該選項(xiàng)只有MAC程序可以勾選。
Launch:?jiǎn)?dòng)廷雅,表示發(fā)起運(yùn)行操作是自動(dòng)執(zhí)行可執(zhí)行文件還是需要開發(fā)者自行啟動(dòng)耗美。
2.Arguments參數(shù):如上圖
開發(fā)者可以控制啟動(dòng)參數(shù)和環(huán)境變量
Arguments Passed on Launch:啟動(dòng)時(shí)傳遞的參數(shù),可以使用“+”添加啟動(dòng)時(shí)所需要傳遞的特定參數(shù)航缀,這些參數(shù)一般情況下可以用在命令行程序上商架。
Environment Variables:環(huán)境變量,可以添加或覆蓋當(dāng)前應(yīng)用環(huán)境中存在的環(huán)境變量芥玉。
Expand Variables Based ON:指定擴(kuò)展Xcode所提供的變量時(shí)蛇摸,要使用哪個(gè)可以行文件的特定環(huán)境變量。
3.Options選項(xiàng)
Core Location:定位模擬相關(guān)設(shè)置灿巧。allow location simulation:允許模擬器運(yùn)行時(shí)模擬設(shè)備的地理位置赶袄。default location:定義模擬器啟動(dòng)時(shí)诬烹,首選的地理模擬位置,也可以往項(xiàng)目中添加GPX地理位置來(lái)自定義地理模擬位置弃鸦。
Application Data:允許開發(fā)者從項(xiàng)目中事先將數(shù)據(jù)放置到應(yīng)用程序中绞吁,需要application data package(應(yīng)用程序數(shù)據(jù)包)的支持,如果當(dāng)前工作區(qū)中不存在該數(shù)據(jù)包唬格,則不可以進(jìn)行數(shù)據(jù)預(yù)加載操作家破。
Routing App Coverage File:設(shè)置用于導(dǎo)航、交通相關(guān)的應(yīng)用购岗,開發(fā)者可以在項(xiàng)目中指定一個(gè)GeoJSON文件汰聋,詳細(xì)說(shuō)明應(yīng)用所覆蓋的地理區(qū)域。
GPU Frame Capture:為OpenGL之類的使用GPU的應(yīng)用程序提供調(diào)試支持喊积,Xcode可以捕獲CPU繪制出來(lái)的每個(gè)幀畫面烹困,供開發(fā)者調(diào)試。其中:- Automatically Enabled:自動(dòng)啟用乾吻,Xcode根據(jù)應(yīng)用代碼推斷是否提供此功能髓梅。也可以單獨(dú)針對(duì)Metal、OpenGL ES框架來(lái)進(jìn)行調(diào)試绎签,或者關(guān)閉該調(diào)試功能枯饿。
- Metal調(diào)試開發(fā)者還可以選擇是否開啟Metal的API驗(yàn)證功能,讓Xcode檢測(cè)Metal的API是否能夠?qū)崿F(xiàn)預(yù)期的效果诡必。
Background Fetch:后臺(tái)獲取奢方,允許開發(fā)者啟用后臺(tái)獲取功能,開啟后爸舒,應(yīng)用將不會(huì)在前臺(tái)自動(dòng)顯示蟋字,會(huì)在后臺(tái)根據(jù)相關(guān)代碼進(jìn)行后臺(tái)數(shù)據(jù)獲取操作。需要實(shí)現(xiàn)后臺(tái)獲取代碼和開啟Xcode的權(quán)限才能使用扭勉。
Localization Debugging:本地化調(diào)試鹊奖,在調(diào)試過程中,選擇是否輸出未經(jīng)本地化操作的字符串剖效。
Application Language:應(yīng)用程序語(yǔ)言嫉入,選擇應(yīng)用程序運(yùn)行時(shí)所在的平臺(tái)或者所在的環(huán)境的語(yǔ)言焰盗,通過該選項(xiàng)璧尸,可以模擬應(yīng)用在不同的國(guó)家,不同的語(yǔ)言環(huán)境下所工作的情況熬拒,默認(rèn)情況下使用系統(tǒng)語(yǔ)言和區(qū)域爷光。
Application Region:應(yīng)用程序區(qū)域,效果同上Application Language澎粟。
XPC Services:XPC服務(wù)蛀序,XPC是OS X處理多進(jìn)程之間通信的服務(wù)欢瞪,如果使用了該服務(wù),則對(duì)其進(jìn)行調(diào)試徐裸。
Queue Debugging:隊(duì)列調(diào)試遣鼓。
4.Diagnostics診斷選項(xiàng)卡
選項(xiàng)卡指定了一些用于測(cè)試和調(diào)試應(yīng)用相關(guān)設(shè)置。
Runtime Sanitization:運(yùn)行時(shí)處理重贺。
- Address Sanitizer:檢測(cè)一些內(nèi)存方面的錯(cuò)誤骑祟。
- Thread Sanitizer:檢測(cè)多線程方面的錯(cuò)誤。
- Pause on Issues:依次查看運(yùn)行時(shí)的問題气笙。
Memory Management:開啟一些內(nèi)存管理相關(guān)的服務(wù)次企,這些工具會(huì)在控制臺(tái)調(diào)試區(qū)域輸出:
- Malloc Scribble:內(nèi)存涂抹,向分配的內(nèi)存中填充0xAA潜圃,向已經(jīng)銷毀的內(nèi)存中填入0x55缸棵。
- Malloc Guard Edges:邊緣保護(hù),分配大容量的內(nèi)存前后添加保護(hù)谭期。
- Guard Malloc:動(dòng)態(tài)內(nèi)存分配保護(hù)堵第,使用libgmalloc來(lái)捕獲常見的內(nèi)存問題,比如緩沖區(qū)溢出隧出。
- Zombie Objects:僵尸對(duì)象型诚,僵尸對(duì)象表示已經(jīng)被銷毀的對(duì)象,開啟后鸳劳,如果向該對(duì)象發(fā)送消息狰贯,運(yùn)行時(shí)便會(huì)輸出錯(cuò)誤,并可追蹤到調(diào)用語(yǔ)句赏廓。
Logging:設(shè)置調(diào)試過程中涵紊,輸出的日志包含的內(nèi)容。
- Malloc Stack:動(dòng)態(tài)內(nèi)存分配棧幔摸,記錄分配內(nèi)存和釋放內(nèi)存時(shí)相關(guān)棧的信息摸柄。
- Dynamic Linker API Usage:記錄動(dòng)態(tài)鏈接相關(guān)API的調(diào)用信息。
- Dynamic Library Loads:庫(kù)加載信息既忆,記錄動(dòng)態(tài)鏈接相關(guān)API的調(diào)用信息驱负。
2.4.3測(cè)試操作Test
指定當(dāng)前方案使用的單元測(cè)試包,如圖:
2.4.4剖析操作Profile
決定了我們使用剖析操作時(shí)患雇,Xcode會(huì)執(zhí)行何種命令跃脊。
2.4.5分析操作Analyze
對(duì)編譯操作中指定的對(duì)象運(yùn)行靜態(tài)分析器。
2.4.6打包操作Archive
打包應(yīng)用程序時(shí)進(jìn)行的一些個(gè)性化設(shè)置苛吱。
2.5額外操作
點(diǎn)開操作旁邊的三角形酪术,會(huì)出現(xiàn):
- Pre-actions:操作啟用之前所完成的工作。
- Post-actions:操作啟用之后所完成的工作。
選中其中一項(xiàng)绘雁,然后可以添加腳本或者添加一個(gè)發(fā)送郵件的操作橡疼。
我們添加一個(gè)編譯完成后,發(fā)送郵件的動(dòng)作和執(zhí)行腳本的動(dòng)作:
3 運(yùn)行目標(biāo)
指定應(yīng)用在哪一個(gè)設(shè)備上運(yùn)行庐舟。
還可以設(shè)置目標(biāo)架構(gòu)和SDK版本欣除。通過Window->Devices進(jìn)入設(shè)備管理界面:
很多朋友想添加老版本SDK的模擬器,可以通過下方添加按鈕添加:
點(diǎn)開如果發(fā)現(xiàn)沒有你想要的SDK版本挪略,點(diǎn)開OS Version耻涛,選中下載更多版本即可進(jìn)入如下界面:
下載你要的SDK版本即可。
如果是真機(jī)瘟檩,顯示的數(shù)據(jù)更模擬器比起來(lái)會(huì)有所不同抹缕。
真機(jī)可以通過View Device Logs查看真機(jī)保存的調(diào)試日志,Take Screenshot可以截取當(dāng)前設(shè)備上的畫面墨辛。