iOS Configuration配合网络库使环境切换更便捷

目的

由于开发需求及测试都通常需要开发并且测试debug、qa、uat、test、release等不同阶段不同环境的情况。原工程需要能切换不同的环境进行测试:通用,独立,验证,生产。Test环境,UAT(User Acceptance Test)用户验收测试环境,Release环境等等。当需要开发打多个包的时候,一般常见做法就是直接代码里面修改环境变量,改完之后Archive一下就打包了。当然这种做法很正确,只不过不是很优雅很高效。

方案

之前项目做法通常是写一个切换环境的页面,手动切换读取本地的plist,从plist读取对应环境不同的url。这种方法相对维护麻烦。

参考资料发现新安装的应用将会覆盖当前安装的应用程序,我们需要为每个环境定义不同的AppID,这可以通过User-Defined来设置。这种方式会简洁很多。

1.创建Build Configuration

Project里面找到Configuration,然后选择添加,这里新加一个Configuration。系统默认是2个,一个Debug,一个Release。Release和Debug的区别是,Release是不能调试程序,因为默认是屏蔽了可调试的一些参数,而且Release编译时有做编译优化,会比用Debug打包出来的体积更小一点。点击加号,添加不同的编译配置如Debug、QA、UAT、Release。

WechatIMG74.png

完成后可以看到项目已经有多个 Configuration了。

2.pod项目需要做如下操作

项目里面用了Pod,打开配置是会看到如下信息


WechatIMG75.png

需要执行

pod install  

这时候pod安装完成之后会自动生成xcconfig文件,里面有一些pod的配置

3.新建Scheme

新建的Scheme,在运行的时候可以选择我们运行的环境,如:Debug、QA、UAT、Released等


WeChat122fc3f32976a80c384415413b5dacd7.png

然后点击选择他的运行环境,在我们新添加的项目中改变Run模式和Archive模式,把他们都改为Debug。


WechatIMG76.png

4. 新建User-defined Build Settings

在Project的Build Settings中添加Add User-Defined Setting
我们知道,在plist中我们可以通过$(PRODUCT_BUNDLE_IDENTIFIER)来查找Bundle identifier,我们可以自己设置路径,然他查找Bundle identifier


WechatIMG77.png

在plist文件中修改value值便于匹配自定义的值


WechatIMG79 1.png

5.配置和获取环境变量

找到Preprocessor Macros,可以加一些环境变量的宏定义来标识符,根据不同的环境预先制定不同定义的宏用于在网络库上区分不同环境。

WechatIMG80.png

6.配合网路库区分不同环境

   NSString *urlString = [request requestURL];
   NSDictionary *params = [self constructRequestParams:request]; // 构造参数
   urlString = [NSString stringWithFormat:@"%@%@",BaseURLString, urlString];
   if ([CCNetworkConfig sharedInstance].isShowDebugLog)
      {
          NSLog(@"\n\n---------------request start 发起请求报文---------------------------\n\n 请求的地址为\n :%@\n 加密前请求报文是:\n %@\n----------------request end  发起请求报文------------------\n\n",urlString,params);
      }
   AFHTTPSessionManager *manager = [self sharedHttpSessionManager];
   manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",@"text/html", nil];
   manager.responseSerializer = [AFHTTPResponseSerializer serializer];
   [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
   __weak typeof(self) weakSelf = self;
   NSURLSessionDataTask *task = [manager POST:urlString
                                   parameters:params
                                     progress:^(NSProgress * _Nonnull downloadProgress){ }
                                      success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject)
   {

       [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
       NSString *resopnseString = [[NSString alloc] initWithData:responseObject
                                                        encoding:NSUTF8StringEncoding];
       NSData *jsonData = [resopnseString dataUsingEncoding:NSUTF8StringEncoding];
       NSDictionary *content = [NSJSONSerialization JSONObjectWithData:jsonData
                                                               options:NSJSONReadingMutableContainers
                                                                 error:nil];
//访问接口地址

//@"https://app.xxxxx.com/"//正式环境

//@"http://dev.xxxxx.com/"//开发环境

//@"https://qa.xxxxx.com/"//测试环境

#define CCInfoPlistPath [[NSBundle mainBundle] pathForResource:@"Info" ofType:@"plist"]

#define CCInfoPlistPathGetDic [NSMutableDictionary dictionaryWithContentsOfFile:CCInfoPlistPath]

#define CCInfoPlistGetValue(key) [CCInfoPlistPathGetDic objectForKey:key]

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

推荐阅读更多精彩内容