workSpace
workspace 是 Xcode 的一种文件,用来管理工程和里面的文件
一个 workspace 可以包含若干个 project,甚至可以添加任何你想添加的文件。
workspace 提供了 project 和 project 里面的target之间隐式和显式依赖关系,用来管理和组织工程里面的所有文件。
workspace 是以xcworkspace的文件形式存在的(这点和 project 一致)。
workspace 的存在是为了解决不同 project 之间引用和调用困难的问题。
同一个 workspace 下的所有 project 共用同一个编译路径。workspace 中的工程默认都是在同一个编译目录下,也就是 workspace 的编译目录。
由于每个工程中的文件都在 workspace 的编译目录下,所以每个工程之间的文件都是相互可以引用的。因此,如果 workspace 中的多个工程使用了同一个库的时候,我们就不需要给每个工程都拷贝一个。
Project
Xcode 中的 project 里面包含了所有的源文件,资源文件和构建一个或者多个product的信息。
project利用他们去编译我们所需的product,也帮我们组织它们之间的关系。
一个 project 可以包含一个或者多个 target。
project 定义了一些基本的编译设置,每个 target 都继承了 project 的默认设置,就是这个参数($(inherited)),每个 target 可以通过重新设置 target 的编译选项来定义自己的特殊编译选项。
一个 project 可以单独存在,也可以被 workspace 包含,这种结构就是 cocoapods 默认我们所看到的,也是现在开发最常用的结构,当你开启 pod 的时候,会生成一个 xcworkspace。
target
target 定义了构造一个 product 所需的文件和编译指令。
一个 target 对应于一个 product。
target 说白了就是告诉编译系统要编译的文件和编译这些源文件的设置说明。
编译指令就是根据build settings and build phases
来确定的。
Xcode 右上角的侧边栏打开–> Target Membership可以查看 文件归属于哪个Target
target 之间可以进行依赖。
如果一个 target 的编译需要另外一个 target 作为他的输入,那么我们就可以说前者依赖于后者。
如果这两个 target 在同一个workspace 里面,Xcode 可以发现他们的依赖关系,这种依赖称之为隐式依赖。当然你可以通过设置,明确他们的依赖关系。
1.你可以根据现有的产品,建立不同的 Target,右键出来一个 Duplicate,然后你修改不同的参数,可以配制出日常打包,线上,预发布等包的配置,通过 General,BuildSetting 和 BuildPhrase 来进行定制化修改
2.开发 SDK 的时候先默认一个 Target 开发,然后把需要打包的文件新建一个 Target 进行打包,如果打包Target是后来建立的,可以先 remove reference,然后再拖进来,选择对应 Target 即可
scheme
scheme 定义了编译集合中的若干 target,编译时的一些设置以及要执行的测试集合。
我们可以定义多个 scheme,但是每次只能使用其中一个。
我们可以设置 scheme 保存在 project 中还是 workspace 中。如果保存在 project 中,那么任意包含了这个工程的 workspace 都可以使用。如果保存在 workspace 中,那么只有这个 workspace 可以使用。
来源:https://blog.csdn.net/Deft_MKJing/article/details/88783860