Xcode Project
Xcode中的 project里面包含了所有的源文件挤巡,資源文件和構(gòu)建一個或者多個product的信息。project利用他們?nèi)ゾ幾g我們所需的product澳泵,也幫我們組織它們之間的關(guān)系。一個project可以包含一個或者多個target兼呵。project定義了一些基本的編譯設(shè)置,每個target都繼承了project的默認(rèn)設(shè)置腊敲,每個target可以通過重新設(shè)置target的編譯選項來定義自己的特殊編譯選項击喂。
project包含了以下信息:
- 源文件
- 代碼的頭文件和實現(xiàn)文件
- 靜態(tài)庫,動態(tài)庫
- 資源文件(如文本碰辅,xml懂昂,plist等)
- 圖片資源
- 界面資源文件(xib, storyboard等)
- 在文件結(jié)構(gòu)的導(dǎo)航中没宾,采用group去組織文件(實際開發(fā)中凌彬,盡量使用實體文件夾)
- project的編譯級別配置文件如(debug沸柔, release)
- target
- 運行環(huán)境如:debug,test
[注]project可以單獨存在铲敛,或者存在于一個workspace中
Target
target定義了構(gòu)造一個product所需的文件和編譯指令褐澎。一個target對應(yīng)于一個product。target說白了就是
告訴編譯系統(tǒng)要編譯的文件和編譯設(shè)置伐蒋。編譯指令就是根據(jù)build settings and build phases來確定的工三。
target之間可以進(jìn)行依賴。如果一個target的編譯需要另外一個target作為他的輸入先鱼,那么我們就可以說前者依賴于后者俭正。如果這兩個target在同一個workspace里面,Xcode可以發(fā)現(xiàn)他們的依賴關(guān)系焙畔,這種依賴稱之為隱式依賴掸读。當(dāng)然你可以通過設(shè)置,明確他們的依賴關(guān)系宏多。
workspace
workspace是Xcode的一種文件儿惫,用來管理工程和里面的文件,一個workspace可以包含若干個工程绷落,甚至可以添加任何你想添加的文件姥闪。workspace提供了工程和工程里面的target之間隱式和顯式依賴關(guān)系,用來管理和組織工程里面的所有文件砌烁。
workspace中的工程共享一個編譯目錄
workspace中的工程默認(rèn)都是在同一個編譯目錄下筐喳,也就是workspace的編譯目錄。由于每個工程中的文件都在workspace的編譯目錄下函喉,所以每個工程之間的文件都是相互可以引用的避归。因此,如果workspace中的多個工程使用了同一個庫的時候管呵,我們就不需要給每個工程都拷貝一個梳毙。
Xcode會檢查編譯目錄里面的所有文件去發(fā)現(xiàn)隱式的依賴關(guān)系。比如捐下,一個工程用來編譯成庫給其他工程去引用账锹,Xcode可以自動的先編譯這個工程的庫,然后再去編譯其他的工程坷襟。雖然你沒有在編譯選項里面去設(shè)置這些依賴關(guān)系奸柬。當(dāng)然如果你真的需要的話,你也可以去設(shè)置婴程,提供一個顯式的編譯依賴關(guān)系廓奕。
workspace中每個工程依然都是獨立的。如果你想單獨的使用這個工程,并且不希望影響其他工程桌粉,或者被其他工程影響蒸绩,你可以直接打開工程而不通過workspace。一個工程可以被多個workspace所擁有铃肯,在任意的組合中依然可以直接運行患亿,而不需要去重新配置工程或者workspace。
Xcode Scheme
scheme定義了編譯集合中的若干target缘薛,編譯時的一些設(shè)置以及要執(zhí)行的測試集合窍育。我們可以定義多個scheme,但是每次只能使用其中一個宴胧。我們可以設(shè)置scheme保存在project中還是workspace中漱抓。如果保存在project中,那么任意包含了這個工程的workspace都可以使用恕齐。如果保存在workspace中乞娄,那么只有這個workspace可以使用。