如何使用Xcode Configuration 搭建多环境支持

在APP的开发过程中,我们经常会遇到需要多环境支持
开发环境:开发者日常开发的环境,完成功能模块
测试环境:用于测试,功能验证
生产环境:只包含通过了测试并验证过的功能模块,它是最终提交到 App Store 供终端用户使用的版本。

或是同时支持构建免费版 -- 收费版。

如何管理多个构建多环境支持?

1、创建不同的targets,每个target使用不同的Info.plist,每选择一个target,就会使用不同的Info.plist,因此可以此设置变量,如token或是不同环境的URL。

也可以使用Bundle Identifiers来实现,定义不同的preprocessor macros控制各个代码块的编译条件。
可查阅How to Use Xcode Targets to Manage Development and Production Builds

2、构建配置放到.xcconfig文件中,并且在project的info的configurations内引用它。然后可以通过简单更改scheme来构建不同版本的APP,这也是本文的重点。

建立Build Configuration

首先,Xcode创建一个项目。或者是你想要从现有的项目开始也可以,应该会看到Xcode已经自动提供了两个不同的配置:Debug和Release,你可能之前没有注意到,你可以通过不同的配置,分別创建一个用于debug,一个用于release的版本。

image.png

现在我们要创建一个新的Configuration,命名Staging。点击配置列表下面的“+”,选择Duplicate Debug configuration,因为从Debug配置中删除我们不需要的东西,比在Release配置放回所需的东西容易。
image.png

在刚创建的第一个单元格中,填写Staging,完成后现在有三个级别的配置。

image.png

使用Xcode配置文件(.xcconfig)

创建一个.xcconfig文件,在弹出的窗口中选择Configurations Settings File。 在next中,將其命名為“Staging”,并确保targets复选框全部都是未选取状态,因为我们不希望将其包含在APP的bundle中。

image.png

现在切换到project --> info的tab中,在Configurations展开列表,并且从下拉框中选择“Staging”。可以Debug、Release重复该流程。
image.png

image.png

更改构建配置(Changing the Build Information)

Xcode的配置文件设置,就可以非常直接的改变配置內容。假设你想要改变构建信息,如App Name、version,bundle identifier以及每个版本的bundle version,可以像这样配置每个.xcconfig文件:(xcconfig 概念及其作用,xcconfig的key-value参考)
Debug.xcconfig:

IS_APP_NAME = Donate Debug
IS_APP_VERSION = 0.3
IS_APP_BUNDLE_ID = com.intensifystudio.DonateDebug

Staging.xcconfig:

IS_APP_NAME = Donate Staging
IS_APP_VERSION = 0.2
IS_APP_BUNDLE_ID = com.intensifystudio.DonateStaging

Release.xcconfig:

IS_APP_NAME = Donate
IS_APP_VERSION = 0.1
IS_APP_BUNDLE_ID = com.intensifystudio.DonateRelease

你可以在project settings、info.plist、entitlement files中使用你的配置变量(configuration variables)。在本文中,我们将在info.plist中使用它改变app名字、app版本和bundle identifier,如下所示:

image.png

IS作为前缀,可修改成自己喜欢的前缀。

更改App Icon

使用Xcode配置文件,可以轻松配置不同版本的app icon。 参考下列做法编辑每个.xcconfig文件:

Debug.xcconfig:

IS_APP_ICON = AppIconDebug

Staging.xcconfig:

IS_APP_ICON = AppIconStaging

Release.xcconfig:

IS_APP_ICON = AppIconRelease

切换到Build Settings,将AppIcon替换为${IS_APP_ICON}

image.png

然后在“Assets.xcassets”中创建几套iOS App Icon,并重命名为上面代码中配置的名字。
xcode-new-app-icon.gif

接着将icon拖进去,就大功告成了!

如何在代码中存取配置变量

Xcode配置文件非常强大,它可以用于其他设置。例如,如果不同版本的API密钥和服务端API不同,则可在每个.xcconfig文件中指定:
Debug.xcconfig:

SERVER_URL = http:\/\/api.intensifystudio.com/development
CONSUMER_KEY = ck_a57e4fa2e14c12ae3f400371cf2951ec3dea5_dev
CONSUMER_SECRET = cs_c847caa35ce1041e9c69d239141f13f63bb22b_dev

Staging.xcconfig:

BACKEND_URL = http:\/\/api.intensifystudio.com/staging
CONSUMER_KEY = ck_a57e4fa2e14c12f400371cf2951ec3dea5_staging
CONSUMER_SECRET = cs_c847caa35ce1041e9c69d239141f13f63bb22b_staging

Release.xcconfig:

BACKEND_URL = http:\/\/api.intensifystudio.com/
CONSUMER_KEY = ck_a57e4fa2e14c12f400371cf2951ec3dea5
CONSUMER_SECRET = cs_c847caa35ce1041e9c69d239141f1f63bb22b

接下來,通创建新的栏位,将这些变量添加到Info.plist

image.png

你就可以使用下面的代码在运行时从plist文件读取所需的值:

func infoForKey(_ key: String) -> String? {
        return (Bundle.main.infoDictionary?[key] as? String)?
            .replacingOccurrences(of: "\\", with: "")
 }

在不同的构建配置之间切换

点击顶部的scheme即可更改scheme,选择设置好的build configuration。


switching-between-flavors.gif

总结

Xcode的Configuration file是配置不同build configuration的实际运用,开发者可以轻松管理构建变量。推荐在项目中大胆使用。

你可能感兴趣的:(如何使用Xcode Configuration 搭建多环境支持)