美文网首页iOS configurations
使用Build Configuration配置多环境以及踩过的坑

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

作者: 蔚尼 | 来源:发表于2018-04-09 14:50 被阅读438次

            对于很多大牛来说,使用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时候给用户用的效果最接近。

    增加configation前 新增的AdHoc

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

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

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

    1.新增宏定义

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

    增加宏定义前

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

    新增AdHoc=1后

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

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

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

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

    为不同环境设置名称

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

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

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

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

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

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

    五.运用Scheme

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

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

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

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

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

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

    下面我们看如何完成:

    1.新增scheme

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

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

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

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

    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。

    新增AppBundleId属性 修改info.plist里面对应的Bundle Id bundleid为debug对应的com.configuration.debug

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

    修改scheme1的Run为AdHoc 显示的还是com.configuration.debug

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

    com.configuration.test了。

    刷新后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,打包就报错了。很多文件都被爆有问题。

    Release下增加宏定义Release=1 ConfigurationTest的Archive模式对应的是Release ConfigurationTest下打包报错

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

    Release修改为非Release/release任何一个宏定义

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

    相关文章

      网友评论

        本文标题:使用Build Configuration配置多环境以及踩过的坑

        本文链接:https://www.haomeiwen.com/subject/ykpkhftx.html