Xcode上手之編譯方案

Xcode技巧系列:http://www.itdecent.cn/notebooks/7639304/latest

1 什么是編譯方案

編譯方案:一系列編譯設(shè)置的集合,包括了構(gòu)建項目時的編譯配置,以及當(dāng)啟動項目時所使用的運行環(huán)境。
項目創(chuàng)建,系統(tǒng)會自動創(chuàng)建出一個編譯方案,默認(rèn)和項目名稱相同,如下:

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

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

2 編輯管理編譯方案

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

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

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

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

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

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

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

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

同時,也可以選擇New Scheme...來創(chuàng)建。

2.2 方案排序,復(fù)制,導(dǎo)入、導(dǎo)出,刪除

1.排序,直接在管理界面拖動即可
2.復(fù)制,選擇要復(fù)制的方案,點擊左下角齒輪,彈出菜單選擇Duplicate,便會復(fù)制出方案
3.導(dǎo)入、導(dǎo)出,點擊方案,點擊齒輪,Export即為導(dǎo)出,Import導(dǎo)入
4.選中要刪除的方案,點擊“-”即可。
刪除對象時,對應(yīng)的方案并不會刪除,需要手動刪除!

2.3 方案管理

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

Container即為容器。一個項目的情況下,是默認(rèn)的當(dāng)前項目。如果包含多個項目的工作區(qū),可以選擇將方案關(guān)聯(lián)到工作區(qū)或者其他項目。

Shared:方案共享開關(guān)。單人開發(fā)無需關(guān)心該功能。多人開發(fā),如果不需要別人看到自己的編譯方案,不勾選即可。

左上角Autocreate schemes復(fù)選框:表示創(chuàng)建對象時,是否自動創(chuàng)建編譯方案,默認(rèn)勾選。

右上角Autocreate Schemes Now:立即為當(dāng)前對象創(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

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

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

Parallelize Build:并行編譯,允許Xcode并行編譯多個獨立的對象,即不依賴于其它對象可單獨運行的對象。

Find Implicit Dependencies:允許Xcode自動尋找依賴,某些情況下,某個對象依賴于另一個對象才能運行時,Xcode可自動找出此類依賴。上述兩個選項保持默認(rèn)勾選即可。

下方列表列出了當(dāng)前方案所要編譯的全部對象。每個對象右側(cè)有多個復(fù)選框,控制對應(yīng)操作運行之前,是否要編譯該目標(biāo)。一般來說,都是需要編譯的。

如果發(fā)現(xiàn)Xcode不能確定依賴關(guān)系,這時需要開發(fā)者自己通過“+”添加選擇一個對象。如果對象編譯順序十分重要的話,需要取消并行編譯選項。

2.4.2 運行操作Run

運行操作指定運行過程中需要的可執(zhí)行文件、調(diào)試器、運行環(huán)境等選項。


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

1.info信息:如上圖
Build Configuration:編譯配置,選擇運行時所使用的配置(debug調(diào)試,release發(fā)布),默認(rèn)調(diào)試配置。

Executable:可執(zhí)行文件,選擇運行的可執(zhí)行文件,也可以選擇在運行時手動指定。如果改為沒有包含在本方案中的對象,該對象會自動添加到編譯方案中。沒有可執(zhí)行文件的對象的可以行文件設(shè)置是None。

Debug executable:調(diào)試可執(zhí)行文件,指定是否對當(dāng)前選定的可執(zhí)行文件執(zhí)行調(diào)試操作,如不執(zhí)行,調(diào)試操作無作用。

Debug Process as:允許開發(fā)者以自身賬號或者根用戶的身份運行,如果開發(fā)者要調(diào)試某些需要權(quán)限才能運行的應(yīng)用,則必須使用根用戶。該選項只有MAC程序可以勾選。

Launch:啟動,表示發(fā)起運行操作是自動執(zhí)行可執(zhí)行文件還是需要開發(fā)者自行啟動。

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

2.Arguments參數(shù):如上圖
開發(fā)者可以控制啟動參數(shù)和環(huán)境變量

Arguments Passed on Launch:啟動時傳遞的參數(shù),可以使用“+”添加啟動時所需要傳遞的特定參數(shù),這些參數(shù)一般情況下可以用在命令行程序上。

Environment Variables:環(huán)境變量,可以添加或覆蓋當(dāng)前應(yīng)用環(huán)境中存在的環(huán)境變量。

Expand Variables Based ON:指定擴(kuò)展Xcode所提供的變量時,要使用哪個可以行文件的特定環(huán)境變量。

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

3.Options選項
Core Location:定位模擬相關(guān)設(shè)置。allow location simulation:允許模擬器運行時模擬設(shè)備的地理位置。default location:定義模擬器啟動時,首選的地理模擬位置,也可以往項目中添加GPX地理位置來自定義地理模擬位置。

Application Data:允許開發(fā)者從項目中事先將數(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ā)者可以在項目中指定一個GeoJSON文件,詳細(xì)說明應(yīng)用所覆蓋的地理區(qū)域。

GPU Frame Capture:為OpenGL之類的使用GPU的應(yīng)用程序提供調(diào)試支持,Xcode可以捕獲CPU繪制出來的每個幀畫面,供開發(fā)者調(diào)試。其中:
屏幕快照 2017-02-20 下午9.17.24.png
  • Automatically Enabled:自動啟用,Xcode根據(jù)應(yīng)用代碼推斷是否提供此功能。也可以單獨針對Metal、OpenGL ES框架來進(jìn)行調(diào)試,或者關(guān)閉該調(diào)試功能。
  • Metal調(diào)試開發(fā)者還可以選擇是否開啟Metal的API驗證功能,讓Xcode檢測Metal的API是否能夠?qū)崿F(xiàn)預(yù)期的效果。

Background Fetch:后臺獲取,允許開發(fā)者啟用后臺獲取功能,開啟后,應(yīng)用將不會在前臺自動顯示,會在后臺根據(jù)相關(guān)代碼進(jìn)行后臺數(shù)據(jù)獲取操作。需要實現(xiàn)后臺獲取代碼和開啟Xcode的權(quán)限才能使用。

Localization Debugging:本地化調(diào)試,在調(diào)試過程中,選擇是否輸出未經(jīng)本地化操作的字符串。

Application Language:應(yīng)用程序語言,選擇應(yīng)用程序運行時所在的平臺或者所在的環(huán)境的語言,通過該選項,可以模擬應(yīng)用在不同的國家,不同的語言環(huán)境下所工作的情況,默認(rèn)情況下使用系統(tǒng)語言和區(qū)域。

Application Region:應(yīng)用程序區(qū)域,效果同上Application Language。

XPC Services:XPC服務(wù),XPC是OS X處理多進(jìn)程之間通信的服務(wù),如果使用了該服務(wù),則對其進(jìn)行調(diào)試。

Queue Debugging:隊列調(diào)試。

4.Diagnostics診斷選項卡

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

選項卡指定了一些用于測試和調(diào)試應(yīng)用相關(guān)設(shè)置。
Runtime Sanitization:運行時處理。

  • Address Sanitizer:檢測一些內(nèi)存方面的錯誤。
  • Thread Sanitizer:檢測多線程方面的錯誤。
  • Pause on Issues:依次查看運行時的問題。

Memory Management:開啟一些內(nèi)存管理相關(guān)的服務(wù),這些工具會在控制臺調(diào)試區(qū)域輸出:

  • Malloc Scribble:內(nèi)存涂抹,向分配的內(nèi)存中填充0xAA,向已經(jīng)銷毀的內(nèi)存中填入0x55。
  • Malloc Guard Edges:邊緣保護(hù),分配大容量的內(nèi)存前后添加保護(hù)。
  • Guard Malloc:動態(tài)內(nèi)存分配保護(hù),使用libgmalloc來捕獲常見的內(nèi)存問題,比如緩沖區(qū)溢出。
  • Zombie Objects:僵尸對象,僵尸對象表示已經(jīng)被銷毀的對象,開啟后,如果向該對象發(fā)送消息,運行時便會輸出錯誤,并可追蹤到調(diào)用語句。

Logging:設(shè)置調(diào)試過程中,輸出的日志包含的內(nèi)容。

  • Malloc Stack:動態(tài)內(nèi)存分配棧,記錄分配內(nèi)存和釋放內(nèi)存時相關(guān)棧的信息。
  • Dynamic Linker API Usage:記錄動態(tài)鏈接相關(guān)API的調(diào)用信息。
  • Dynamic Library Loads:庫加載信息,記錄動態(tài)鏈接相關(guān)API的調(diào)用信息。
2.4.3測試操作Test

指定當(dāng)前方案使用的單元測試包,如圖:

2.4.4剖析操作Profile

決定了我們使用剖析操作時,Xcode會執(zhí)行何種命令。

2.4.5分析操作Analyze

對編譯操作中指定的對象運行靜態(tài)分析器。

2.4.6打包操作Archive

打包應(yīng)用程序時進(jìn)行的一些個性化設(shè)置。

2.5額外操作

點開操作旁邊的三角形,會出現(xiàn):

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

選中其中一項,然后可以添加腳本或者添加一個發(fā)送郵件的操作。


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

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

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

3 運行目標(biāo)

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

屏幕快照 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

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

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

下載你要的SDK版本即可。

如果是真機,顯示的數(shù)據(jù)更模擬器比起來會有所不同。

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

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,058評論 25 709
  • 因為要結(jié)局swift3.0中引用snapKit的問題,看到一篇介紹Xcode8,swift3變化的文章,覺得很詳細(xì)...
    uniapp閱讀 4,872評論 0 12
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,365評論 4 61
  • 先生,第二杯半價 噢,我要一杯就好
    用心良苦ing閱讀 207評論 0 0
  • 無論是女生還是女人,都會把男生或男人對她的一點點好,無限的放大N倍。對她的不好、無限的縮小到忽略不計,自欺欺人的地步。
    Yn檸梔閱讀 225評論 0 0

友情鏈接更多精彩內(nèi)容