使用 .xcconfig files 管理不同的iOS 构建环境
在上篇文章[翻译]在Xcode中管理不同的iOS构建配置中,我们使用 build settings 选项卡来设置不同的构建环境,阅读这篇文章之前,建议先去了解一下之前的内容。
这篇文章中,则使用一种替代方式,达到同样的效果,使用 Xcode 的配置文件 .xcconfig。
开始吧!
创建配置文件
首先,创建一个.xcconfig文件。使用 Xcode 创建时,会默认提供一个模版名称 Configuration Setting File。
每个文件中,都是构建的配置。在这里,使用的是 Debug.xcconfig, Staging.xcconfig, 和 Release.xcconfig.
这些文件默认都是空的。
使用构建配置内容编辑这些文件
为了使用每个.xcconfig文件的配置内容,需要打开Xcode 的 project 的 Info选项卡,并且设置相应target 的 Based on Configuration File。
就像图上展示的,Xcode 提供了我们创建的配置文件列表。
为配置文件添加内容
下一步就是为我们创建的配置文件添加内容,例如为不同的环境,加入不同的Api Url值。
Debug.xcconfig
API_URL = https://dev.api.com
Staging.xcconfig
API_URL = https://staging.api.com
Release.xcconfig
API_URL = https://api.com
看着好像不太正常,但确实不在配置文件中使用引号包围的字符串格式。
更新:在处理xcconfig文件时,由于http://中的双斜杠,一个常见的问题是无法编写URL,该斜杠被解释为注释。变通办法是使用https:/$()/dev.api.com。
在代码中使用设置
如果想在代码中使用我们上一步自定义的设置,需要在 Info.plist中创建相关的值。
现在就可以在代码中获取配置的值了。
Bundle.main.object(forInfoDictionaryKey: "API_URL")
使用继承
为了避免冗余,有可能将值从项目继承到目标级别。比如说,我们希望为每个环境使用不同的捆绑标识符,这样它们就不会在构建时相互覆盖。
为此,我们创建一个配置文件,例如名为Common.xcconfig,并将其与project连接。
在 Common.xcconfig 文件中加入如下内容,
BUNDLE_IDENTIFIER = com.tanaschita.exampleapp
然后就可以在我们的配置文件中使用继承$(inherited):
Debug.xcconfig
#include "Common.xcconfig"
BUNDLE_IDENTIFIER = $(inherited).debug
Staging.xcconfig
#include "Common.xcconfig"
BUNDLE_IDENTIFIER = $(inherited).staging
这是避免在不同文件中重复相同值的好方法。我们还可以使用$(VARIABLE_NAME)引用新值中定义的值。
总结
使用.xcconfig文件最初需要几个额外的步骤来设置,但特别是当自定义构建设置列表不断增加时,在单独的文件中管理它们可能更容易。
.xcconfig文件还允许我们独立于Xcode管理构建设置。它们可以与任何编辑器一起修改,可重用,更友好地与源代码控制一起使用。
翻译来源: Working with Xcode configuration files,作者:@Natascha Fadeeva