XCode工程中 Project 和 Targets区别
今天打开工程看到project 和 targets,感觉有点迷惑,就查了一下
Apple的人是这样说的:“ Targets that define the products to build. A target organizes the files and instructions needed to build a product into a sequence of build actions that can be taken.”
简单的理解,就是一个target 对应一个新的 product(基于同一份代码的情况下),虽然代码是同一份,, 但编译设置(比如编译条件), 以及包含的资源文件却可以有很大的差别.
project就是一个项目,或者说工程,一个project可以对应多个target(你看看上面的图)其中一个target可以生成一个对应的product
通过Copy Bundle Resources中内容的不同设置, 我们可以让不同的product包含不同的资源, 包括程序的主图标等,
每个target可以使用一个独立, 不同的Info.plist文件
创建target有多种方法, 我们可以从现有的target上复制出一份, 然后略加改动, 也可以完全新建一个target出来. 但其实说穿了, 两个方法大同小异
复制的方法创建target
我们在XCode左侧的列表中, 展开 Targets 项, 在现有的target上, 右键选择 "Duplicate", 或者选中现有target后, 在顶部菜单的Edit内选择"Duplicate"也可以.
targets之间完全没有关系。但target和project有关系,target的setting会从project settings中继承一部分
此时我们就得到了一个新的target, 而在Resource里面也会得到一个 xxxx copy.plist. 这个新的target与原有的target是完全一致的, 余下的就是一些差异化的修改, 这个我们后面再说
创建全新的target
类似复制的方法, 我们可以在左侧的列表中很多地方按下右键菜单, 都可以看到Add中会有"New Target..."一项, 而在工程顶部菜单的Project内, 也可以看到这个"New Target..."的身影.
1.project就是一个项目,或者说工程,一个project可以对应多个target(你看看上面的图)其中一个target可以生成一个对应的product
2.targets之间完全没有关系。但target和project有关系,target的setting会从project settings中继承一部分
3、Target指定的内容:
3.1. Build Phases
Target Dependencies Target依赖,某些Target可能依赖某个Target输出的值,这里设置依赖
Copy Bundle Resources 是指生成的product的.app内将包含哪些资源文件
Compile Sources 是指将有哪些源代码被编译
Link Binary With Libraries 是指编译过程中会引用哪些库文件
3.2. Info
这个Info.plist文件内定义了一个iPhone项目的很多关键性内容, 比如程序名称, 最终生成product的全局唯一id等等.每一个Target都有一个info.plist文件来设置本target的一些属性
Xcode中,产品与Target直接相关,而Target与Project直接相关。
产品属性包括Project和Target两块内容。一个工程只有一个Project,但可以有一个或多个Target
总结:一个project 可以有很多targets,targets的编译设置可以不同,从而编译出不同的版本
参考
1:XCode工程中 Project 和 Targets区别