workspace
workspace是Xcode項(xiàng)目管理中最大的集合,可以包含多個(gè) project,管理多個(gè) project 之間的關(guān)系。workspace 是以 .xcworkspace
的文件形式存在的,它不是一個(gè)文件夾,而是一個(gè)有管理、索引作用的文件。workspace 是為了解決之前只有 project 的時(shí)候多個(gè) project 之間的引用和調(diào)用困難的問(wèn)題。
- workspace擴(kuò)展了Xcode的工作范圍。例如,indexing在整個(gè)workspace里面做索引,code completion、Jump to Definition以及一些其他功能都是針對(duì)著整個(gè)workspace。當(dāng)building時(shí)候,一個(gè)project可以使用workspace中其他project的products。
- 默認(rèn)情況下,所有的workspace中的project都構(gòu)建在同一個(gè)目錄下(workspace build directory)。每一個(gè)workspace有它自己的build directory。因?yàn)樗衟rojects中的文件是同一個(gè)build directory,所有這些文件對(duì)每個(gè)project都是可見(jiàn)的,所以,如果有多個(gè)project用同一個(gè)libraries,你不需要單獨(dú)copy它們到每一個(gè)project文件夾中。Xcode會(huì)檢查build directory中的文件去發(fā)現(xiàn)它們implicit dependencies。
project
project是Xcode對(duì)一些代碼文件、資源、配置信息的管理倉(cāng)庫(kù)。project是以 .xcodeproj
的文件形式存在的。一個(gè)project包含所有構(gòu)建產(chǎn)品所需的內(nèi)容并且維護(hù)他們之間關(guān)系。
4.jpg
- 一個(gè)project可以單獨(dú)存在,也可以包含在一個(gè)workspace里。
- Project可以包含多個(gè)targets,并且為所有的target定義默認(rèn)的build setting(每一個(gè)target可以自定義它們的build setting,這些自定義的setting會(huì)覆蓋project默認(rèn)的build setting)。
target
target表示如何構(gòu)建一個(gè)具體產(chǎn)品,決定了如何對(duì)文件進(jìn)行編譯(編譯哪幾個(gè)文件,鏈接哪些動(dòng)態(tài)庫(kù)和靜態(tài)庫(kù),使用什么編譯腳本),怎么從一個(gè)project或者workspace的一堆文件導(dǎo)出一個(gè)產(chǎn)品。3.jpg
- 一個(gè)target對(duì)應(yīng)一個(gè)產(chǎn)品,它管理著一個(gè)產(chǎn)品的編譯信息的"輸入"(一堆源文件和一些處理這些源文件的命令)。
- 構(gòu)建一個(gè)product的instruction表現(xiàn)形式是build settings and build phases(可以在Xcode Project editor里面查看、編輯)。一個(gè)target的build settings 繼承project的build settings,但是重寫(xiě)覆蓋project setting。同一時(shí)間里只有一個(gè)active Target ,由Xcode Scheme指定。
- 一個(gè)target可以依賴其他的target。如果這倆個(gè)target在同一個(gè)workspace,Xcode會(huì)發(fā)現(xiàn)他們的依賴關(guān)系,從而按照特定的順序構(gòu)建產(chǎn)品,這樣的關(guān)系被稱(chēng)為"implicit dependency"。例如,一個(gè)workspace中的A project 構(gòu)建了一個(gè)A庫(kù),這個(gè)A庫(kù)被workspace中另一個(gè)B project引用,Xcode會(huì)自動(dòng)先構(gòu)建A庫(kù),然后構(gòu)建B project,即使build configuration中沒(méi)有明顯的設(shè)置。如果需要的話,你可以用explicit build settings重寫(xiě)implicit dependencies。對(duì)于“顯示依賴”(explicit dependencies),必須創(chuàng)建項(xiàng)目引用。
scheme
scheme(方案)不同于上面的概念,表示一個(gè)組合方案。scheme是以 .xcscheme
的文件形式存在的。它指定構(gòu)建哪些targets,使用什么build configuration與executable configuration 。可以針對(duì)編譯,運(yùn)行,單元測(cè)試,動(dòng)態(tài)分析,靜態(tài)代碼分析以及打包進(jìn)行一些配置。
2.jpg
- 可以創(chuàng)建許多scheme,但是同一時(shí)間只能有一個(gè)是激活的。
- 可以把scheme保存在project或workspace。如果保存在project中,那么該scheme在每一個(gè)包含該project的workspace內(nèi)都可用;如果保存在workspace中,那么只有該workspace中可用。
- 選擇一個(gè)shceme,同時(shí)也需要選擇一個(gè)運(yùn)行平臺(tái)(構(gòu)建產(chǎn)品運(yùn)行的硬件平臺(tái)架構(gòu))。如圖,testscheme為選擇的scheme,右邊對(duì)應(yīng)的運(yùn)行平臺(tái)是iPhone 8 Pluse模擬器。
1.jpg