利用Target完成多环境配置 - ShenYj/ShenYj.github.io GitHub Wiki
在TARGETS下选中对应Target右键选择Duplicate, 会产生一个新的Target、Scheme和一个新的info.plist文件, 带有默认名称
接下来为新的Target、Scheme和info.plist文件修改名称, 设定新的bundleID(Duplicate后原BundleID也会相应变化), 完成新Target的初步设定
修改好名称后, 记得在新Target的Build settings中更新info.plist文件名称
这样新的Target就新增好了, 接下来就可以借助多Target进行多环境配置了
- 设置不同的
App icon
-
先在
Assets.xcassets中新建一个iOS App icon, 为两组App icon设置不同图片 -
在
Project-General下, 为不同Target设置App icons and Launch images
Include all app icon assets在 Xcode 的对应 buildSettings 的名字是ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS,当Include all app icon assets要设置为YES时,Xcode 会忽视Alternate App Icon Sets设置的内容Alternate App Icon Sets对应的字段是ASSETCATALOG_COMPILER_ALTERNATE_APPICON_NAMES。App 主图标的字段
Primary App Icon Set Name对应是ASSETCATALOG_COMPILER_APPICON_NAME。1024x1024 的商店图片,作为主图标时可以用jpg。如果用 png 格式,则不能有透明区域,否则上传 ipa 包体时会报错,无法上报, 而备用的图标,则 不能使用 jpg, 所以,备用图标的 1024x1024 一定要用 PNG 格式
- 配合自定义宏, 完成不同的环境配置
-
在多
Target基础上, 选择我们将要新增自定义宏的Target -
在
Build settings-Preprocessor Macros下, 为其新增自定义宏
-
代码中针对不同的环境执行不同处理
#if DEV self.describeLabel.text = @"DEV target环境下"; #else self.describeLabel.text = @"多Target实现多环境配置"; #endif
示例配置中对
Debug和Release设定了不同的值, 即RELEASE=0,DEBUG=1
在使用与处理指令#if时, 存在自定义的宏DEV且值为1时有效, 执行#if DEV分支代码
将#if DEV换成#ifdef DEV, 只要存在DEV的定义, 就会执行#ifdef DEV分支代码#ifdef只是判断后面的标识符有没有定义,而不在乎标识符的值,标识符是0是1对它来说都没有区别,只要预先定义了,执行#ifdef后的代码
#if指令更像常规的C中的if,#if后跟常量整数表达式。如果表达式为非零值,则表达式为真如果是
Swfit项目, 在Other Swift Flags来新增环境变量
注意前面需要增加-D后面是自定义的参数, 中间可以有空格, 也可以没有空格- 在 Xcode 8后苹果换用了
SWIFT_ACTIVE_COMPILATION_CONDITIONS的Active Compilation Conditions去定义变量,并且不需要在设置-D
- 在 Xcode 8后苹果换用了
方案不足之处:
配置零散, 多个plist文件, 尤其是在为
Target设置不同环境变量(自定义宏)时
使用 Xcode 的 Target 区分开发和生产环境 、 关于管理多个 Target 的一些注意事项
下一篇: 利用Scheme完成多环境配置