开发环境和发布环境切换以方便测试

需求:点击某个地方触发事件,可以自由的切换测试、预生产、生产三种环境。

原理:用NSUserDefault或者Singleton去维护环境变量集合。

宏定义配置


/***************单例模式宏**************/

#define MACRO_SHARED_INSTANCE_INTERFACE +(instancetype)sharedInstance;

#define MACRO_SHARED_INSTANCE_IMPLEMENTATION(CLASS) \

+(instancetype)sharedInstance \

{ \

static CLASS * sharedInstance = nil; \

static dispatch_once_t onceToken; \

dispatch_once(&onceToken, ^{ \

sharedInstance = [[CLASS alloc] init]; \

}); \

return sharedInstance; \

}

#define APPDelegate ((AppDelegate*)[UIApplication sharedApplication].delegate)

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #008f00; background-color: #ffffff }

FBChangeEnvironment.h类


#import <Foundation/Foundation.h>

@interface FBChangeEnvironment : NSObject

MACRO_SHARED_INSTANCE_INTERFACE

//切换环境

- (void)changeEnvironment;

//获得当前环境

- (NSString *)currentEnvironment;

@end

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #008f00; background-color: #ffffff }

FBChangeEnvironment.m

备注:下面devConfig、prodConfig、prodConfig1改为自己服务器3种环境的地址


#import "FBChangeEnvironment.h"

//UAT

static NSString *const devConfig = @"0";

//预生产

static NSString *const prodConfig = @"1";

//生产

static NSString *const prodConfig1 = @"2";

@implementation FBChangeEnvironment

MACRO_SHARED_INSTANCE_IMPLEMENTATION(FBChangeEnvironment)

//切换环境

- (void)changeEnvironment{

NSLog(@"change environment start");

NSString *title=@"切换环境";

NSString *[email protected]"重启后生效, 非测试人员请点击cancel";

UIAlertController *alert = [UIAlertController alertControllerWithTitle:title message:subTitle preferredStyle:UIAlertControllerStyleActionSheet];

//修改title

NSMutableAttributedString *alertControllerStr = [[NSMutableAttributedString alloc] initWithString:title];

//    [alertControllerStr addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(0, alertControllerStr.length)];

[alertControllerStr addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:20] range:NSMakeRange(0, alertControllerStr.length)];

[alert setValue:alertControllerStr forKey:@"attributedTitle"];

//修改message

NSMutableAttributedString *alertControllerMessageStr = [[NSMutableAttributedString alloc] initWithString:subTitle];

//    [alertControllerMessageStr addAttribute:NSForegroundColorAttributeName value:[UIColor greenColor] range:NSMakeRange(0, alertControllerMessageStr.length)];

[alertControllerMessageStr addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:16] range:NSMakeRange(0, alertControllerMessageStr.length)];

[alert setValue:alertControllerMessageStr forKey:@"attributedMessage"];

NSString *currentEnvironment=@"";

if ([[self currentEnvironment] isEqualToString:devConfig]) {

currentEnvironment=@"当前环境为 UAT";

[alert addAction:[UIAlertAction actionWithTitle:@"UAT" style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action) {

//测试环境

[[NSUserDefaults standardUserDefaults] setObject:devConfig forKey:@"serverFB"];

}]];

[alert addAction:[UIAlertAction actionWithTitle:@"预生产" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {

//预生产环境

[[NSUserDefaults standardUserDefaults] setObject:prodConfig forKey:@"serverFB"];

}]];

[alert addAction:[UIAlertAction actionWithTitle:@"生产" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {

//生产环境

[[NSUserDefaults standardUserDefaults] setObject:prodConfig1 forKey:@"serverFB"];

}]];

} else if ([[self currentEnvironment] isEqualToString:prodConfig]) {

currentEnvironment=@"当前环境为 预生产";

[alert addAction:[UIAlertAction actionWithTitle:@"UAT" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {

//测试环境

[[NSUserDefaults standardUserDefaults] setObject:devConfig forKey:@"serverFB"];

}]];

[alert addAction:[UIAlertAction actionWithTitle:@"预生产" style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action) {

//预生产环境

[[NSUserDefaults standardUserDefaults] setObject:prodConfig forKey:@"serverFB"];

}]];

[alert addAction:[UIAlertAction actionWithTitle:@"生产" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {

//生产环境

[[NSUserDefaults standardUserDefaults] setObject:prodConfig1 forKey:@"serverFB"];

}]];

} else if ([[self currentEnvironment] isEqualToString:prodConfig1]) {

currentEnvironment=@"当前环境为 生产";

[alert addAction:[UIAlertAction actionWithTitle:@"UAT" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {

//测试环境

[[NSUserDefaults standardUserDefaults] setObject:devConfig forKey:@"serverFB"];

}]];

[alert addAction:[UIAlertAction actionWithTitle:@"预生产" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {

//预生产环境

[[NSUserDefaults standardUserDefaults] setObject:prodConfig forKey:@"serverFB"];

}]];

[alert addAction:[UIAlertAction actionWithTitle:@"生产" style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action) {

//生产环境

[[NSUserDefaults standardUserDefaults] setObject:prodConfig1 forKey:@"serverFB"];

}]];

}

[alert addAction:[UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {

//

}]];

//当前选择的视图控制器需要自己赋值,比如tabbar的didSelectViewController里

[APPDelegate.currentSelectedVC.navigationController presentViewController:alert animated:YES completion:^{

//

}];

}

//获得当前环境

- (NSString *)currentEnvironment{

//默认生产环境

NSString *currentEnvironment=prodConfig1;

if ([[NSUserDefaults standardUserDefaults] objectForKey:@"serverFB"]) {

currentEnvironment=[[NSUserDefaults standardUserDefaults] objectForKey:@"serverFB"];

}

return currentEnvironment;

}

@end

某个地方需要调用事件时,调用以下方法即可


- (void)changeEnvironment {

[[FBChangeEnvironment sharedInstance]changeEnvironment];

}

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; background-color: #ffffff }

原文地址:https://www.cnblogs.com/huangzs/p/8962369.html

时间: 2024-10-12 08:27:56

开发环境和发布环境切换以方便测试的相关文章

VUE 利用webpack 给生产环境和发布环境配置不同的接口地址

第一步,分别设置不同的接口地址 首先,我们分别找到下面的文件: /config/dev.env.js /config/prod.env.js 其实,这两个文件就是针对生产环境和发布环境设置不同参数的文件.我们打开dev.en.js文件.代码如下: var merge = require('webpack-merge') var prodEnv = require('./prod.env') module.exports = merge(prodEnv, { NODE_ENV: '"develop

vue cli脚手架项目利用webpack给生产环境和发布环境配置不同的接口地址或者不同的变量值。

废话不多说,直接进入正题,此文以配置不同的接口域名地址为例子 项目根目录下有一个config文件夹,基础项目的话里面至少包括三个文件, 1.dev.env.js 2.index.js 3.prod.env.js 我们需要做配置的就是第一个和第三个. 其实这两个文件内容就是针对生产环境和发布环境设置不同的参数的文件,那么打开dev.en.js,开发环境.原本代码如下: 'use strict' const merge = require('webpack-merge') const prodEnv

vue-cli 利用 webpack 给生产环境和发布环境配置不同的接口地址的三种方法

第一种方法: 在/config/dev.env.js下配置如下 在/config/prod.env.js下配置如下 已经分别设定路径,接下来就是如何调用的问题了. 原来api文件里代码如图所示 修改为 然后就完成了我们的配置工作.最后,重启项目,就能使新配置的接口地址生效了. 在经过这样的配置之后,我们在运行 npm run dev 的时候,跑的就是开发环境的接口.而我们运行 npm run build 打包项目的时候,打包的是服务器正式接口,我们就不用调来调去得了. 第二种方法: 可以使用 "

[原创]好买财富测试环境自动化发布部署系统实践

一  为什么要开发一套测试环境自动化发布部署系统? (1) 好买的交易系统越来越庞大,越来越复杂,仅搭建一套系统要涉及到50多件内容: (2)手工搭建测试环境容易出错,投诉较多,各业务方抱怨较多: (3)搭建测试环境效率低下,庞大的系统,旧的方式需要大约忙1天,有时出了问题时间会更长, (4)开发多分支并行开发,抢占市场,要求必须满足公司在快速开发和迭代测试,目前维护了16套环境,估计16年会更多: (5)  以前系统搭建,太依赖个人的经验,人员离职会造成非常大的瓶颈; (6)都是领导逼的,这年

IdentityServer4:发布环境的数字签名证书

一,jwt的三个组成部件 先来看一个由IdentityServer颁发的一个标准令牌 eyJhbGciOiJSUzI1NiIsImtpZCI6IjBiNTE3ZjIzYWY0OGM4ZjkyZjExMzM5MDMwZTI5NDkwIiwidHlwIjoiSldUIn0.eyJuYmYiOjE1Njk4MDUxNzgsImV4cCI6MTU2OTgwNTQ3OCwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo1MDAwIiwiYXVkIjoiYXBpQ2xpZW50SHlicml

Storm系列(一):搭建dotNet开发Storm拓扑的环境

上篇博客比较了目前流行的计算框架特性,如果你是 Java 开发者,那么根据业务场景选择即可:但是如果你是 .Net 开发者,那么三者都不能拿来即用,至少在这篇文章出现之前是如此.基于上篇文章的比较发现,Storm 应该是对多语言支持比较好的框架了,但即便如此,官方也没有提供 .Net 的适配器,网上也找不到第三方的开源库.So,Storm.Net.Adapter 出现了,一个使用 Csharp 开发的 针对 Apache Storm 的适配器!项目由本人开发,按照Apache License,

前端开发神器WebStorm--Grunt 搭建环境(03)

通过上一篇前端开发神器WebStorm--自动化工作流(前言),相信大家都Grunt自动化工具有了初步了解. 接下来我就以WROC3000 web为原型,演示一下如何使用Grunt工具提高工作效率,最大程度压缩代码. 1.首先安装node环境 进入官网 下载安装.(记住安装目录) 检测安装成功方法:打开CMD窗口,输入 node --version 会打印出安装的版本号,说明已经安装成功. 2.安装 Grunt 客户端 在CMD 窗口中,切换到node安装盘符,会自动切换到nodejs安装目录.

什么是 开发环境、测试环境、生产环境、UAT环境、仿真环境

开发环境:开发环境是程序猿们专门用于开发的服务器,配置可以比较随意, 为了开发调试方便,一般打开全部错误报告. 测试环境:一般是克隆一份生产环境的配置,一个程序在测试环境工作不正常,那么肯定不能把它发布到生产机上. 生产环境:是指正式提供对外服务的,一般会关掉错误报告,打开错误日志.可以理解为包含所有的功能的环境,任何项目所使用的环境都以这个为基础,然后根据客户的个性化需求来做调整或者修改. 三个环境也可以说是系统开发的三个阶段:开发->测试->上线,其中生产环境也就是通常说的真实环境. UA

企业中的软件开发——开发环境、测试环境、镜像环境与生产环境的区别

开发环境:开发环境是程序员们专门用于开发的服务器,配置可以比较随意,为了开发调试方便,一般打开全部的错误报告和测试工具,是最基础的环境.开发环境的分支,一般是feature分支. 测试环境:一般是克隆一份生产环境的配置,一个程序在测试环境工作不正常,那么就肯定不能把它发布到生产服务器上,是开发环境到生产环境的过渡环境.测试环境的分支一般是develop分支,部署到公司私有的服务器或者局域网服务器上,主要用于测试是否存在bug,一般会不让用户和其他人看到,并且测试环境会尽量与生产环境相似.有时测试