利用Target完成多环境配置 - ShenYj/ShenYj.github.io GitHub Wiki

利用Target完成多环境配置

TARGETS下选中对应Target右键选择Duplicate, 会产生一个新的TargetScheme和一个新的info.plist文件, 带有默认名称

接下来为新的TargetSchemeinfo.plist文件修改名称, 设定新的bundleID(Duplicate后原BundleID也会相应变化), 完成新Target的初步设定

修改好名称后, 记得在新TargetBuild settings中更新info.plist文件名称

这样新的Target就新增好了, 接下来就可以借助多Target进行多环境配置了


实际运用

  • 设置不同的App icon
  1. 先在Assets.xcassets中新建一个iOS App icon, 为两组App icon设置不同图片

  2. Project-General下, 为不同Target设置App icons and Launch images

    选择icon

    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 格式

  • 配合自定义宏, 完成不同的环境配置
  1. 在多Target基础上, 选择我们将要新增自定义宏的Target

  2. Build settings-Preprocessor Macros下, 为其新增自定义宏

    自定义宏

  3. 代码中针对不同的环境执行不同处理

    #if DEV
        self.describeLabel.text = @"DEV target环境下";
    #else
        self.describeLabel.text = @"多Target实现多环境配置";
    #endif
    

    示例配置中对DebugRelease设定了不同的值, 即 RELEASE=0,DEBUG=1
    在使用与处理指令#if时, 存在自定义的宏DEV且值为1时有效, 执行#if DEV分支代码
    #if DEV换成#ifdef DEV, 只要存在DEV的定义, 就会执行#ifdef DEV分支代码

    #ifdef只是判断后面的标识符有没有定义,而不在乎标识符的值,标识符是01对它来说都没有区别,只要预先定义了,执行#ifdef后的代码
    #if指令更像常规的C中的if#if后跟常量整数表达式。如果表达式为非零值,则表达式为真

    如果是Swfit项目, 在Other Swift Flags来新增环境变量
    注意前面需要增加-D后面是自定义的参数, 中间可以有空格, 也可以没有空格

    • 在 Xcode 8后苹果换用了 SWIFT_ACTIVE_COMPILATION_CONDITIONSActive Compilation Conditions去定义变量,并且不需要在设置-D

方案不足之处:

配置零散, 多个plist文件, 尤其是在为Target设置不同环境变量(自定义宏)时


参考资料

使用 Xcode 的 Target 区分开发和生产环境 、 关于管理多个 Target 的一些注意事项

下一篇: 利用Scheme完成多环境配置

⚠️ **GitHub.com Fallback** ⚠️