xcode中同一project创建多个target
新的Target
1 利用复制创建target
我们在XCode左侧的列表中, 展开 Targets 项, 在现有的target上, 右键选择"Duplicate"
此时我们就得到了一个新的target, 而在Resource里面也会得到一个 xxxx copy.plist.这个新的target与原有的target是完全一致的, 余下的就是一些差异化的修改。我目前使用到的主要是这种方法。
2.创建全新的target
直接File - New - Add - Target
或者直接点target栏左下角的 加号
点击后, 首先会让你选择target的类型, 既然我一直所指的都是程序本身,那么自然选择Application了(至于其他的嘛, 有兴趣的自己研究吧, 比如我们可以把程序中的部分提取成一个Static Library).
Next后, 会让你输入一个新的Target的名字, 而不像复制的方法中, 默认生成 xxxxxcopy这样的target名.
但是这样生成出的Target几乎是空的。可以通过拖拽内容到这些target的设置中,以及调整编译选项来完成Target的配置.(这种方法我木有用过。。)
3.执行不同的target
在xcode左上角RUN和STOP的右边可以选择执行的target和设备,选择对应的即可
Targets之间的个性化设置
即使代码是同一份, 但编译设置(比如编译条件),以及包含的资源文件却可以有很大的差别,产出的product也可能大不相同。不同target可以包含不同的资源,包括程序的主图标等, 而不是把XCode的工程中列出的资源一股脑的包含进去。
而这还不是一个target所指定的全部内容. 每个target可以使用一个独立、 不同的Info.plist文件。
我们都知道, 这个Info.plist文件内定义了一个项目的很多关键性内容, 比如程序名称,最终生成product的全局唯一id等等。
而且不同的target还可以定义完整的差异化的编译设置,从简单的调整优化选项,到增加条件编译所使用的编译条件,以至于所使用的baseSDK都可以差异化指定。
我们来举几个典型的应用多Targets的情况吧,比如完整版和lite版;比如同一个游戏的20关,30关,50关版;再或者比如同一个游戏换些资源和名字就当新游戏卖的。。。
在新建的target中就可以选择自己独立的设置,如屏BundleID,幕旋转方向,app名称等,这样不同的target就区别开来
最主要的,可以设置标记。在BuildSettings中Preprocessor Macros项目中可以设置标记。其效果相当于全局的#define xxxx,这样就可以在代码中通过#ifdef - #else - #end的方法来根据不同标记的target来执行不同的代码。如我们项目中有两个target,主要用于区分不同的服务器,一个测试服务器,一个正式服务器(因为不同服务器中的数据不同,正式服务器数据重要,测试起来危险,所以设置了测试服务器)。这样设置一个TESTMODEL的标记,Debug和Release都需要设置
然后在代码中就可以区分