这段时间一直忙着版本迭代前的测试和bug修复,突然有个朋友问我怎么能方便快速的在APP里面直接切换运行的环境。因为每次给到测试人员打两个包再分别安装真的很麻烦,除去麻烦不说,要同时在一个设备中安装测试版和正式版两个软件的话同一个bundleID还不行,你得去修改,改完以后,oops,推送不能用了吧,分享啥的不能用了吧,凡是涉及到bundleID相关的服务都挂了吧,那尼玛还测个毛线。。。
据说小姐姐上网百度了还有很多种很高大上的办法,可是一看步骤,小姐姐怂了。太复杂了,臣妾做不到啊。要知道,小姐姐可是出了名的会偷懒啊,那咋整,就慢慢看吧。
首先在pch中写上这段代码,别问我为什么,具体用到的时候就知道省力气了。
#define BASEURL [[NSUserDefaults standardUserDefaults] objectForKey:@"BASEURL"] ? [[NSUserDefaults standardUserDefaults] objectForKey:@"BASEURL"] : nil
接下来在APPDelegate的
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法中写入
#if DEBUG
[[NSUserDefaults standardUserDefaults] setValue:@"https://***.net" forKey:@"BASEURL"];
#else
[[NSUserDefaults standardUserDefaults] setValue:@"https://***.com" forKey:@"BASEURL"];
#endif
然后在你需要切换环境的页面自己写一个button,小姐姐写的是简陋了一点,不过胜在好使。注意一定不能让正式环境的APP也有这个按钮啊,要不然闯祸了小姐姐一定不会负责的。
#if DEBUG
UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 20, 100, 50)];
button.backgroundColor = [UIColor redColor];
[button setTitle:@"测试环境" forState:UIControlStateNormal];
[button addTarget:self action:@selector(changeEnviorment:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button];
#else
#endif
最后就是方法的实现了,别问我为什么要把你存在本地跟一切登录状态相关的状态清空,小姐姐拒绝回答。
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
// 清空token信息
[userDefaults setObject:nil forKey:@"Token"];
[[NSNotificationCenter defaultCenter]
// 购物车角标清除
postNotificationName:BuyCountDidChangeNotification object:nil];
changeBtn.selected = !changeBtn.selected;
if (changeBtn.selected) {
// 选中正式环境
changeBtn.backgroundColor = [UIColor greenColor];
[changeBtn setTitle:@"正式环境" forState:UIControlStateNormal];
[[NSUserDefaults standardUserDefaults] setValue:@"https://***.com" forKey:@"BASEURL"];
}else {
changeBtn.backgroundColor = [UIColor redColor];
[changeBtn setTitle:@"测试环境" forState:UIControlStateNormal];
[[NSUserDefaults standardUserDefaults] setValue:@"https://***.net" forKey:@"BASEURL"];
}
对了,最后提醒下,只需要刷新下界面,你会发现所有的数据都是对应环境的数据了。恩。如果各位小哥哥们有什么更便捷的方法,还请不吝赐教。