iOS多环境管理,支持快速编译

iOS多环境管理,支持快速编译,第1张

创建时间:2022年 03月18号
适用范围:iOS项目

这篇文章都说了什么?

        在iOS中快速的进行环境切换

效果:


场景:

        我们日常开发至少有两套环境(开发+正式),好一点的就是三四套(开发、测试、预发、正式),这就必不可少的有一个需求,就是如何在各个环境之间快速的切换,甚至热切换。

        出于安全考虑,一般正式环境和其他环境不能互相切换。曾经看到一个大厂app的个人中某处连续点击若干次后,会出现一个环境切换页面,能切换和配置一些mock数据。


实现思路

1、增加多个scheme,这种方法做起来,区分的比较清晰,但是配置多,容易出错
2、使用宏定义,缺点
        1)需要编译的文件太多,很慢,
        2)不支持热切换,每次都得重新打包
3、单例,解决了编译慢和无法热切换的问题,会多消耗一点内存。是本文将要分享的做法


具体实现:

1、建一个类来管理环境相关的配置,通过单例来获取。

H 文件

static NSString *debug_host_index = @"test.host.debug.index";

@interface APPEnv : NSObject

+ (instancetype)share;

/** DEBUG */
@property (nonatomic, assign, readonly) BOOL debug;

@end

M文件 

#import "APPEnv.h"

@interface APPEnv ()

/** DEBUG */
@property (nonatomic, assign) BOOL debugIn;

@end


@implementation APPEnv

+ (instancetype)share {
    static dispatch_once_t onceToken;
    static hpdm *instance = nil;
    dispatch_once(&onceToken, ^{
        instance = [[hpdm alloc] init];
        instance.debugIn = YES;
    });
    return instance;
}

- (BOOL)debug {
    return _debugIn;
}

@end

 这里每次打包的时候,我们通过debugIn来控制就可以啦,如控制我们主要的接口

+ (NSString *)host {
    if ([hpdm share].debug) {
        NSInteger index = [TRUserDefaultsUtil getLocalDataInt:debug_host_index];
        // 包含地址和描述的自定义类
        HDebugModel *debugModel = [hpdm share].debugList[index];
        NSString *host = debugModel.host;
        return host;
    } else {
        return @"https://app.com/release/api";
    }
}

2、如何控制测试环境和开发环境的切换

我们可以把需要切换的环境写在一个数组里面,然后每次选择的时候,存一下对应的标记

- (NSArray *)debugList {
    
    NSMutableArray *list = [[NSMutableArray alloc] init];
    {
        NSString *host = @"http:app.com/test/api";
        HDebugModel *model = [HDebugModel modelWithHost:host desc:@"测试环境(test)"];
        [list addObject:model];
    }
    {
        NSString *host = @"http:app.com/dev/api";
        HDebugModel *model = [HDebugModel modelWithHost:host desc:@"开发环境(dev)"];
        [list addObject:model];
    }
    {
        HDebugModel *model = [HDebugModel modelWithHost:@"http://10.10.11.12:8888" desc:@"张电脑(dev)"];
        [list addObject:model];
    }
    return list;
}

总结:

        思路其实比较简单,这里只写一部分示例代码,大家可以自己改进。比如要把接口验证也加进来,那就通过我们保存的环境标记,来判断该用什么验证规则。

        这样测试的时候,我们打包,测试同学就可以自己在多个环境中来回的切换,或者我们调试问题时可以连接某个开发者的本地环境,方便快速。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/997000.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存