iOS工程中开发环境和发布环境的切换

栏目: IOS · 发布时间: 5年前

内容简介:这篇文档主要是解决以下两个在开发时经常遇到的问题:1.在开发时,有一些代码仅在开发时运行,发版时不能运行。比如:测试用的mock数据、自动登录以方便调试应用、在本次上线时不上线的功能等。2.测试人员需要在测试服务器和线上服务器间来回切换,原来经常需要为连接测试服务器和线上服务器打不同的包,测试人员和开发人员都很麻烦。

这篇文档主要是解决以下两个在开发时经常遇到的问题:

1.在开发时,有一些代码仅在开发时运行,发版时不能运行。比如:测试用的mock数据、自动登录以方便调试应用、在本次上线时不上线的功能等。

2.测试人员需要在测试服务器和线上服务器间来回切换,原来经常需要为连接测试服务器和线上服务器打不同的包,测试人员和开发人员都很麻烦。

1、.pch 文件

在.pch文件中增加下面的代码:

#warning发版时注释。发版时只需要注释此一处即可。

#import"TestAppConfig.h"

将和开发时相关的宏定义都放在TestAppConfig.h文件中,在发版时,只需注释#import"TestAppConfig.h"

应用就切换到了发版状态。避免了发版时需逐个关闭测试相关的宏,不容易遗漏。

2、只用于开发时的文件:TestAppConfig.h

此文件中定义的宏全部是仅用于开发的,其内容如下:

#define TEST_APP  1

//线上环境

#define NET_ENVServerTypeOnline

//测试环境

//#define NET_ENV ServerTypeTest

#defineCURRENT_LOGIN_USER_NANE @"lilaping"

#defineCURRENT_LOGIN_USER_PWD @"B.123j.123@"

//在测试状态,自动登录

//#define AUTO_LOGIN1

//其它开发相关的宏…………

其中“TEST_APP”这个宏是必须的,用来在代码中判断当前是否为开发状态,这个宏定义的使用如下:

#ifdef TEST_APP

    //只在开发时运行的代码

#endif

3 、AppDelegate.m文件

在此文件中,如果是开发环境,则在应用启动后,首先显示界面,供用户选择连接测试服务器还是在线服务器。如果是发版,则按正常业务进行。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions {



    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];

    [self.window makeKeyAndVisible];



#ifdef TEST_APP

    SetServerTypeVC*setServerTypeVC = [SetServerTypeVC new];

   [setServerTypeVC showSetupWithTarget:self selector:@selector(showFirstVC)];

    self.window.rootViewController = setServerTypeVC;

#else

    [self showFirstVC];

#endif



    return YES;

}



-(void)showFirstVC{

    LoginVC* vc = [[LoginVC alloc] init];



    self.window.rootViewController = vc;

    [self.window makeKeyAndVisible];

}

4、SetServerTypeVC.m文件。

此文件为用户选择正式服务器还是测试服务器的界面。

5、UrlConfig.h文件

此文件用于配置服务器的地址以及其它公用的参数。服务端相关的公用参数应该尽量都放到此文件中集中管理。

具体内容如下,其它网络参数处理方式相同:

此函数的作用在于,如果是发版状态,则直接返回网络参数,如果是开发状态,则根据用户的选择,返回测试服务器的状态或者正式服务器的状态。

CG_INLINE NSString* getLoginUrl(){

#ifdef TEST_APP

    if(![SetServerTypeVC isSelectOnline]){

        return @"http://www.test.com/cas/";

    }

#endif

    return @"https://www.online.com/cas/";

}

使用时:

NSString* logingURL = [NSString stringWithFormat:@"%@login",getLoginUrl()];

此处将取服务端相关参数由原来的宏定义改成了一个函数。原因在于,在开发环境时,连接那一个服务端是由用户在应用运行后选择的,不是在应用启动前就决定的。如果用宏解决的话,没有找到一个好的可以集中管理网络参数的办法。

包装为一个方法后,虽然多了一次调用,但是便于集中管理网络相关的参数,方便管理。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

高性能JavaScript

高性能JavaScript

【美】Nicholas C. Zakas(尼古拉斯.泽卡斯) / 丁琛 / 电子工业出版社 / 2015-8-1 / 65

如果你使用 JavaScript 构建交互丰富的 Web 应用,那么 JavaScript 代码可能是造成你的Web应用速度变慢的主要原因。《高性能JavaScript》揭示的技术和策略能帮助你在开发过程中消除性能瓶颈。你将会了解如何提升各方面的性能,包括代码的加载、运行、DOM 交互、页面生存周期等。雅虎的前端工程师 Nicholas C. Zakas 和其他五位 JavaScript 专家介绍......一起来看看 《高性能JavaScript》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具