本文将介绍如何利用 Build Configurations 配置环境变量。

背景

在一般的测试中,我们都会在不同的场景下进行测试。例如,DEV(Development System),UAT(User Acceptance Testing) ,SIT(System Integration Testing) 等各种场景。在这些场景中,我们可能会赋予 App 不同的形式和功能,以方便团队的开发测试。例如 App 名字(ProjectDEV,ProjectUA),图标(图片1,图片2)等。另外一些实验性的功能并不会在发布场景下出现,但在 DEV 下会保留。

因此,如何快速地在各个场景中切换,是我们必须要面对的问题。处理不同场景的切换的方法一般有 3 种。分别是:

  • Build Configurations
  • xcconfig 文件
  • Targets

目前本文只探讨 Build Configurations 的使用,至于 xcconfig 文件和 Targets,以后有机会再分享。

Build Configurations 顾名思义是配置的意思,它是 Xcode 上的一个用来配置各种环境的功能。在新建一个项目后,在 Project->Info 那里就会看到 Configurations。它有 Debug 和 Release 2 个选项。

各种环境

接下来,我们就可以利用 Configurations 配置需要的环境。例如,我们需要一个 DEV 环境用来自测,一个 UAT 环境用来给测试人员以及一个 Production 版本上线。我们在 Build 的时候就需要 Build 3 个版本了。另外,为了方便调试代码,我们还会做一些额外的工作。正如 Xcode 上默认的那 2 个环境(Debug 和 Release)那样,区分好调试的环境和出 Build 的环境。如此算来,就要 2*3 = 6 种环境了。分别是 DebugDEV, DebugUAT, DebugProduction, DEV, UAT, Production。

一般来说,带有 Debug 前缀的环境是方便程序员来调试的。例如自定义的 NSLog,在 Debug 的时候,会在控制台输出各种信息。但出 Build 的时候会禁用掉 NSLog,毕竟那也会影响一丢丢性能的。

步骤

配置环境变量的步骤比较简单:

  1. PROJECT –> Info –> Configurations 点击“+”按钮,将会看到 Duplicate “Debug” Configuration 和 Duplicate “Release” Configuration 2 个选项;

  2. 这 2 个选项对应调试环境和出 Build 的环境,所以我们需要分别对 DebugRelease 复制出 DEV, UAT, Production 这 3 个环境变量。即 Debug 下复制出 DebugDEV, DebugUAT, DebugProduction。Release 复制出 DEV, UAT, Production;

  3. TARGETS –> Build Settings 那里找到 Preprocessor Macros,系一些宏定义,方便区分各种环境。

CocoaPods

需要注意的是,如果你的项目中有用到 CocoaPods,那么在设置完后就需要运行一下 pod install 命令。

一般情况下做到这里,一个简易的可控环境变量就完成了。需要 Build app 的时候,只需要到 Edit Scheme -> Archive -> Build Configuration 中选择好对应的环境就可以了。

结合 Scheme

我们可以通过 Scheme 与 Build Configurations 结合使用,达到更方便切换环境的目的。

方法很简单。在 Scheme 那里选中 New Scheme 并输入名字。本文定义了 DEV, UAT 和 Release 的环境。所以对应的 Scheme 名字也遵循这个规律。可以在项目名加上前缀或后缀,如 ProjectDEV。

接着就是 Edit Scheme,在 Edit Scheme 页面配置好对应的环境。如在 ProjectDEV 的 Scheme 里面,Run 选项选择 DebugDev,Archive 那里选择 DEV。选好对应的环境后,就大功告成了。

想要换一个环境直接选中对应的选项就可以 了。想要出 UAT 的 Build,选中 ProjectUAT 后直接 Archive 就可以了。现在是一个 Scheme 对应一个环境。比原来需要进入 Scheme 选对应的环境方便多了。

总结

利用 Build Configurations 配置环境变量相对于其他的方法有着如下优点:

  1. 操作简单容易,不需要通过代码来区分环境,相对于 xcconfig 文件,这一点上,容易理解。
  2. 对项目影响比较小。通过 Targets 来区分环境的一个缺点就是:复制一个 Targets 就相当于复制了整个项目,有点用牛刀的感觉。另外的一点就是,以后添加资源文件等,都需要确定这些资源文件都要支持到当前这个 Targets。而 Build Configurations 则不需要这些考虑。