美文网首页日常收录
iOS 应用内切换环境(测试、预发、正式)

iOS 应用内切换环境(测试、预发、正式)

作者: Wynter_Wang | 来源:发表于2020-04-13 11:32 被阅读0次

版本提测阶段每次都需要打各种环境的安装包,打一个包需要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];
}

总结

打一个测试包,就可以切换三种环境就是舒爽省事,再也不用担心下班前测试阿姨给我要正式环境安装包了(哇哈哈)

相关文章

  • iOS 应用内切换环境(测试、预发、正式)

    版本提测阶段每次都需要打各种环境的安装包,打一个包需要5~10分钟,更何况我们有测试、预发、正式三个环境,光打包就...

  • Android动态打包+传参方法

    需求背景 通常我们的应用都会有开发环境(也可以理解为debug环境)、测试环境、预发环境、正式环境区分,我想要不改...

  • 基于Python的接口自动化测试(1)

    封装接口请求requests 使用配置文件切换测试环境、预发环境、生产环境 config.ini 配置文件读取 ...

  • 预发布环境

    1、什么是预发布环境? 预发布环境,就是线上环境、正式生产环境,为避免因为测试环境和线上环境的差异性等带来的缺陷漏...

  • 预发环境--产品质量的最后一道防线

    目标 1、对于大多数应用,可以在白天验证并发布。 2、让预发环境更贴近生产环境,而不是测试环境的拷贝。(现在的预发...

  • Xcode配置-利用Scheme实现多套环境配置

    背景说明 在iOS开发过程中,常常会朋友一个应用对应多套环境的情况,一般分为测试环境、预发环境、生产地址,每套地址...

  • 切换预发环境

    预发环境切换后,要对chrome进行清除缓存(三次握手) chrome://net-internals/#sock...

  • 2019-05-27

    基本每个项目都会有开发环境(本地环境)、开发集成环境、测试环境、预发布环境、正式环境。最少也有开发环境(本地环境)...

  • 如何管理 Xcode 多编译环境

    在 App 项目开发中会有多个编译环境的需求,给测试人员的测试环境,上线前的预发环境,以及上线后的正式环境。 此外...

  • 测试中使用代理连接到预发环境

    通常对于测试地址和正式地址切换都是应用内部通过修改代码来互相切换环境,比如说向这样:public boolean ...

网友评论

    本文标题:iOS 应用内切换环境(测试、预发、正式)

    本文链接:https://www.haomeiwen.com/subject/mvzrmhtx.html