使用配置切换环境

我遇到的最好的解决方案是配置 ,也称为构建配置 。 配置是在项目级别定义的,这意味着您可以将其用于项目的每个目标,并利用方案来定义特定构建的配置。

在本教程中,我将向您展示如何设置一个定义几种配置的项目。 结合使用方案,配置使您可以轻松地在环境之间切换。

项目设置

打开Xcode并基于Single View Application模板创建一个新项目。

添加配置

每个Xcode项目都包含两个默认配置, DebugRelease 。 对于某些项目,这些配置就足够了。 但是,暂时假设您正在构建与Web服务交互的应用程序。 该Web服务定义了两个环境, StagingProduction 。 配置可以帮助您轻松地在这些环境之间快速切换。

在Xcode中打开项目后,在左侧的项目浏览器中选择项目。 配置是在项目级别定义的。 要检查配置列表,请打开顶部的“ 信息”选项卡,然后找到“ 配置”部分。

点击+按钮并使用Duplicate“ Debug” Configuration添加配置。给新名称Staging Debug,相同 通过选择重复的“调试”配置来使用Release版本,名称是Production Release。

为了确保在运行时可以访问配置,我们将其存储在目标的Info.plist中 。 这很容易做到。 在左侧的Project Navigator中 ,选择Info.plist ,单击鼠标右键,然后选择Add Row创建一个新的键值对。 将密钥设置为Configuration ,并将值设置为$(CONFIGURATION)

可通过环境变量CONFIGURATION访问在构建过程中使用的配置。 这使我们很容易在构建过程中动态更新目标的Info.plist

定义方案

通过将当前配置存储在目标的Info.plist中 ,现在可以添加轻松切换环境的功能了。 为此,我们为每个配置添加了一个方案。 点击左上方的活动方案,然后选择管理方案

点击+按钮并添加名为StagingDebug,ProductionRelease的方案 不需要与配置同名。 您可以使用其他名称。

然后通过从下拉菜单中选择配置为方案分配新配置。

加载配置详细信息

有几种方法可以显示或加载与特定配置或环境相关的详细信息。 您可以将它们存储在JSON文件中并将此文件包含在应用程序捆绑包中,也可以将它们存储在属性列表中以便于访问。 缺点是其他人可以通过从App Store下载应用程序来轻松访问应用程序捆绑包的内容。 如果数据不是关键数据,那可能很好。 如果环境详细信息包括敏感数据(例如令牌和API密钥),那么您需要寻找更安全的解决方案。

我想以替代解决方案结束本教程。 将新文件添加到Xcode项目中,并将其命名为Configuration.swift 。 我们首先声明一个枚举“环境”,该枚举定义了应用程序可能的环境。 对于每个环境变量,我们声明一个计算属性。 为每个计算属性返回的值取决于当前环境StagingDebugProductionRelease

我们还定义了一个结构Configuration。 Configuration结构声明一个惰性的存储属性,即Environment类型的环境。 实现很简单。 我们从目标的Info.plist加载配置。 请记住,我们会动态更新配置并将其存储在目标的Info.plist中 。 然后,我们使用一种简单的技术来解析配置名称并初始化相应的Environment实例。

Configuration.swift的完整文件

实作

打开ViewController.swift并更新viewDidLoad(),如下所示。

选择顶部的StagingDebug方案,然后在模拟器或物理设备上运行该应用程序。 这就是Xcode中的输出结果。

您可以从下面的链接下载教程的源文件

macvinod /配置
大多数移动应用程序都连接到云中的一项或多项服务。 您连接到的服务可能会有所不同…… github.com