目的
使用 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