Xcode Target
Target
指定要構(gòu)建的product懒豹,并包含從product
或workspace
中的一組文件構(gòu)建product
的說(shuō)明简卧。一個(gè)Target
定義單個(gè)product
;它將構(gòu)建product
所需的輸入(源文件和處理這些源文件的說(shuō)明)組織到構(gòu)建系統(tǒng)中左权。project
可以包含一個(gè)或多個(gè)Target
静檬,每個(gè)Target
生成一個(gè)product
。構(gòu)建
produc
t的說(shuō)明采用了構(gòu)建設(shè)置和構(gòu)建階段的形式票渠,你可以在Xcode project編輯器中檢查和編輯它們。Target
繼承project
生成設(shè)置促绵,但您可以通過(guò)在Target
級(jí)別指定不同的設(shè)置來(lái)重寫(xiě)任何project
設(shè)置李根。一次只能有一個(gè)執(zhí)行Target
;Xcode
方案指定活動(dòng)Target
杀餐。Target
及其創(chuàng)建的product
可以與另一個(gè)Target
相關(guān)。如果一個(gè)Target
需要另一個(gè)Target
的輸出來(lái)進(jìn)行構(gòu)建朱巨,那么就說(shuō)第一個(gè)Target
依賴(lài)于第二個(gè)Target
。如果兩個(gè)Target
在同一個(gè)workspace
枉长,Xcode
可以發(fā)現(xiàn)這個(gè)依賴(lài)關(guān)系冀续,在這種情況下,它會(huì)按照需要的順序構(gòu)建product
必峰。這種關(guān)系稱(chēng)為隱式依賴(lài)關(guān)系洪唐。你也可以在你的構(gòu)建設(shè)置中指定顯式的Target
依賴(lài),你可以指定兩個(gè)Xcode
期望有隱式依賴(lài)的Target
實(shí)際上是不依賴(lài)的吼蚁。例如凭需,您可以構(gòu)建一個(gè)library
和一個(gè)application
,它們?cè)谕粋€(gè)workspace
鏈接到該library
肝匆。Xcode
可以發(fā)現(xiàn)這種關(guān)系粒蜈,并自動(dòng)首先構(gòu)建library
。但是旗国,如果您實(shí)際上想要鏈接到library
的版本枯怖,而不是workspace
中構(gòu)建的版本,那么您可以在構(gòu)建設(shè)置中創(chuàng)建一個(gè)顯式依賴(lài)項(xiàng)能曾,它會(huì)覆蓋這個(gè)隱式依賴(lài)項(xiàng)度硝。
Xcode Project
Xcode
項(xiàng)目是構(gòu)建一個(gè)或多個(gè)軟件產(chǎn)品所需的所有文件、資源和信息的倉(cāng)庫(kù)寿冕。project
包含用于構(gòu)建產(chǎn)品的所有元素蕊程,并維護(hù)這些元素之間的關(guān)系。它包含一個(gè)或多個(gè)Target
驼唱,這些Target
指定如何構(gòu)建產(chǎn)品藻茂。project
為項(xiàng)目中的所有Target
定義默認(rèn)settings
(每個(gè)Target
還可以指定自己的生成settings
,這將覆蓋項(xiàng)目生成settings
)玫恳。
一個(gè)Xcode
項(xiàng)目文件包含以下信息:
-
引用源文件:
- 源代碼捌治,包括頭文件和實(shí)現(xiàn)文件
- Libraries 和 frameworks, internal 和 external
- Resource文件
- Image文件
- nib文件
-
用于在結(jié)構(gòu)導(dǎo)航器中組織源文件的組
-
Project
級(jí)構(gòu)建配置∨撸可以為項(xiàng)目指定多個(gè)生成配置;例如肖油,您可能有一個(gè)Project
的調(diào)試和發(fā)布設(shè)置。 -
Target
臂港,其中每個(gè)Target
指定:- 對(duì)
Project
構(gòu)建的一個(gè)產(chǎn)品的引用 - 對(duì)構(gòu)建該產(chǎn)品所需的源文件的引用
- 可用于構(gòu)建該產(chǎn)品的構(gòu)建配置森枪,包括對(duì)其他
Target
和其他settings
的依賴(lài)關(guān)系;當(dāng)Target
的生成配置不覆蓋它們時(shí)视搏,將使用項(xiàng)目級(jí)生成設(shè)置
- 對(duì)
-
可用于調(diào)試或測(cè)試程序的可執(zhí)行環(huán)境,可指定每個(gè)可執(zhí)行環(huán)境:
- 當(dāng)你從Xcode運(yùn)行或調(diào)試時(shí)要啟動(dòng)什么可執(zhí)行文件
- 傳遞給可執(zhí)行文件的命令行參數(shù)(如果有的話(huà))
- 在程序運(yùn)行時(shí)設(shè)置的環(huán)境變量(如果有)
Project
可以獨(dú)立存在县袱,也可以包含在workspace
中浑娜。
你可以使用Xcode方案來(lái)指定在給定的時(shí)間內(nèi)哪個(gè)Target
、構(gòu)建配置和可執(zhí)行配置是活動(dòng)的式散。
Build Settings
構(gòu)建Settings
是一個(gè)變量筋遭,它包含關(guān)于產(chǎn)品構(gòu)建過(guò)程的某個(gè)特定方面應(yīng)該如何執(zhí)行的信息。例如暴拄,構(gòu)建Settings
中的信息可以指定Xcode傳遞給編譯器的選項(xiàng)漓滔。
可以在項(xiàng)目或Target
級(jí)別指定生成Settings
。每個(gè)項(xiàng)目級(jí)生成Settings
都應(yīng)用于項(xiàng)目中的所有Target
乖篷,除非被特定Target
的生成Settings
顯式覆蓋响驴。
每個(gè)Target
組織構(gòu)建一個(gè)產(chǎn)品所需的源文件。生成配置指定一組用于以特定方式生成Target
產(chǎn)品的生成Settings
撕蔼。例如豁鲤,對(duì)于產(chǎn)品的調(diào)試和發(fā)布版本,通常有單獨(dú)的構(gòu)建配置鲸沮。
Xcode中的構(gòu)建設(shè)Settings
有兩部分:Settings
標(biāo)題和定義琳骡。生成Settings
標(biāo)題標(biāo)識(shí)生成Settings
,可以在其他Settings
中使用讼溺。構(gòu)建Settings
定義是一個(gè)常量或Xcode在構(gòu)建時(shí)用來(lái)確定構(gòu)建Settings
值的公式日熬。構(gòu)建Settings
也可以有一個(gè)顯示名稱(chēng),用于在Xcode用戶(hù)界面中顯示構(gòu)建Settings
肾胯。
當(dāng)你從項(xiàng)目模板創(chuàng)建新項(xiàng)目時(shí)竖席,除了Xcode提供的默認(rèn)構(gòu)建Settings
外,你還可以為你的項(xiàng)目或特定Target
創(chuàng)建用戶(hù)自定義的構(gòu)建Settings
敬肚。還可以指定條件生成Settings
毕荐。條件生成Settings
的值取決于是否滿(mǎn)足一個(gè)或多個(gè)先決條件。例如艳馒,這種機(jī)制允許您指定用于基于Target
體系結(jié)構(gòu)構(gòu)建產(chǎn)品的SDK憎亚。
Xcode Scheme
Xcode方案定義了一組要構(gòu)建的Target
,一組在構(gòu)建時(shí)使用的配置弄慰,以及一組要執(zhí)行的測(cè)試第美。
您可以有任意多個(gè)方案,但每次只能有一個(gè)是活動(dòng)的陆爽。您可以指定方案是否應(yīng)該存儲(chǔ)在項(xiàng)目中(在這種情況下什往,它在包括該項(xiàng)目的每個(gè)工作空間中都可用),或者存儲(chǔ)在工作空間中(在這種情況下慌闭,它僅在該工作空間中可用)别威。當(dāng)您選擇一個(gè)活動(dòng)方案時(shí)躯舔,您也選擇了一個(gè)運(yùn)行Target
(即,為其構(gòu)建產(chǎn)品的硬件架構(gòu))省古。
Xcode Workspace
Workspace
是一個(gè)Xcode文檔粥庄,它把項(xiàng)目和其他文檔分組,這樣你就可以一起處理它們豺妓。 一個(gè)Workspace
可以包含任意數(shù)量的Xcode項(xiàng)目惜互,以及你想包含的任何其他文件。 除了組織每個(gè)Xcode項(xiàng)目中的所有文件琳拭,Workspace
還提供了包含的項(xiàng)目和它們的目標(biāo)之間隱式或顯式的關(guān)系训堆。
Workspace
擴(kuò)展您的工作流程的范圍
項(xiàng)目文件包含指向項(xiàng)目中所有文件的指針,以及生成配置和其他項(xiàng)目信息臀栈。 在Xcode 3和更早的版本中,項(xiàng)目文件總是組和文件結(jié)構(gòu)層次結(jié)構(gòu)的根文件挠乳。 雖然一個(gè)項(xiàng)目可以包含對(duì)其他項(xiàng)目的引用权薯,但在Xcode 3中處理相關(guān)的項(xiàng)目是復(fù)雜的; 大多數(shù)工作流程都局限于單個(gè)項(xiàng)目。 在Xcode 4及以后的版本中睡扬,你可以選擇創(chuàng)建一個(gè)Workspace
來(lái)保存一個(gè)或多個(gè)項(xiàng)目盟蚣,以及其他你想要包含的文件。
除了提供對(duì)每個(gè)Xcode項(xiàng)目中所有文件的訪(fǎng)問(wèn)卖怜,Workspace
還擴(kuò)展了許多重要的Xcode工作流的范圍屎开。 例如,由于索引是在整個(gè)工作空間中完成的马靠,所以代碼完成奄抽、跳轉(zhuǎn)到定義以及所有其他內(nèi)容感知特性都可以無(wú)縫地通過(guò)工作空間中的所有項(xiàng)目工作。 因?yàn)橹貥?gòu)操作跨工作空間的所有內(nèi)容進(jìn)行甩鳄,所以您可以在一個(gè)框架項(xiàng)目和幾個(gè)使用該框架的應(yīng)用程序項(xiàng)目中在一個(gè)操作中重構(gòu)API逞度。 在構(gòu)建時(shí),一個(gè)項(xiàng)目可以使用Workspace
中其他項(xiàng)目的產(chǎn)品妙啃。
Workspace
文檔包含指向所包含的項(xiàng)目和其他文件的指針档泽,但不包含其他數(shù)據(jù)。 一個(gè)項(xiàng)目可以屬于多個(gè)工作空間揖赴。 圖中顯示了一個(gè)包含兩個(gè)Xcode項(xiàng)目(Sketch和TextEdit)和一個(gè)文檔項(xiàng)目(Xcode4TransGuideDocPlan)的工作空間馆匿。
Workspace
中的項(xiàng)目共享生成目錄
默認(rèn)情況下,Workspace
中的所有Xcode項(xiàng)目都構(gòu)建在同一個(gè)目錄下燥滑,稱(chēng)為Workspace
構(gòu)建目錄渐北。每個(gè)Workspace
都有自己的構(gòu)建目錄。因?yàn)?code>Workspace中所有項(xiàng)目中的所有文件都在同一個(gè)構(gòu)建目錄中铭拧,所以所有這些文件對(duì)每個(gè)項(xiàng)目都是可見(jiàn)的腔稀。因此盆昙,如果兩個(gè)或多個(gè)項(xiàng)目使用相同的庫(kù),則不需要將它們分別復(fù)制到每個(gè)項(xiàng)目文件夾中焊虏。
Xcode檢查構(gòu)建目錄下的文件淡喜,以發(fā)現(xiàn)隱含的依賴(lài)關(guān)系。例如诵闭,如果一個(gè)包含在Workspace
中的項(xiàng)目構(gòu)建了一個(gè)庫(kù)炼团,而這個(gè)庫(kù)又被同一個(gè)Workspace
中的另一個(gè)項(xiàng)目鏈接起來(lái),Xcode會(huì)在構(gòu)建另一個(gè)項(xiàng)目之前自動(dòng)構(gòu)建這個(gè)庫(kù)疏尿,即使構(gòu)建配置沒(méi)有明確說(shuō)明這個(gè)依賴(lài)關(guān)系瘟芝。如果需要,您可以使用顯式的構(gòu)建設(shè)置覆蓋這些隱式依賴(lài)項(xiàng)褥琐。對(duì)于顯式依賴(lài)項(xiàng)锌俱,必須創(chuàng)建項(xiàng)目引用。
工作空間中的每個(gè)項(xiàng)目都有自己獨(dú)立的標(biāo)識(shí)敌呈。要在不影響(或被影響)工作空間中的其他項(xiàng)目的情況下處理項(xiàng)目贸宏,您可以在不打開(kāi)工作空間的情況下打開(kāi)項(xiàng)目,或者可以將項(xiàng)目添加到另一個(gè)工作空間磕洪。因?yàn)橐粋€(gè)項(xiàng)目可以屬于多個(gè)工作空間吭练,所以您可以在任意數(shù)量的組合中處理項(xiàng)目,而不必重新配置任何項(xiàng)目或工作空間析显。
您可以使用Workspace
的默認(rèn)構(gòu)建目錄鲫咽,也可以指定一個(gè)。請(qǐng)注意谷异,如果項(xiàng)目指定了構(gòu)建目錄分尸,則該目錄將被構(gòu)建項(xiàng)目時(shí)項(xiàng)目所在的任何Workspace
的構(gòu)建目錄覆蓋。