目的
使用 targets 进行多版本管理
场景举例
新浪微博的第三方客户端weico,普通版是免费的,Pro版下载是收费的
Pro版对比普通版,APP图标和启动图等素材是不一样的,且Pro版在普通版功能上会增加一些特殊功能
如果开发人员将这两个APP分开维护,当接到新的需求时,先在一个APP开发好,再将代码copy至另一个工程,我们每个人应该都能做到
但是想象一下,当项目越来越大、需求修改频繁时,两个工程间来回copy代码也是不少的工作量,而且这样重复的劳动完全没有任何价值,对于项目进度和开发者本身都是灾难
也许会有同学提出,使用组件化方案来解决问题。的确,组件化可以重复利用开发好的模块,但在面对两个工程不同的需求时(如不同的图片、颜色等),我们就要在模块中增加接口来应对,尤其在面对不同业务逻辑时(比如是否开放功能等),我们就不得不把一个完整的组件再细分下去,但仍然避免不了在两个工程间来回折腾,这样会让我们很被动
场景小结:基于同一份代码,产出不同的product,可以利用targets设置
不同的编译条件来实现
实战操作
一、主要步骤分为:
- 创建工程
- 使用
Duplicate添加targets - 修改
targets名称 - 修改info.plist文件路径,并
重命名info.plist - 使用
add Files to 'TargetsDemo'...将info.plist文件添加至Xcode - 使用
Choose info.plist File...为对应的targets添加的info.plist文件 - 为每个targets添加对应的
app图标(和启动图) - 为每个targets设置
预编译宏 - 修改
Schemes名称 - 使用预编译宏为targets添加
预编译条件 - 不同targets运行后应该是
不同的product
二、操作截图
- 创建工程

- 使用
Duplicate添加targets

- 选择
Duplicate Only(按需选择)

- 新增targets后如下:多了targets和对应的info.plist文件

- 修改target名称

- 修改后如下

- 修改info.plist文件路径,并重命名


- Xcode中提示找不到被重命名的info.plist文件(删除红色的文件)

- 使用
add Files to 'TargetsDemo'...从工程文件夹下添加被重命名的info.plist文件

- 添加完成后如下

- 在Targets_A和Targets_B中使用
Choose info.plist File...添加对应的info.plist文件

- 添加完成后如下

- 为targets添加app图标(启动图类似)

- 重命名原
appicon名称

- 重命名后如下

- 为targets选择对应的app图标

- 为targets设置预编译宏

- 添加完成后如下

- 使用
Manage Schemes…修改Schemes名称


- 修改后,点击
Close

- 修改完成后如下

- 使用预编译宏为targets添加条件

- 不同targets运行后应该是不同的product
