版本提测阶段每次都需要打各种环境的安装包,打一个包需要5~10分钟,更何况我们有测试、预发、正式三个环境,光打包就要浪费半个小时,于是就想在实现应用内环境切换功能让测试人员自助切换
常规环境切换,需要我们手动修改HOST_TYPE
然后打包,代码如下
#define HOST_TYPE 0 //0开发 1灰度 2正式
#if HOST_TYPE == 0
#define kHOSTURL @"测试地址"
#elif HOST_TYPE == 1
#define kHOSTURL @"预发地址"
#elif HOST_TYPE == 2
#define kHOSTURL @"正式地址"
#endif
需求说明
- 可以随意切换环境状态
- 支持自定义环境地址
- 支持关闭切换环境功能
- 恢复默认设置
实现核心
WTAPIManager.h
#import <Foundation/Foundation.h>
typedef NS_ENUM(NSInteger, WTHostType) {
WTHostTypeDev = 0, // 开发
WTHostTypeGrayscale, // 灰度
WTHostTypeRelease, // 正式
IRCHostTypeDIY // 自定义
};
#define HOST_TYPE 0 //0开发 1灰度 2正式
#define HOSTURLSTRING [WTAPIManager hostUrl]
NS_ASSUME_NONNULL_BEGIN
@interface WTAPIManager : NSObject
// 环境地址
+ (NSString *)hostUrl;
// 环境地址类型
+ (void)saveHostType:(WTHostType)type;
// 环境地址类型
+ (WTHostType)hostType;
// 保存自定义地址
+ (void)saveDiyHostUrl:(NSString *)hostUrl;
// 获取自定义地址
+ (NSString *)diyHostUrl;
// 自定义模式开关(开启定义后,切换请求地址才能使用)
+ (void)saveEnabled:(BOOL)on;
// 是否开启自定义(开启定义后,切换请求地址才能使用)
+ (BOOL)isEnabled;
// 恢复默认设置(关闭自定义功能)
+ (void)resetData;
@end
NS_ASSUME_NONNULL_END
WTAPIManager.m
#import "WTAPIManager.h"
static NSString* const kHostTypeKey = @"hostTypeKey";
static NSString* const kDiyUrlKey = @"diyUrlKey";
static NSString* const kEnabled = @"kEnabled";
@implementation WTAPIManager
+ (NSString *)hostUrl {
NSInteger type = [self hostType];
if (type == WTHostTypeDev) {
return @"测试地址";
} else if (type == WTHostTypeGrayscale) {
return @"预发地址";
} else if (type == WTHostTypeRelease) {
return @"正式地址";
} else if (type == IRCHostTypeDIY) {
return [self diyHostUrl];
}
return @"";
}
+ (void)saveHostType:(WTHostType)type {
[[NSUserDefaults standardUserDefaults] setInteger:type forKey:kHostTypeKey];
[[NSUserDefaults standardUserDefaults] synchronize];
}
+ (WTHostType)hostType {
// 是否开启自定义切换
if ([self isEnabled]) {
return [[NSUserDefaults standardUserDefaults] integerForKey:kHostTypeKey];
}
return HOST_TYPE;
}
// 保存自定义地址
+ (void)saveDiyHostUrl:(NSString *)hostUrl {
[[NSUserDefaults standardUserDefaults] setObject:hostUrl forKey:kDiyUrlKey];
[[NSUserDefaults standardUserDefaults] synchronize];
}
// 获取自定义地址
+ (NSString *)diyHostUrl {
return [[NSUserDefaults standardUserDefaults] objectForKey:kDiyUrlKey];
}
// 恢复默认设置
+ (void)resetData {
[[NSUserDefaults standardUserDefaults] removeObjectForKey:kEnabled];
[[NSUserDefaults standardUserDefaults] removeObjectForKey:kHostTypeKey];
[[NSUserDefaults standardUserDefaults] removeObjectForKey:kDiyUrlKey];
}
// 自定义模式开关
+ (void)saveEnabled:(BOOL)on {
[[NSUserDefaults standardUserDefaults] setBool:on forKey:kEnabled];
[[NSUserDefaults standardUserDefaults] synchronize];
}
// 是否开启自定义
+ (BOOL)isEnabled {
return [[NSUserDefaults standardUserDefaults] boolForKey:kEnabled];
}
@end
如何使用
// 打开切换环境开发
[WTAPIManager saveEnabled:YES];
// 切换为正式环境
[WTAPIManager saveHostType:WTHostTypeRelease];
// 获取环境地址
NSLog(@"当前环境地址:%@", HOSTURLSTRING);
// 切换为自定义环境地址
[WTAPIManager saveHostType:IRCHostTypeDIY];
// 设置自定义环境地址
[WTAPIManager saveDiyHostUrl:@"自定义url"];
// 获取环境地址
NSLog(@"当前环境地址:%@", HOSTURLSTRING);
// 恢复默认设置
[WTAPIManager resetData];
// 关闭环境,保留自定义参数
// [WTAPIManager saveEnabled:NO];
// 获取环境地址
NSLog(@"当前环境地址:%@", HOSTURLSTRING);
我的切换环境功能没有直接暴露出来,测试人员可以通过扫码进入我提前写好的页面切换环境,界面和扫码功能就不提供了自行补全即可
上线后关闭切换环境功能
为防止用户使用此功能,只有打包时HOST_TYPE
为开发环境,才弹出切换环境界面,上线时我们会将HOST_TYPE
设置为发布环境
if (HOST_TYPE == 0) {
// 去处理切换环境代码
[WTAPIManager saveHostType:WTHostTypeRelease];
}
总结
打一个测试包,就可以切换三种环境就是舒爽省事,再也不用担心下班前测试阿姨给我要正式环境安装包了(哇哈哈)
网友评论