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可使用。
参考:官方文档