使用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时候给用户用的效果最接近。

增加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配置多环境以外,发现所有的内容,真正实际去操作了才会发现问题所在。如果我有理解不到位的地方,还希望大家多多指教!

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

推荐阅读更多精彩内容