翻譯@Xcode Concepts(Xcode若干概念解釋)

翻譯@Xcode Concepts(Xcode若干概念解釋)


Xcode Target

target構(gòu)建產(chǎn)品(build product)癌淮,它包含一系列指令该默,基于一組來自于project或workspace的文件栓袖,進(jìn)行構(gòu)建。一個(gè)target對(duì)應(yīng)一個(gè)產(chǎn)品音榜;它負(fù)責(zé)為Xcode構(gòu)建體系提供輸入——源文件以及處理這些源文件的指令——最后輸出產(chǎn)品。一個(gè)project可以包含多個(gè)target捧弃。

用于構(gòu)建產(chǎn)品的指令以build settings和build phases的形式出現(xiàn)赠叼,其內(nèi)容可以在Xcode中查看违霞。target默認(rèn)繼承project的build settings嘴办,但開發(fā)者隨時(shí)可以通過修改target層面的build settings,打破這種繼承關(guān)系涧郊。(對(duì)于Xcode來說)一次只能有一個(gè)target處于激活狀態(tài);scheme負(fù)責(zé)對(duì)其進(jìn)行說明眼五。

一個(gè)target及其構(gòu)建的產(chǎn)品可以同另一個(gè)target關(guān)聯(lián)妆艘。為了構(gòu)建產(chǎn)品看幼,如果一個(gè)target需要以另一個(gè)target輸出的產(chǎn)品作為自己的輸入批旺,那么就可以說前者依賴于后者。如果兩個(gè)target位于同一個(gè)workspace下诵姜,Xcode會(huì)自動(dòng)發(fā)現(xiàn)這種依賴關(guān)系,順次構(gòu)建產(chǎn)品棚唆。這種關(guān)系被稱為隱式依賴。開發(fā)者也可以在build settings中顯式的定義依賴關(guān)系翎卓,甚至可以規(guī)定兩個(gè)似乎有隱式依賴關(guān)系的target實(shí)際上沒有任何聯(lián)系。例如逗扒,在同一個(gè)workspace中,需要構(gòu)建一個(gè)庫(kù)和一個(gè)使用這個(gè)庫(kù)的應(yīng)用矩肩。Xcode會(huì)自動(dòng)發(fā)現(xiàn)二者之間的依賴關(guān)系黍檩,并首先構(gòu)建庫(kù)。然而始锚,如果我們的應(yīng)用只使用庫(kù)的某個(gè)特定版本刽酱,而非最新的,就可以在應(yīng)用的build settings中建立顯式依賴瞧捌,覆蓋隱式依賴棵里。


Xcode Project

project好像倉(cāng)庫(kù),存放用于構(gòu)建一個(gè)或多個(gè)產(chǎn)品的文件姐呐,資源和信息殿怜。project包含構(gòu)建所需的元素,并維護(hù)各元素之間的關(guān)系曙砂。其可能擁有一個(gè)或多個(gè)target头谜,這些target規(guī)定了產(chǎn)品是如何構(gòu)建的。project定義了其下所有target的默認(rèn)build settings(每個(gè)tareget都有自己build settings麦轰,可以覆蓋project的build settings)乔夯。

project文件包含如下信息:

  • 對(duì)源文件的引用(譯者:是引用,并非源文件本身):

    • 源代碼款侵,包括頭文件和實(shí)現(xiàn)文件末荐;
    • 庫(kù)和framework,包括內(nèi)部和外部的新锈;
    • 資源文件甲脏;
    • 圖片文件;
    • Interface Builder(nib)文件
  • 文件組妹笆,用于在右側(cè)的Project Navigator中組織源文件块请;

  • project層面的build configuration。開發(fā)者可以針對(duì)一個(gè)project創(chuàng)建多個(gè)build configuration拳缠;例如墩新,一般會(huì)有debug和release兩套build settings。(譯者:這里的意思是一個(gè)build configuration代表一套build settings)

  • target窟坐,每個(gè)target定義了:

    • 對(duì)其所構(gòu)建的產(chǎn)品的引用海渊;
    • 對(duì)構(gòu)建產(chǎn)品所需的源文件的引用绵疲;
    • 用于構(gòu)建產(chǎn)品的buld configuration(譯者:即build settings),包括同其他target的依賴關(guān)系臣疑,及其他設(shè)置盔憨;project層面的build settings會(huì)在沒有被覆蓋時(shí)使用;
  • 用來debug或測(cè)試程序的運(yùn)行環(huán)境(譯者讯沈,可能有多個(gè))郁岩,每個(gè)運(yùn)行環(huán)境定義了:

    • 從Xcode運(yùn)行或debug時(shí),啟動(dòng)哪個(gè)可執(zhí)行文件缺狠;
    • 傳遞給可執(zhí)行文件的命令行參數(shù)问慎,如有;
    • 程序運(yùn)行時(shí)需要設(shè)定的環(huán)境參數(shù)挤茄,如有蝴乔;

project可以獨(dú)立使用,也可以添加至workspace驮樊。

使用scheme來定義哪個(gè)target薇正,build configuration,及可執(zhí)行文件處于激活狀態(tài)囚衔。


Build Settings

每一項(xiàng)build setting代表一個(gè)變量挖腰,代表構(gòu)造過程中特定執(zhí)行細(xì)節(jié)。例如练湿,某些build setting定義了Xcode向編譯器傳遞的參數(shù)猴仑。

開發(fā)者可以定義project或target層面的build setting。前者默認(rèn)適用于其下所有target肥哎,后者可以覆蓋前者辽俗。

target負(fù)責(zé)組織構(gòu)建所需的源文件。一個(gè)build configruation代表一套build settings篡诽。例如崖飘,一個(gè)產(chǎn)品通常會(huì)有debug和 release兩個(gè)不同的build configuration。

build settings由兩部分組成:標(biāo)題和定義杈女。標(biāo)題代表某項(xiàng)build setting朱浴,可以用于定義其他build setting。定義可以是一個(gè)常量或者是一個(gè)Xcode公式达椰,后者的值要等到構(gòu)建時(shí)才能得出翰蠢。build settting還可能有展示名,用于在Xcode中顯示啰劲。

除了創(chuàng)建project時(shí)所生成的默認(rèn)build settings之外梁沧,開發(fā)者還可以創(chuàng)建自定義的build setting項(xiàng);以及依賴特定條件的build setting項(xiàng)蝇裤。后者的值取決于一個(gè)或多個(gè)先決條件是否達(dá)成廷支。例如埃碱,根據(jù)不同的架構(gòu)使用不同SDK。


Xcode Workspace

workspace組織project和其他文件酥泞,便于開發(fā)者統(tǒng)一處理。workspace能夠包含任意數(shù)量的project啃憎。除了組織文件外芝囤,它還可以為這些project和target設(shè)定依賴關(guān)系。

Workspaces拓展了工作流

project包含對(duì)源文件的引用辛萍,build configuration和其他相關(guān)信息悯姊。直到Xcode 3,proejct一直是所有文件組和文件結(jié)構(gòu)的根目錄贩毕。盡管可以引用其他project悯许,但同時(shí)管理多個(gè)關(guān)聯(lián)project仍然很不方便;工作流被局限在單個(gè)project中辉阶。自Xcode 4開始先壕,開發(fā)者可以通過創(chuàng)建workspace的方式來包含一個(gè)或多個(gè)proejct,及其他相關(guān)文件谆甜。

除了能夠訪問所有project包含的文件垃僚,workspace拓展了許多重要的Xcode工作流。例如规辱,得益于索引機(jī)制谆棺,諸如代碼補(bǔ)全,定義跳轉(zhuǎn)罕袋,及其他內(nèi)容檢測(cè)相關(guān)的特性改淑,一個(gè)workspace下的所有project都可以享受到。由于重構(gòu)操作的范圍是整個(gè)workspace浴讯,開發(fā)者重構(gòu)一個(gè)framework project中的API時(shí)朵夏,將影響所有使用這個(gè)framework的project。構(gòu)建時(shí)榆纽,一個(gè)project可以使用其他project的產(chǎn)品侍郭。

workspace文件只包含的project文件和其他文件的引用。project可以同時(shí)屬于一個(gè)或多個(gè)workspace掠河。下圖展示了一個(gè)workspace包含兩個(gè)Xcode project(Sketch和TextEdit)亮元,和一個(gè)文件project(Xcode4TransGuideDocPlan)。

以及一個(gè)文件project(Xcode4TransGuideDocPlan)
同一個(gè)workspace下的project共享構(gòu)建目錄

默認(rèn)唠摹,一個(gè)workspace下的所有project都在同一個(gè)目錄下構(gòu)建爆捞,稱為workspace構(gòu)建目錄(workspace build directory)。每個(gè)workspace都有自己的構(gòu)建目錄勾拉。因此煮甥,每個(gè)project都可以訪問任意文件盗温。如果一個(gè)庫(kù)被多個(gè)project使用,開發(fā)者不必一一拷貝成肘。(譯者:所謂build directory卖局,即構(gòu)建過程中,所有資源文件的集散目錄双霍。)

Xcode通過檢查構(gòu)建目錄砚偶,發(fā)現(xiàn)隱式依賴關(guān)系。例如洒闸,workspace下一個(gè)project構(gòu)建一個(gè)庫(kù)染坯,其被另一個(gè)project依賴,Xcode會(huì)自動(dòng)首先構(gòu)建前者丘逸,再構(gòu)建其他產(chǎn)品单鹿,即使(后者的)build configuration中并沒有明確的定義這種依賴關(guān)系。開發(fā)者可以使用顯式依賴關(guān)系覆蓋它深纲。為此仲锄,需創(chuàng)建project之間的引用。

workspace下的每個(gè)project仍然具有獨(dú)立性湃鹊。要單獨(dú)操作某個(gè)project——不影響或不被影響——開發(fā)者可以單獨(dú)打開這個(gè)project昼窗,或者將其添加到另一個(gè)workspace。一個(gè)project可以屬于一個(gè)或多個(gè)workspace涛舍,開發(fā)者可以任意組合澄惊,而不必重新配置project或workspace。

開發(fā)者可以使用workspace默認(rèn)的構(gòu)建目錄富雅,或自定義掸驱。注意,如果一個(gè)project定義了自己的構(gòu)建目錄没佑,那么在加入到一個(gè)workspace后毕贼,其會(huì)使用后者的構(gòu)建目錄。


Xcode Scheme

一個(gè)scheme定義了一組要構(gòu)建的target蛤奢,一個(gè)構(gòu)建時(shí)使用的build configuration鬼癣,以及一組要執(zhí)行的測(cè)試。

開發(fā)者可以定義任意數(shù)量的scheme啤贩,但每次只有一個(gè)處于激活狀態(tài)待秃。scheme可以保存在project或workspace中:若為前者,如果這個(gè)project加入一個(gè)workspace痹屹,那么所有project都可以使用章郁;若為后者,只有這個(gè)workspace中的project可以使用志衍。每當(dāng)開發(fā)者選中(激活)一個(gè)scheme暖庄,同時(shí)還需要選擇一個(gè)目標(biāo)設(shè)備(即產(chǎn)品運(yùn)行的硬件平臺(tái))聊替。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市培廓,隨后出現(xiàn)的幾起案子惹悄,更是在濱河造成了極大的恐慌,老刑警劉巖肩钠,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件泣港,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡蔬将,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門央星,熙熙樓的掌柜王于貴愁眉苦臉地迎上來霞怀,“玉大人,你說我怎么就攤上這事莉给”惺” “怎么了?”我有些...
    開封第一講書人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵颓遏,是天一觀的道長(zhǎng)徐矩。 經(jīng)常有香客問我,道長(zhǎng)叁幢,這世上最難降的妖魔是什么滤灯? 我笑而不...
    開封第一講書人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮曼玩,結(jié)果婚禮上鳞骤,老公的妹妹穿的比我還像新娘。我一直安慰自己黍判,他們只是感情好豫尽,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著顷帖,像睡著了一般美旧。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上贬墩,一...
    開封第一講書人閱讀 51,146評(píng)論 1 297
  • 那天榴嗅,我揣著相機(jī)與錄音,去河邊找鬼陶舞。 笑死录肯,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的吊说。 我是一名探鬼主播论咏,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼优炬,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了厅贪?” 一聲冷哼從身側(cè)響起蠢护,我...
    開封第一講書人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎养涮,沒想到半個(gè)月后葵硕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡贯吓,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年懈凹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片悄谐。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡介评,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出爬舰,到底是詐尸還是另有隱情们陆,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布情屹,位于F島的核電站坪仇,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏垃你。R本人自食惡果不足惜椅文,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望惜颇。 院中可真熱鬧雾袱,春花似錦、人聲如沸官还。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)望伦。三九已至林说,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間屯伞,已是汗流浹背腿箩。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留劣摇,地道東北人珠移。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親钧惧。 傳聞我的和親對(duì)象是個(gè)殘疾皇子暇韧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

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