如何使用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的实际运用,开发者可以轻松管理构建变量。推荐在项目中大胆使用。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260

推荐阅读更多精彩内容