[翻译]在Xcode中管理不同的iOS构建配置

4,599 阅读3分钟

为iOS应用程序设置调试、分期和发布等环境

在开发iOS应用程序时,我们很可能要开发应用的不同阶段(如调试、测试和发布)设置多个构建环境。

Xcode已经为我们提供了相关的工具。在本文中,我们将了解如何管理这些环境的不同配置,以及如何从代码访问它们。

我们开始吧。

默认的Xcode项目配置

当我们第一次创建Xcode project,它会自动创建一个 App Target,两个 test target, 一个 scheme 和 两个关于 Debug 和 Release 的配置。

111

这已经很好了。为了增加更多环境,并设置它们,我们先要了解 Xcode 中的几个概念。

什么是 Xcode targets 和 scheme

从 Xcode project 开始。一个 Xcode project 包含很多代码文件,资源和信息,用于构建项目。一个 project 可以是 iOS App 的 debug 或 release 版本。

Project 又包含了一个或者多个 target。一个 Xcode target 指定如何构建一个项目。构建产品的说明就是 build settingsbuild phases。一个项目为所有它的 targets 定义了默认的 build setting。每个 target 可以改写这些默认的 setting。

一个 Xcode scheme 定义了在执行构建、运行、测试或配置文件等操作时会发生什么。例如我们构建app时所使用的构建配置。

添加一个新的配置

因为 Xcode 已经为我们创建了DebugRelease配置,我只需要再创建一个。点击 + 按钮,选择需要复制哪个已存在的配置。

222

我们就选择Debug配置,重命名为StagingTesting

添加schemes

下一步,为每个配置添加一个scheme,以便在Xcode中运行构建或测试操作时能够在它们之间快速切换。

333

然后选择Manage schemes,可以重命名已存在的 schemes 和添加新的。

444

在例子中,重新为存在的命名为ExampleApp Debug,并且再创建两个,分别为ExampleApp StagingExampleApp Release

现在,我们就可以去每个 scheme 中配置它们对应的 Build Configuration。

555

设置 build settings

通过配置设置,我们现在可以在构建设置中使用它们。每个构建设置可以为每个配置具有不同的值。

例如,如果我们每个配置需要不同的应用程序 bundle identifiers,我们只需要更改每个配置的值。

666

也可以通过同样的方式设置app 的图标和名称。

自定义的 building settings

此外,我们可以通过添加带有+按钮来为每个配置定义我们自己的构建设置。

777

如上所述,我们定义了一个名为API_URL的自定义构建设置,因此我们能够为每种配置使用不同的API端点。

在代码中使用设置

如果想在代码中使用我们上一步自定义的设置,需要在 Info.plist中创建相关的值。

888

现在就可以在代码中获取配置的值了。

    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