配置环境变量
本文将介绍如何利用 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,毕竟那也会影响一丢丢性能的。
步骤
配置环境变量的步骤比较简单:
在
PROJECT
–>Info
–>Configurations
点击“+”按钮,将会看到 Duplicate “Debug” Configuration 和 Duplicate “Release” Configuration 2 个选项;这 2 个选项对应调试环境和出 Build 的环境,所以我们需要分别对
Debug
和Release
复制出 DEV, UAT, Production 这 3 个环境变量。即Debug
下复制出 DebugDEV, DebugUAT, DebugProduction。Release
复制出 DEV, UAT, Production;在
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 配置环境变量相对于其他的方法有着如下优点:
- 操作简单容易,不需要通过代码来区分环境,相对于 xcconfig 文件,这一点上,容易理解。
- 对项目影响比较小。通过 Targets 来区分环境的一个缺点就是:复制一个 Targets 就相当于复制了整个项目,有点用牛刀的感觉。另外的一点就是,以后添加资源文件等,都需要确定这些资源文件都要支持到当前这个 Targets。而 Build Configurations 则不需要这些考虑。