使用Build Configuration配置多环境以及踩过的坑

        对于很多大牛来说,使用Build Configuration配置多环境是so easy,但是小白我最近刚用到项目里面,准备记录一下。有不合适的地方,还希望能多多指教。

        我主要是从这篇文章(https://blog.csdn.net/khlljm/article/details/52293649)学习的,感谢一下作者,我按照自己的理解,改进了一下理解顺序。

        多环境配置可以使用Build Configuration,xcconfig文件,Targets。今天记录的是第一种--利用Build Configuration配置多环境,把发布到appstore的环境和测试、开发环境分开。

一.新增Configation

        在Project--》Info里面我们找到configations。里面已经默认有Debug和Release两个配置了。我们点击+号,Duplicate"Release"Configuration,取名AdHoc。因为原来的Debug我们用来开发时候用,Release用来发布到appstore时用,新增一个用于给测试使用。Release编译时有做编译优化,和发布到appstore时候给用户用的效果最接近。

使用Build Configuration配置多环境以及踩过的坑_第1张图片
增加configation前


使用Build Configuration配置多环境以及踩过的坑_第2张图片
新增的AdHoc

如果使用了cocopods,需要pod update一下。pods下面会新增一个对应的adhoc.xcconfig:


使用Build Configuration配置多环境以及踩过的坑_第3张图片

二.如何为不同的Configuration设置对应的请求路径、Appkey等

我们在开发中经常遇到开发环境和测试环境、线上环境的请求路径不一致。但是我们总不能每次切换环境的时候,手动注释代码切换环境。我们可以使用如下的小方法:

1.新增宏定义

    在Bulid Setting--》Preprocessor Macors下面新增宏定义。Preprocessor Macors下面AdHoc、Debug、Release每行后面对应的可以加上宏定义,在对应的环境里面使用。


使用Build Configuration配置多环境以及踩过的坑_第4张图片
增加宏定义前

我们在Adhoc下新增宏定义AdHoc=1:


使用Build Configuration配置多环境以及踩过的坑_第5张图片
新增AdHoc=1后

2.使用宏定义为不同环境设置请求url

我们在前面设置了宏定义值,在对应的环境里面取到对应的宏定义值的时候,就去执行对应的代码:

使用Build Configuration配置多环境以及踩过的坑_第6张图片

三.如何为不同的Configuration设置对应的App名称/App icon——User-defined Build Settings

       使用完宏定义在代码里面配置相关信息后,我们看看如何配置app名称。在Build settings里面,点击+号---》Add User-Defined Setting,增加一个自定义属性,取名CustomAppName,用于存放不同环境里面app的名称。


使用Build Configuration配置多环境以及踩过的坑_第7张图片


为不同环境设置名称

修改info.plist里面,把读取的名称修改为刚刚设置的CustomAppName:


使用Build Configuration配置多环境以及踩过的坑_第8张图片

        appicon和appname不同的区别是,不需要新增User-Defined Setting,Bulid Settings--》Asset Catalog App Icon Set Name里面设置对应的appicon即可:


使用Build Configuration配置多环境以及踩过的坑_第9张图片


四.如何为不同的Configuration设置对应的Bundle id——PRODUCT_BUNDLE_IDENTIFIER

既然有不同的环境,我们也会有不同的Bundle id。Bulid Settings--》Product Bundle Indentifier。给对应的环境设置对应的Bundle id即可。

使用Build Configuration配置多环境以及踩过的坑_第10张图片

给对应的bundle id选择对应的证书,这样真机调试的时候才不会报错。

打包时候的证书,这里可以不选正确,xcode会在打包时自动选择bundlid对应的证书:


使用Build Configuration配置多环境以及踩过的坑_第11张图片

五.运用Scheme

        前面讲了不同环境下怎么设置请求地址、名称、证书等,现在我们来看怎么切换不同环境运行。

如下图,我是按照下图配置scheme的。

因为在xcode里面。真机/模拟器运行的时候,会执行Run模式下的configation配置;打包的时候会执行Archive模式下的配置。

选择两个里面的任何一个scheme,真机/模拟器就去执行Debug,就是开发环境。

打包给测试的时候,选择scheme1,打出包来就是Archive模式下的Adhoc,就是前面配置的测试环境。

发布到app store的时候,选择scheme2,打出包来就是Archive模式下的Release,就是前面配置的线上环境。


使用Build Configuration配置多环境以及踩过的坑_第12张图片

下面我们看如何完成:

1.新增scheme

选中已有的scheme,复制一份;

使用Build Configuration配置多环境以及踩过的坑_第13张图片
使用Build Configuration配置多环境以及踩过的坑_第14张图片

2.修改scheme名称为scheme1,用于平时真机测试、打包提测。Run模式下选择Debug、Archive模式下选择AdHoc。

使用Build Configuration配置多环境以及踩过的坑_第15张图片

3.原来自带的scheme就不变。用于上传app store。Run模式下选择Debug、Archive模式下选择Release。

使用Build Configuration配置多环境以及踩过的坑_第16张图片

4.把两个sheme的shared都点击上。让其他小伙伴也能看到新增的scheme。

使用Build Configuration配置多环境以及踩过的坑_第17张图片

5.运行、打包,即可看到想要的效果。


六.踩过的坑

1.坑1:为不同的Configuration设置Bundle id使用User-defined Build Settings属性就好。不需要自定义User-defined Build Settings。为什么呢?

我看到有的文章设置bundle id的时候User-defined Build Settings属性。这样每次切换环境的时候,都需要clean,然后再运行,才会识别为新的bundlId。而且真机运行的时候会遇到各种问题。

使用Bulid Settings--》Product Bundle Indentifier来设置不同环境下的bunld id。不需要clean,xcode就会识别为新的bundleid了。

------------------------------------------------------

意思就是,在Build settings--》User-defined Build Settings,新增AppBundleId,再在info.plist里面对应的Bundle Id。选择scheme1,Run模式下设置为debug,此时的General里面的bundleid为 debug对应的com.configuration.debug。


使用Build Configuration配置多环境以及踩过的坑_第18张图片
新增AppBundleId属性


使用Build Configuration配置多环境以及踩过的坑_第19张图片
修改info.plist里面对应的Bundle Id
使用Build Configuration配置多环境以及踩过的坑_第20张图片
bundleid为debug对应的com.configuration.debug

如果把scheme1的Run模式改为AdHoc,使用scheme1运行。General里面的Bundle id应该为com.configuration.test,对吧?但是,我们看,他其实还是com.configuration.debug

使用Build Configuration配置多环境以及踩过的坑_第21张图片
修改scheme1的Run为AdHoc
使用Build Configuration配置多环境以及踩过的坑_第22张图片
显示的还是com.configuration.debug

我clean了一下,点击build settings,再切换回General刷新了一下,发现Bundleid终于变成

com.configuration.test了。

使用Build Configuration配置多环境以及踩过的坑_第23张图片
刷新后bundleid变为com.configuration.test

你认为clean一下就没问题了吗,no no no,真机运行的时候,会发现又报错说证书和Product Bundle Indentifier不一样了。。好吧。。我们最后还是要去改Product Bundle Indentifier。。还不如直接用系统原本设定的Product Bundle Indentifier来控制Bundleid呢。。。

2.坑2:Preprocessor Macros里面的Release设置的宏定义名称不能叫Release/release。不然使用Release打包的时候会失败。

坑是这么来的,我在Release下面设置了一个宏定义名称为Release,模拟器运行成功了。

scheme选择ConfigurationTest,ConfigurationTest的Archive模式对应的是Release,打包就报错了。很多文件都被爆有问题。


使用Build Configuration配置多环境以及踩过的坑_第24张图片
Release下增加宏定义Release=1


使用Build Configuration配置多环境以及踩过的坑_第25张图片
ConfigurationTest的Archive模式对应的是Release
使用Build Configuration配置多环境以及踩过的坑_第26张图片
ConfigurationTest下打包报错

把Release修改为非Release/release任何一个宏定义,就打包成功了。不然使用release打包的时候无法成功。

使用Build Configuration配置多环境以及踩过的坑_第27张图片
Release修改为非Release/release任何一个宏定义


        好啦。就这么多了。这次除了学习使用configation配置多环境以外,发现所有的内容,真正实际去操作了才会发现问题所在。如果我有理解不到位的地方,还希望大家多多指教!

你可能感兴趣的:(使用Build Configuration配置多环境以及踩过的坑)