Xcode 使用 Configuration 来配置不同的项目环境

很多项目在开发时都会经常在开发环境和生产环境之间切换,切换随之伴来的还有比如更换 App 名称、Bundle identitier、服务端接口地址等等相关参数和属性,这个时候我们就可以利用 Xcode 提供的 Configuration 来配置不同的环境,从而进行快速切换、编译等等一系列操作。

每个工程默认会有两个Build Configure,即debug和release,我们就在这里做文章,增加一个releaseBeta版本,用来打包内部测试环境版本。QDaily在这里主要区分了app name,app icon,app bundleId(测试推送),并增加了一个全局的预处理宏BETA,代码中通过BETA标志进行和DEBUG相似的处理

xcode_ configuration_list

注: Xcode 中 Build Settings 的所有项都可以针对不同的 Configuration 设置不同的值

使用不同的环境配置进行调试

定义好不同的环境后,你就可以分别设置 runtestArchive... 这些操作分别使用哪一个 Build Configuration 进行编译,从而可以很轻松得分离开各个配置环境的设置。比如分离不同的服务端开发和正式环境,就可以利用宏定义进行参数区分(参见后文)轻松实现,然后开发的时候需要切换环境测试之类的就可以直接在 Edit Scheme 里修改对应的 Configuration,不用再修改代码。

edit_scheme

切换不同的 Bundle identifier

在 Targets -> Build Settings -> Packaging -> Product Bundle Identifier 中设置不同的值即可。

切换不同的 App Name

如果需要实现根据 Configuration 设定不同的应用显示名称,可以通过增加 User-Define 属性实现,甚至可以直接使用 Product Name,这里说一下前者的设置方法。

在 Targets -> Build Settings 顶部 "+" 按钮弹出菜单中选择 "Add User-Defined Setting" 来增加一项 User-Defined 属性,值可以自己随意设定,名称可以叫 "BUNDLEDISPLAY_NAME",然后在 "xxx-Info.plist" 中的 Bundle display name 项中设置值为 ${BUNDLE_DISPLAY_NAMEAA},搞定!

利用宏定义进行参数区分

如果想在代码中对不同环境进行各自的参数加载或者操作处理,我们可以通过预处理宏来判断,通过给 Configuration 增加宏定义和 #ifdef 预处理命令就可以实现。

比如我们要给一个名为 DebugBeta 的 Configuration 设定加载非正式环境的服务端接口地址,在 Targets -> Build Settings -> Preprocessor Macros 中给 DebugBeta 设定一个特殊标识就行了,比如 "BETASERVERURL=1"。

然后通过预处理代码进行判断就可以实现加载不同的参数项,比如还可以设定一些 SDK 区分正式/开发环境的 Key,做一些非常灵活的操作。

NSString *serverURL;
#ifdef BETASERVERURL
    serverURL = @"http://xxx";
#else
    serverURL = @"http://yyy";
#endif

Cocoapods 可能会遇到的问题

定义好自己的 Configuration 后,再执行 pod install 可能会遇到类似下面的警告信息,这个时候只需要在 Project -> Info -> Configurations 中自定义的配置 'Based on Configuration File' 设为 None 就可以了。

[!] CocoaPods did not set the base configuration of your project because your project already has a custom config set. In order for CocoaPods integration to work at all, please either set the base configurations of the target 项目名 to Pods/Target Support Files/Pods-项目名/Pods-项目名.release.xcconfig or include the Pods/Target Support Files/Pods-项目名/Pods-项目名.release.xcconfig in your build configuration.

创建并配置新的Build Configuration

1、新建

我们主要是测试版需要区分,DEBUG版本并不需要,所以duplicate了release的默认配置。新建完记得改名,下面我已经新建过了,就没有改名那一步了。

1467187036

2、区分app name、bundle Id

所有步骤看图,非常方便,非常简单。
1467187354

3、设置一个预处理宏和编译器标志BETA

具体看下图步骤,增加一个BETA:
1467187656

我们app中现在还没有使用Swift,所以也就没有做swift的设置,如果需要可以去参考顶部的引用链接进行设置。

这样代码里就能直接进行调用了。eg:
1467187790

4、修改releaseBeta的app icon

这里要分两步,先在images.xcassets中新建一个针对beta版本的app icon:
1467188193
我们这里已经建立过了,下一步就不示范了。这里我们把新icon命名为AppIconBeta。

第二步和上面相似,在对应位置上填上我们对新icon的命名就好了:
1467188417

5、其它区分

所有build settings中的选项都可以用Build Configuration来进行区分设置,这里就不一一进行示范了。QDaily只有上面这些做了处理,其它都是通过BETA宏在代码里的操作。

使用 Build Configuration

大多时候,我们都只是在编写release包时候需要对线上和开发环境进行区分,我们只需要修改archive中的scheme就好了:

先选择app target的Edit Scheme。
1467188720
然后在Archive中选择我们新建的那个就好了。
1467188810

关于管理多个 Build Configuration 的一些注意事项

和新建target相比,亲测没有任何注意事项…你只要注意不要把releaseBeta传到appstore就行了。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值