美文网首页日常收录
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 应用内切换环境(测试、预发、正式)

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