不用但一定要懂 ---- iOS 之 Xcode 工程管理

Xcode Target

  • Target 指定要構(gòu)建的product懒豹,并包含從 productworkspace中的一組文件構(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)建product的說(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è)置
  • 可用于調(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)建目錄覆蓋。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末歹嘹,一起剝皮案震驚了整個(gè)濱河市寓落,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌荞下,老刑警劉巖伶选,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異尖昏,居然都是意外死亡仰税,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)抽诉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)陨簇,“玉大人,你說(shuō)我怎么就攤上這事迹淌『诱溃” “怎么了己单?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)耙饰。 經(jīng)常有香客問(wèn)我纹笼,道長(zhǎng),這世上最難降的妖魔是什么苟跪? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任廷痘,我火速辦了婚禮,結(jié)果婚禮上件已,老公的妹妹穿的比我還像新娘笋额。我一直安慰自己,他們只是感情好篷扩,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布兄猩。 她就那樣靜靜地躺著,像睡著了一般鉴未。 火紅的嫁衣襯著肌膚如雪枢冤。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,708評(píng)論 1 305
  • 那天歼狼,我揣著相機(jī)與錄音掏导,去河邊找鬼享怀。 笑死羽峰,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的添瓷。 我是一名探鬼主播梅屉,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼鳞贷!你這毒婦竟也來(lái)了坯汤?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤搀愧,失蹤者是張志新(化名)和其女友劉穎惰聂,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體咱筛,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡搓幌,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了迅箩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片溉愁。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖饲趋,靈堂內(nèi)的尸體忽然破棺而出拐揭,到底是詐尸還是另有隱情撤蟆,我是刑警寧澤,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布堂污,位于F島的核電站家肯,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏敷鸦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一扒披、第九天 我趴在偏房一處隱蔽的房頂上張望值依。 院中可真熱鬧碟案,春花似錦、人聲如沸价说。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)扮叨。三九已至领迈,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間狸捅,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工尘喝, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人朽褪。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓置吓,卻偏偏與公主長(zhǎng)得像缔赠,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子橡淑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

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