iOS开发--浅入浅出环境变量的配置和使用 -_-?!

1. 前言

1.1 开发中遇到需要来回切换环境或者配置参数的问题

  1. 平时我们做项目开发的时候最常用的就是Debug模式和Release模式了.
  2. 涉及网络请求的时候,服务器最基本的也会有"测试环境地址""正式环境地址".
  3. 当我们有用到三方的一些SDK的时候,需要各种配置参数就更不要说了.比如极光推送是debug模式还是release模式;三方分享登录等,开发的时候可能用的是开发人员自己的账号申请的参数,发布的时候需要改成公司的账号申请的参数等等等...

在项目开发中类似的场景实在有太多,上面所提及情况,相信就算你的公司开发团队再如何不专业也应该是会遇到的.

1.2 手动改动代码解决方式

对于1.1中所提及的问题,我之前一直是手动改代码解决的.比如切换网络环境(以oc代码为例)

  1. 写2个同名的宏,用到哪一个就注释掉另一个
#define BaseUrl @"我是测试服务器地址"
//#define BaseUrl @"我是正式服务器地址"
  1. 或者用宏来判断
#if 1
#define BaseUrl @"我是测试服务器地址"
#else
#define BaseUrl @"我是正式服务器地址"
#endif
  • 这样做的缺点显而易见,每次更换都需要人为的去改动代码.十分耗费精力.而且一般像这样的全局的宏都定义在某个配置.h文件中.而我们又可能将这个.h文件引入到了.pch文件中.所以每一次的更改,Xcode重新编译的时间会很长.很影响项目的开发效率.

  • 终于某一天我受够了这样 low 13 的方式了 -_-* 不在懒惰中爆发就在懒惰中灭亡.难道就没有什么一劳永逸的方法么.每次的手动更改我实在受不啦.

  • 于是在私下抽空充电之余,就有了这篇总结文章.一方面是自己技术点的积累和记录,方便以后自己回顾,另一方面是希望能够给与同样处境的人带去一丝帮助.

2. scheme相关设置

在进入正题之前先说一下scheme这个东西,理论就不说了.我喜欢直接操作和撸代码.当你会用了再回头去看那些理论你才会容易理解,否则用都没用,直接看到那些纯理论的字眼我就,唉呀妈呀脑瓜疼,脑瓜疼,脑瓜疼~~~

2.1 编辑 scheme

开发人员在运行代码的时候需要切换环境,比如Xcode默认是debug模!
式,只有archive时才是默认release的包.如果需要开发编译的时候切成release模式,可以通过编辑scheme来实现


步骤一.png
步骤二.png
步骤三.png

2.2 新建 scheme

切换环境的时候,我们还是需要手动编辑scheme.如果不想这么做.我们可以选择(图步骤二)中下面的那个new schemes选项,新建一个scheme并设置好它的build Configuration.之后的使用只用来回切换scheme就可以了.需要用到哪个环境就选择对应的scheme来cmd + r 就好了.

图一.png

2.3 新建 Build Configuration

  • 在实际开发中我们常常需要区分不同的环境,上面是以最简单的开发与生产环境为例.但实际情况是根据不同公司的开发流程,是会有不同的多个环境,比如有些公司在开发环境和生产环境之间会有一个预发布的流程环境.
  • 这时我们可以自己创建一个
  • oc和swift有些地方不一样,这里分开说明,步骤如下:
2.3.1 如果你是OC项目:
  1. 选中 工程->Project->Info 后,我们可以看到有一栏Configurations


    图二.png

    图中红框部分就是我们的环境,可以看到Debug,Release本来就有的.我们需要新建的话就点击箭头指向的加号+后,一般选则第一个带有debug字眼的那个选项.至于为什么这里不做赘述,请自行了解.

  2. 比如我新建了一个预发布的环境,取名为preRelease


    图三
  3. 这时我们回到2.1中描述的步骤,选中scheme编辑会发现build Configuration中除了之前就有的Debug和Release多了一个preRelease选项


    图四
  4. 然后我们点击工程->Project->Build Setting->Preprocessor Macros查看会发现,多了一个PreRelease选项,这里我们可以定义一些预编译宏处理.后面的DEBUG=0 和 PRERELEASE=1就是我自定义的:


    图五

    在代码中我们就可以这么使用:

#if PRERELEASE
    NSLog(@"预发布版本");
#elif DEBUG
    NSLog(@"开发环境");
#else
    NSLog(@"生产环境");
#endif

更高阶的用法可以涉及 && 和 || 的配合使用,这不是本文重点,请自行充电 ~_~

2.3.2 如果你是swift项目:
  • 除了最后一步不同,其他步骤请参考上文.直接说下最后一步
  • 我们新建好了一个新的Build Configuration后,同样的在Preprocessor Macros中也出现了新的配置选项,如图:


    图六

    但是像oc项目那样设置是没有用的,即使你改掉了PreRelease=1也是没用的.以下代码中的第一个 if 始终不会进入:

        #if PreRelease
            print("PreRelease")
        #elseif DEBUG
            print("DEBUG")
        #else
            print("release")
        #endif
  • 原因是因为swift摒弃了oc那样的不安全预编译宏功能.只保留了部分基本的用法.不过上面的问题还是可以解决的.

  • 点击 工程->Project->Build Setting -> Active Compilation Conditions 如图


    图七

    上图红框的部分可以自己命名,一般写成对应环境名称的大写.这个配置只有Xcode8以上才有.(现在应该没有人还在用低于这个版本的编译器吧-_-).

  • 还有一种配置方式 工程->Project -> build setting -> other swift flags


    图八

    和上面一样,红框部分名字自己取名,不过需要在前面加上-D.

  • 以上两种配置方式根据个人喜好二选一

  • 这样的弄完之后,切换到preRelease环境后上面那段代码的第一个 if 语句就能执行了.

3. xcconfig文件的使用

上面铺垫了那么多,终于进入正题了.下面就来说下xcconfig文件的使用.

正如开篇说的那样,像那些需要视环境而定的一些配置参数.我们可以把他们都定义在xcconfig文件中.然后为每一个环境配置一个xcconfig文件.这样切环境之后,对应的需要更改的数据都会自动更换,省去了开发人员手动修改的步骤.

3.1 如果你是OC项目

3.1.1 xcconfig文件的创建
图九

示例代码中我创建了2个配置文件:


图十
3.1.2 xcconfig文件的关联

创建好了配置文件,接下来就是将其和项目环境关联起来
点击工程 -> Project -> Info -> Configuration

应该是篇幅太长了,后面其实还有很多,发布的时候不知道为什么后面的内容都没了. 准备另开一篇文章了. 妈个鸡 -_-!!
下一篇

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

推荐阅读更多精彩内容