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

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

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()];

 

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值