Xcode中的 project裏面包含了全部的源文件,資源文件和構建一個或者多個product的信息。project利用他們去編譯咱們所需的product,也幫咱們組織它們之間的關係。一個project能夠包含一個或者多個target。project定義了一些基本的編譯設置,每一個target都繼承了project的默認設置,每一個target能夠經過從新設置target的編譯選項來定義本身的特殊編譯選項。html
project包含了如下信息:ios
源文件app
在文件結構的導航中,採用group去組織文件(實際開發中,儘可能使用實體文件夾)測試
project能夠單獨存在,或者存在於一個workspace中。ui
target定義了構造一個product所需的文件和編譯指令。一個target對應於一個product。target說白了就是
告訴編譯系統要編譯的文件和編譯設置。編譯指令就是根據build settings and build phases來肯定的。spa
target之間能夠進行依賴。若是一個target的編譯須要另一個target做爲他的輸入,那麼咱們就能夠說前者依賴於後者。若是這兩個target在同一個workspace裏面,Xcode能夠發現他們的依賴關係,這種依賴稱之爲隱式依賴。固然你能夠經過設置,明確他們的依賴關係。debug
workspace是Xcode的一種文件,用來管理工程和裏面的文件,一個workspace能夠包含若干個工程,甚至能夠添加任何你想添加的文件。workspace提供了工程和工程裏面的target之間隱式和顯式依賴
關係,用來管理和組織工程裏面的全部文件。code
workspace中的工程默認都是在同一個編譯目錄下,也就是workspace的編譯目錄。因爲每一個工程中的文件都在workspace的編譯目錄下,因此每一個工程之間的文件都是相互能夠引用的。所以,若是workspace中的多個工程使用了同一個庫的時候,咱們就不須要給每一個工程都拷貝一個。xml
Xcode會檢查編譯目錄裏面的全部文件去發現隱式的依賴關係。好比,一個工程用來編譯成庫給其餘工程去引用,Xcode能夠自動的先編譯這個工程的庫,而後再去編譯其餘的工程。雖然你沒有在編譯選項裏面去設置這些依賴關係。固然若是你真的須要的話,你也能夠去設置,提供一個顯式的編譯依賴關係。htm
workspace中每一個工程依然都是獨立的。若是你想單獨的使用這個工程,而且不但願影響其餘工程,或者被其餘工程影響,你能夠直接打開工程而不經過workspace。一個工程能夠被多個workspace所擁有,在任意的組合中依然能夠直接運行,而不須要去從新配置工程或者workspace。
scheme定義了編譯集合中的若干target,編譯時的一些設置以及要執行的測試集合。咱們能夠定義多個scheme,可是每次只能使用其中一個。咱們能夠設置scheme保存在project中仍是workspace中。若是保存在project中,那麼任意包含了這個工程的workspace均可以使用。若是保存在workspace中,那麼只有這個workspace可使用。
參考:官方文檔