您的位置:首页 > 移动开发 > IOS开发

iOS_Pass iOS hotfix 热更新 JSPatch 个人服务搭建方案

2016-09-19 15:44 330 查看

JSPatch 个人服务搭建方案

JSPatch简介

个人服务搭建思路

客户端:

*1,按照上方的见解接入JSPatch的pods 或者 直接拖拽文件进自己的工程目录。

*2,

- (void)applicationDidBecomeActive:(UIApplication *)application {
//2.1,请求服务端的js脚本文件,成功后判断必要条件
//2.2, 符合条件执行对应路径下的js文件,不符合跳过此步骤

}


*3,紧急修复后,要尽快上线新的版本并修复bug。不要夸版本使用热更新。

服务端:

1,创建独立的文件区域存放对应app下对应版本的布丁js。如图:



2,

{
"code":0,
"msg":"success"
"data":{
appVersion:1.1.0
jsVersion:1.0.2

jsContent:“
<font color=#0099ff size=5 face="黑体"> "require('UIView, UIColor')
console.log('run success');
defineClass("CUAccountViewController", {
tableView_numberOfRowsInSection: function(tableView, indexPath) {
return 1;
}
}, {})</font>",

"encryptedCode":"asldkfjalsjdfljsdkfjlsdkjfsldkf"
}
}


如上所示,

*1,客户端拿到这个json后,先根据appVersion和jsVersion判断是否要更新补丁。(需要一个本地化的存储之前的补丁版本)

*2,如果需要跟新补丁,将js先使用加密算法(md5,base64)等加密对应和encryptedCode做一个校验,确定是自己公司服务器发来的js,防止别人恶意攻击。

*3,将js文件写入到沙盒中保存。代码如下:

###2.2
NSArray *paths =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
NSString *documentsDirectory =[paths objectAtIndex:0];
NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary];
NSString *app_Version = [infoDictionary objectForKey:@"CFBundleShortVersionString"];
NSString *fileName = [NSString stringWithFormat:@"fix_%@.js",app_Version];
NSString *filePath =[documentsDirectory stringByAppendingPathComponent:fileName];

NSString * jsStr = @"jsStr"; //请求回来的js 代码 string格式
NSData * fileData = [jsStr dataUsingEncoding:NSUTF8StringEncoding];
BOOL success = [fileData writeToFile:filePath atomically:NO];

if (success) {
[JPEngine startEngine];
[JPEngine evaluateScriptWithPath:filePath];
}


总结

我们再来复述一下思路。

客户端:

*1,我们用JSpatch的源码,切记不是用她的sdk,并且跨过它的服务。

*2,每次应用被激活(applicationDidBecomeActive)就去服务端请求一下检查布丁的Json。

*3,请求到数据,根据json中的版本数据跟本地存储的版本数据判断是否需要更新补丁。

*4,如果需要更新,将js 代码与json中的校验码进行校验,通过后写入文件并使用JSpatch运行。

*5,如果本地存储有之前的js版本,为了防止更新失败记得更新成功后删除。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: