Xcode Project是一個(gè)包含構(gòu)建一個(gè)或多個(gè)軟件產(chǎn)品所需要的一切文件轻纪、資源及信息的倉(cāng)庫(kù)。 Project包含構(gòu)建產(chǎn)品的所有元素,并負(fù)責(zé)維護(hù)各個(gè)元素之間的關(guān)系龟糕。它包含一個(gè)或多個(gè)target桐磁,這些target指定如何構(gòu)建產(chǎn)品。Project 為其中的target定義了默認(rèn)的編譯設(shè)置(每個(gè)target也可以覆蓋默認(rèn)的設(shè)置讲岁,指定自己的構(gòu)建設(shè)置)我擂。
Xcode Project 文件包含下面的一些信息:
對(duì)源文件的引用:
源代碼,包括頭文件和實(shí)現(xiàn)文件
庫(kù)和框架缓艳,內(nèi)部和外部的
資源文件
圖像文件
Interface Builder(NIB)文件
Groups 導(dǎo)航欄中用于組織文件資源
Project級(jí)別的構(gòu)建設(shè)置校摩。你可以為一個(gè)項(xiàng)目指定多個(gè)構(gòu)建設(shè)置;例如阶淘,你有debug和release的生成設(shè)置衙吩。
Targets,每個(gè)Target可定制的內(nèi)容:
Project 構(gòu)建的一個(gè)Product的引用
構(gòu)建某個(gè)產(chǎn)品所用的全部文件的引用
構(gòu)建某個(gè)產(chǎn)品所用的構(gòu)建設(shè)置溪窒,包括對(duì)其他target或其他設(shè)置的依賴關(guān)系坤塞;如果對(duì)應(yīng)的target沒(méi)有覆蓋原來(lái)的Project的設(shè)置,則使用原來(lái)Project的澈蚌。
可用來(lái)調(diào)試或測(cè)試程序的執(zhí)行環(huán)境摹芙,每個(gè)執(zhí)行環(huán)境可定制的內(nèi)容:
當(dāng)用Xcode運(yùn)行或調(diào)試可執(zhí)行文件的時(shí)候,加載什么東西
傳遞給可執(zhí)行文件的命令行參數(shù)
程序運(yùn)行時(shí)候的環(huán)境變量宛瞄。
一個(gè)Project可以單獨(dú)存在或包含在一個(gè)工作空間中浮禾。
Xcode Target
一個(gè)Target指定一個(gè)產(chǎn)品來(lái)構(gòu)建并且包含了從項(xiàng)目或workspace的全部(或部分)文件中構(gòu)建產(chǎn)品的指令。一個(gè)target定義了一個(gè)單一的產(chǎn)品份汗。它來(lái)組織構(gòu)建產(chǎn)品的輸入文件(包含構(gòu)建產(chǎn)品必需的所有文件:源文件盈电,預(yù)編譯這些源文件的指令)。Project 可以包含一個(gè)或多個(gè)target杯活,每個(gè)target產(chǎn)生一個(gè)產(chǎn)品匆帚,可對(duì)應(yīng)一個(gè)不同的應(yīng)用。
構(gòu)建產(chǎn)品的指令有兩種形式:構(gòu)建設(shè)置和構(gòu)建階段(Build settings 和 Build phases), 你可以在Xcode的項(xiàng)目editor中檢查并編輯它們轩猩。target繼承了project的構(gòu)建設(shè)置卷扮。但是你可以在target層次覆蓋任何project的設(shè)置荡澎。在同一時(shí)刻均践,只有一個(gè)target是活躍的晤锹。Xcode scheme指定了那個(gè)target是活躍的。
一個(gè)target以及由它生成的產(chǎn)品可以與其他的target建立關(guān)系彤委。如果構(gòu)建一個(gè)target需要另一個(gè)target的輸出鞭铆,我們就說(shuō)第一個(gè)target依賴于第二個(gè)target。如果它們兩個(gè)都在同一個(gè)workspace中焦影,xcode可以發(fā)現(xiàn)這種依賴關(guān)系车遂,那么它就會(huì)按照需要的順序來(lái)構(gòu)建產(chǎn)品。這種關(guān)系叫做隱式依賴斯辰。你也可以在你的構(gòu)建設(shè)置中設(shè)置顯式依賴舶担,并且你可以指定某兩個(gè)xcode可能判定為有隱式依賴的target之間沒(méi)有依賴關(guān)系。例如:你可以構(gòu)建一個(gè)庫(kù)以及一個(gè)鏈接這個(gè)庫(kù)的在同一個(gè)workspace下的應(yīng)用程序彬呻。xcode可以發(fā)現(xiàn)這種關(guān)系并且自動(dòng)先構(gòu)建這個(gè)庫(kù)衣陶。當(dāng)然,如果你確實(shí)需要鏈接到一個(gè)與當(dāng)前workspace下不同版本的庫(kù)中闸氮,你可以在你的構(gòu)建設(shè)置中創(chuàng)建一個(gè)顯示依賴剪况,這將覆蓋原來(lái)的隱式依賴。
Xcode Scheme
Xcode scheme 定義了可構(gòu)建的target的集合蒲跨、構(gòu)建時(shí)可用的設(shè)置以及可執(zhí)行的測(cè)試的集合译断。
你可以創(chuàng)建任意數(shù)目的scheme,但是同一時(shí)刻只有一個(gè)是活躍的或悲。你可以指定某一個(gè)scheme應(yīng)該是存儲(chǔ)在project中還是workspace中——如果是存儲(chǔ)在project中孙咪,它在所有包含這個(gè)project的workspace中都是可用的,若是存儲(chǔ)在workspace中巡语,它只能在當(dāng)前的workspace中可用翎蹈。當(dāng)你選擇一個(gè)活躍的scheme,你也就同時(shí)選擇了一個(gè)運(yùn)行目的(也就是說(shuō)捌臊,這個(gè)產(chǎn)品將要構(gòu)建在那個(gè)硬件結(jié)構(gòu)中)杨蛋。
Xcode Workspace
Workspace是一個(gè)xcode文檔,它將一些項(xiàng)目以及其他的文檔組織在一起理澎,以便于你基于它們進(jìn)行工作逞力。一個(gè)Workspace可以包含任意個(gè)xcode項(xiàng)目,你也可以往里面加一些你想要的文件糠爬。 另外寇荧,為了阻止每個(gè)項(xiàng)目中的文件,workspace 為包含的項(xiàng)目以及它們的target提供了顯式或隱式的關(guān)系执隧。
閱讀拓展:
解密 Build
應(yīng)用配置和項(xiàng)目結(jié)構(gòu)
project揩抡、target的build settings户侥、info信息剖析