Xcode上手之編譯方案

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)目名稱相同索抓,如下:

屏幕快照 2017-01-22 下午11.03.14.png

圖中BLE就是系統(tǒng)自動(dòng)創(chuàng)建的編譯方案。

2 編輯管理編譯方案

上圖中老厌,我們點(diǎn)擊Manage Schemes...就可以進(jìn)入管理界面,如圖:

屏幕快照 2017-01-22 下午11.05.56.png

可以看到當(dāng)前項(xiàng)目所有的編譯方案黎炉,查看相關(guān)信息等枝秤。

2.1 創(chuàng)建新的方案

點(diǎn)擊“+”號(hào),出現(xiàn)創(chuàng)建表單:

屏幕快照 2017-01-22 下午11.08.29.png

填入創(chuàng)建方案所鏈接的對(duì)象Target和名稱Name慷嗜,即可創(chuàng)建淀弹。
編譯方案需要和對(duì)象綁定一起,因此必須要選擇要綁定的對(duì)象庆械。

屏幕快照 2017-01-22 下午11.13.02.png

同時(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 方案管理

屏幕快照 2017-01-22 下午11.21.12.png

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)入編輯方案界面


屏幕快照 2017-01-22 下午11.31.53.png

1.左上角可以選擇和切換需要編輯的方案。
2.底部有復(fù)制方案按鈕飒筑。
3.管理方案按鈕可以切換到管理界面片吊。
4.可以開啟共享绽昏。
5.左側(cè)列表可以切換操作列表

2.4.1編譯操作Build

編譯操作是項(xiàng)目運(yùn)行协屡、分發(fā)前必須要做的,編譯優(yōu)先于其他所有操作全谤。編譯操作設(shè)置:

屏幕快照 2017-01-22 下午11.40.38.png

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)。


屏幕快照 2017-01-22 下午11.54.22.png

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)耗美。

屏幕快照 2017-01-23 上午12.04.20.png

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)境變量。

屏幕快照 2017-01-23 上午12.10.19.png

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)試。其中:
屏幕快照 2017-02-20 下午9.17.24.png
  • 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)卡

屏幕快照 2017-02-20 下午9.47.51.png

選項(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):

屏幕快照 2017-02-20 下午10.40.41.png
  • Pre-actions:操作啟用之前所完成的工作。
  • Post-actions:操作啟用之后所完成的工作。

選中其中一項(xiàng)绘雁,然后可以添加腳本或者添加一個(gè)發(fā)送郵件的操作橡疼。


屏幕快照 2017-02-20 下午10.43.54.png

我們添加一個(gè)編譯完成后,發(fā)送郵件的動(dòng)作和執(zhí)行腳本的動(dòng)作:

屏幕快照 2017-02-20 下午10.47.02.png

3 運(yùn)行目標(biāo)

指定應(yīng)用在哪一個(gè)設(shè)備上運(yùn)行庐舟。

屏幕快照 2017-02-20 下午10.49.20.png

還可以設(shè)置目標(biāo)架構(gòu)和SDK版本欣除。通過Window->Devices進(jìn)入設(shè)備管理界面:

屏幕快照 2017-02-20 下午10.52.27.png

很多朋友想添加老版本SDK的模擬器,可以通過下方添加按鈕添加:

屏幕快照 2017-02-20 下午10.53.58.png

點(diǎn)開如果發(fā)現(xiàn)沒有你想要的SDK版本挪略,點(diǎn)開OS Version耻涛,選中下載更多版本即可進(jìn)入如下界面:

屏幕快照 2017-02-20 下午10.54.50.png

下載你要的SDK版本即可。

如果是真機(jī)瘟檩,顯示的數(shù)據(jù)更模擬器比起來(lái)會(huì)有所不同抹缕。

屏幕快照 2017-02-20 下午10.59.14.png

真機(jī)可以通過View Device Logs查看真機(jī)保存的調(diào)試日志,Take Screenshot可以截取當(dāng)前設(shè)備上的畫面墨辛。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末卓研,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子睹簇,更是在濱河造成了極大的恐慌奏赘,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件太惠,死亡現(xiàn)場(chǎng)離奇詭異磨淌,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)凿渊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門梁只,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人埃脏,你說(shuō)我怎么就攤上這事搪锣。” “怎么了彩掐?”我有些...
    開封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵构舟,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我堵幽,道長(zhǎng)狗超,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任朴下,我火速辦了婚禮努咐,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘桐猬。我一直安慰自己麦撵,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開白布溃肪。 她就那樣靜靜地躺著免胃,像睡著了一般。 火紅的嫁衣襯著肌膚如雪惫撰。 梳的紋絲不亂的頭發(fā)上羔沙,一...
    開封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音厨钻,去河邊找鬼扼雏。 笑死,一個(gè)胖子當(dāng)著我的面吹牛夯膀,可吹牛的內(nèi)容都是我干的诗充。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼诱建,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蝴蜓!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起俺猿,我...
    開封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤茎匠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后押袍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體诵冒,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年谊惭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了汽馋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡圈盔,死狀恐怖惭蟋,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情药磺,我是刑警寧澤告组,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站癌佩,受9級(jí)特大地震影響木缝,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜围辙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一我碟、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧姚建,春花似錦矫俺、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)友雳。三九已至,卻和暖如春铅匹,著一層夾襖步出監(jiān)牢的瞬間押赊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工包斑, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留流礁,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓罗丰,卻偏偏與公主長(zhǎng)得像神帅,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子萌抵,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,506評(píng)論 25 707
  • 因?yàn)橐Y(jié)局swift3.0中引用snapKit的問題,看到一篇介紹Xcode8,swift3變化的文章,覺得很詳細(xì)...
    uniapp閱讀 4,391評(píng)論 0 12
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)找御、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,024評(píng)論 4 62
  • 先生谜嫉,第二杯半價(jià) 噢萎坷,我要一杯就好
    用心良苦ing閱讀 174評(píng)論 0 0
  • 無(wú)論是女生還是女人,都會(huì)把男生或男人對(duì)她的一點(diǎn)點(diǎn)好沐兰,無(wú)限的放大N倍哆档。對(duì)她的不好、無(wú)限的縮小到忽略不計(jì)住闯,自欺欺人的地步瓜浸。
    Yn檸梔閱讀 188評(píng)論 0 0