利用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
完成多环境配置