内容简介:通常我们在使用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实现增量项目部署
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。