内容简介:通常我们在使用Git管理代码的时候都会创建不同的分支进行管理,而不同分支一般又对应了不同的环境,如master(预发布或生产),develop(开发测试),staging(预发布),feature等等。对iOS来说,每次提测不同环境的安装包的时候,总需要手动进行切换环境(相信对大部分人来说是这样的??),如何解决这个痛点(我就想偷个懒....)目标:实现类似前端打包一样的配置,与git分支做匹配,自动化部署环境,同时提供接口支持应用内切换环境最终实现:发布测试/预发布/生产,只需将代码合并到master,s
通常我们在使用Git管理代码的时候都会创建不同的分支进行管理,而不同分支一般又对应了不同的环境,如master(预发布或生产),develop(开发测试),staging(预发布),feature等等。对iOS来说,每次提测不同环境的安装包的时候,总需要手动进行切换环境(相信对大部分人来说是这样的??),如何解决这个痛点(我就想偷个懒....)
目标:实现类似前端打包一样的配置,与git分支做匹配,自动化部署环境,同时提供接口支持应用内切换环境
最终实现:发布测试/预发布/生产,只需将代码合并到master,staging等分支,无需手动切换环境,而配合jenkins将能实现不同环境的自动化构建发布
API环境自动部署
示例代码 AutoDemo
注意配置好之后,需要Clean一遍项目,不然会报错GitCommitBranch不存在
在项目中获取git信息
- 在Info.plist增加GitCommitBranch(名字自定,表达清晰即可)项,用于记录分支名称
- 在 Xcode(TARGETS项目target) - Build Phases - New Run Script Phase,增加脚本配置,用于获取git信息并更新到Info.plist中, 脚本代码如下
#当前的分支
git_branch=$(git symbolic-ref --short -q HEAD)
#获取App安装包下的info.plist文件路径
info_plist="${BUILT_PRODUCTS_DIR}/${EXECUTABLE_FOLDER_PATH}/Info.plist"
#利用PlistBuddy改变info.plist的值
/usr/libexec/PlistBuddy -c "Set :'GitCommitBranch' '${git_branch}'" "${info_plist}"
复制代码
创建配置文件,实现API环境自动部署
创建AutoConfig单例,实现自动化部署逻辑,提供一切受环境影响的接口供外部调用,从此只需关注功能开发,打包发布再也不用去切换环境! AutoConfig.h:
#import <Foundation/Foundation.h>
typedef NS_ENUM(NSInteger, AutoEnvironmentType) {
AutoEnvironmentTypeDevelop = 1, //开发/测试环境
AutoEnvironmentTypeStaging, //预发布环境
AutoEnvironmentTypeProduction, //生产环境
};
NS_ASSUME_NONNULL_BEGIN
@interface AutoConfig : NSObject
+ (NSString *)baseURL;
/**
自定义环境,一步实现应用内环境切换 及 方便开发调试
@param env 要切换到的环境
*/
+ (void)setEnviroment:(AutoEnvironmentType)env;
@end
复制代码
AutoConfig.m实现
#import "AutoConfig.h"
const static NSString *kDevelopRegx = @"^(develop|feature)_.*$";
const static NSString *kStagingRegx = @"^master";
const static NSString *kProductionRegx = @"^production";
@interface AutoConfig()
@property (nonatomic, copy) NSString *baseURL;
@property (nonatomic, assign) AutoEnvironmentType env;
@property (nonatomic, strong) NSPredicate *developPredicate;
@property (nonatomic, strong) NSPredicate *stagingPredicate;
@property (nonatomic, strong) NSPredicate *productionPredicate;
@end
@implementation AutoConfig
#pragma mark -Public Methods
+ (NSString *)baseURL {
return [AutoConfig shared].baseURL;
}
+ (void)setEnviroment:(AutoEnvironmentType)env {
[AutoConfig shared].env = env;
[[AutoConfig shared] updateConfig];
}
#pragma mark -life cycle
+ (AutoConfig *)shared {
static AutoConfig *_config = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_config = [[AutoConfig alloc] init];
[_config commonInit];
});
return _config;
}
- (void)commonInit {
_developPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", kDevelopRegx];
_stagingPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",kStagingRegx];
_productionPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",kProductionRegx];
[self envForCurrentBranch];
[self updateConfig];
}
/**
根据分支名称,进行正则匹配,指定环境
*/
- (void)envForCurrentBranch {
NSDictionary *infoDict = [[NSBundle mainBundle] infoDictionary];
NSString * branch = infoDict[@"GitCommitBranch"];
if ([self.developPredicate evaluateWithObject:branch]) {
//测试
self.env = AutoEnvironmentTypeDevelop;
}
else if ([self.stagingPredicate evaluateWithObject:branch]) {
//预发布
self.env = AutoEnvironmentTypeStaging;
}
else {
//生产环境
self.env = AutoEnvironmentTypeProduction;
}
}
- (void)updateConfig {
/**
* 对根据环境变化的参数进行配置
*/
switch (self.env) {
case AutoEnvironmentTypeDevelop:
self.baseURL = @"http://test.com.cn";
break;
case AutoEnvironmentTypeStaging:
self.baseURL = @"https://staging.com.cn";
break;
case AutoEnvironmentTypeProduction:
self.baseURL = @"https://production.com.cn";
break;
default:
self.baseURL = @"http://test.com.cn";
break;
}
}
@end
复制代码
以上所述就是小编给大家介绍的《iOS如何实现API环境自动部署》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- redission-tomcat 快速实现从单机部署到多机部署
- 手摸手,带你实现代码自动部署
- php + Laravel 实现部署自动化
- 部署Apache网站服务以及访问控制的实现
- 企业私有npm部署和实现npm发布
- Shell脚本结合Git实现增量项目部署
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
大数据架构商业之路
黄申 / 机械工业出版社 / 2016-5-1 / 69.00元
目前大数据技术已经日趋成熟,但是业界发现与大数据相关的产品设计和研发仍然非常困难,技术、产品和商业的结合度还远远不够。这主要是因为大数据涉及范围广、技术含量高、更新换代快,门槛也比其他大多数IT行业更高。人们要么使用昂贵的商业解决方案,要么花费巨大的精力摸索。本书通过一个虚拟的互联网O2O创业故事,来逐步展开介绍创业各个阶段可能遇到的大数据课题、业务需求,以及相对应的技术方案,甚至是实践解析;让读......一起来看看 《大数据架构商业之路》 这本书的介绍吧!