在我周围,像我这种性格的人特多——在公众场合什么都不说,到了私下里却妙语连珠,换言之,对信得过的人什么都说,对信不过的人什么都不说。
——王小波《沉默的大多数》
需求1:
需求不同, App分
免费版
和专业版
或者分国内版
和国际版
或者分企业版
和App Store版
除了个别页面不同, 其他构建页面都完全一样
- 思考:
- 第一种:新建两个项目工程开发,把相同的页面封装并拷贝到项目使用
- 第二种:在同一个项目中,建立两个不同的target进行开发
- 优劣:
- 第一种方式:项目之间独立分开,耦合和干扰度小,但是项目开发消耗有点大
- 第二种方式:节省项目资源拷贝,但是在配置文件和提交到git或者SVN仓库容易冲突
解决方案
- 使用多Target方式,在原有的基础上面
New
一个Target
需求2:
App需要应对不同的测试需求:
开发环境
、测试环境
、预发布环境
、发布环境
需要不同环境的App可以同时运行,以对比不同版本之间的差异
需要不同环境的App运行后有不同的:
App名称
、图标
、启动图
等等
解决方案
- 使用多Target方式,在原有的基础上面
Duplicate
一个Target
Cocoapods需要重新处理
- 如果项目使用了Cocoapods,那么增加Target后,不管是新建Target或者复制Target都需要处理Podfile文件
方式1
1 | platform :ios, "8.0" |
方式2 (推荐)
1 | source 'https://github.com/CocoaPods/Specs.git' |
项目中新建Target
注意点
- 以MultiTarget项目为例子,添加一个Target
- 如果使用Cocoapods管理项目依赖,尽量先把pods初始化后再复制Target
- 复制Target后需要重新设置Podfile文件的
- 添加文件和素材的时候注意对应的Target选择
- 需要手动把另一个Target里面的需要的所有的.m文件和nib文件都在Target Membership 里面勾选
- 如果有多语言文件也需要在Target Membership 里面勾选
- 如果配置有pch文件、需要再新建的Target里面重新配置pch文件路径
- 需要单独配置一些info.plist选项,如网络ATS/权限声明等
- 需要重新设置一遍依赖Target已经设置过的一些控制面板的属性,如后台,定位,bitcode等
项目新建一个Target


继承配置
- 删除不需要的默认生成的文件和xib
- 修改AppDelegate名称,修改其继承自上一个Target的AppDelegate
- 修改程序启动调用父类的配置信息


修改父类AppDelegate文件权限
- 可以供两个Target访问

配置不同的标记
- 在需要配置的Target中添加标记, 如新增加的Target 添加
TARGET_SECOND=1
- 注意Debug和Release模式都需要配置

配置对应的启动图和App图标素材
- 可以在不同的Targe种配置不同的App图标、启动图、以及其他图标
- 如果两个Target共用一套图标素材,则在需要共用的
Assets.xcassets
中的Target Membership
中勾选需要共享的Target.

重新配置Podfile文件,重新安装依赖库,如
1 | platform :ios, '9.0' |
项目中实战
- 删除项目每个Target中的
Main interface
中的Main
,不需要从XIB中加载,因为第二个Target是和第一个Target初始化入口相同,在Appdelegate中。 - 需要两个项目共享的
.m
xib
文件都需要Target Membership
中勾选需要共享的Target. - 在文件中根据设置的Target标记,区分不同的Target
- 直接切换不同的
Target
,即可编译生成对应的app

