为iOS应用程序设置调试、分期和发布等环境
在开发iOS应用程序时,我们很可能要开发应用的不同阶段(如调试、测试和发布)设置多个构建环境。
Xcode已经为我们提供了相关的工具。在本文中,我们将了解如何管理这些环境的不同配置,以及如何从代码访问它们。
我们开始吧。
默认的Xcode项目配置
当我们第一次创建Xcode project,它会自动创建一个 App Target,两个 test target, 一个 scheme 和 两个关于 Debug 和 Release 的配置。
这已经很好了。为了增加更多环境,并设置它们,我们先要了解 Xcode 中的几个概念。
什么是 Xcode targets 和 scheme
从 Xcode project 开始。一个 Xcode project 包含很多代码文件,资源和信息,用于构建项目。一个 project 可以是 iOS App 的 debug 或 release 版本。
Project 又包含了一个或者多个 target。一个 Xcode target 指定如何构建一个项目。构建产品的说明就是 build settings 和 build phases。一个项目为所有它的 targets 定义了默认的 build setting。每个 target 可以改写这些默认的 setting。
一个 Xcode scheme 定义了在执行构建、运行、测试或配置文件等操作时会发生什么。例如我们构建app时所使用的构建配置。
添加一个新的配置
因为 Xcode 已经为我们创建了Debug 和Release配置,我只需要再创建一个。点击 + 按钮,选择需要复制哪个已存在的配置。
我们就选择Debug配置,重命名为Staging或Testing。
添加schemes
下一步,为每个配置添加一个scheme,以便在Xcode中运行构建或测试操作时能够在它们之间快速切换。
然后选择Manage schemes,可以重命名已存在的 schemes 和添加新的。
在例子中,重新为存在的命名为ExampleApp Debug,并且再创建两个,分别为ExampleApp Staging 和 ExampleApp Release。
现在,我们就可以去每个 scheme 中配置它们对应的 Build Configuration。
设置 build settings
通过配置设置,我们现在可以在构建设置中使用它们。每个构建设置可以为每个配置具有不同的值。
例如,如果我们每个配置需要不同的应用程序 bundle identifiers,我们只需要更改每个配置的值。
也可以通过同样的方式设置app 的图标和名称。
自定义的 building settings
此外,我们可以通过添加带有+按钮来为每个配置定义我们自己的构建设置。
如上所述,我们定义了一个名为API_URL的自定义构建设置,因此我们能够为每种配置使用不同的API端点。
在代码中使用设置
如果想在代码中使用我们上一步自定义的设置,需要在 Info.plist中创建相关的值。
现在就可以在代码中获取配置的值了。
Bundle.main.object(forInfoDictionaryKey: "API_URL")
这只是一个基本的使用,通过这种方式,我们可以增加很多需要的配置。
我们还可以在代码中添加构建配置的表示形式,例如,仅能够为某些环境激活某些功能,或直接从代码管理这些值。 就像下边这样。
struct BuildConfiguration {
enum Environment: String {
case debug = "Debug"
case staging = "Staging"
case release = "Release"
}
let environment: Environment
init() {
environment = Environment(rawValue: Bundle.main.object(forInfoDictionaryKey: "Environment") as! String)!
}
}
Xcode 配置文件
除了以上方法之外,我们可以使用Xcode配置文件来实现相同的结果。 如果您想了解有关它们的更多信息,请查看文章《处理Xcode配置文件》。
翻译来源:Managing different iOS build configurations in Xcode,作者:@Natascha Fadeeva