关于JSPatch的学习

2016-08-16  本文已影响70人  来宝

最近JSPatch挺火的,于是抽时间学习一下留着备用
在网上查询了不少关于JSPatch的文章,总结下来有两种不同的用法

方法一:

1、拷贝 JSPatch/目录下的三个文件 JSEngine.m/ JSEngine.h/ JSPatch.js到项目里即可。demo下载地址:https://github.com/a130785/JSPatchDemo

7C938D32-640A-4831-8045-2CF0CCAD8E5B.png
2、在AppDelegate里的代码如下:(需要事先写好js脚本)
#import “JPEngine.m"  
@implementation AppDelegate  
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions  
{  
    [JPEngine startEngine];  
    [NSURLConnection sendAsynchronousRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://test.net/bugfix.JS"]] queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {  
    NSString *script = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];  
    if (script) {  
      [JPEngine evaluateScript:script];  
    }  
}];  
    return YES;  
}  
@end  

这样的话有个麻烦的问题,就是需要每个app自己搭建一个服务器,用于js脚本文件的管理。幸好, JSPatch 平台已经帮我们做了这个!

方法二:

什么是 JSPatch 平台?

JSPatch 需要使用者有一个后台可以下发和管理脚本,并且需要处理传输安全等部署工作,JSPatch 平台帮你做了这些事,提供了脚本后台托管,版本管理,保证传输安全等功能,让你无需搭建一个后台,无需关心部署操作,只需引入一个 SDK 即可立即使用 JSPatch。
不过,JSPatch是收费的,收费标准如下:

235EE6CD-4348-4069-A9E8-F8B32CAB7B1F.png

具体步骤:

1、去JSPatch官网 http://www.jspatch.com 注册appkey

2.png

2、下载SDK,下载后将.framework文件拖到项目中,在link binary中导入两个库libz和JavaScriptCore两个框架:

3.png

3、添加依赖库


F768EEAC-9BC4-4DFA-AD67-61D25200DA02.png

4、在appdelegate中加入以下代码:

#import <JSPatch/JSPatch.h>
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [JSPatch startWithAppKey:@"你的AppKey"];
    [JSPatch sync];
}
@end

5、使用xcode新建一个main.js的空文件,至于为什么叫main.js,这个我们就不要深究了,这是别人要求的规范写法

F9513DAC-48BF-4F0A-AF61-31104685AFB2.png
为了方便代码自动补全,建议添加JSPatchX插件:https://github.com/bang590/JSPatchX
6、下面做个测试,修改某个页面的title标题和背景颜色。首先打开 testScriptInBundle,这个用户本地测试,同时注释掉startwithappkey。 CF8E9958-EEEB-4251-B612-96195A00DBDF.png

7、下面开始在main.js里面写入js代码,对于简单的修改可以直接通过http://bang590.github.io/JSPatchConvertor/ 将OC代码转换成JS代码,但是,这个转换不是万能的,稍微复杂的就会出错,所以要谨慎使用!!!
具体使用方法请参考:https://github.com/bang590/JSPatch/wiki/JSPatch-基础用法

F7396797-E9B3-4351-A097-01CD82AF920C.png
转换后的效果:
1D06A5A4-7ED7-474C-8D62-CCE0D4C5E51E.png

JSPatch的安全策略

JSPatch脚本的执行权限很高,若在传输过程中被中间人篡改,会带来很大的安全问题,为了防止这种情况出现,需要在传输过程中对JS文件进行了RSA签名加密,流程如下:

服务端:

计算 JS 文件 MD5 值。
用 RSA 私钥对 MD5 值进行加密,与JS文件一起下发给客户端。

客户端:

拿到加密数据,用 RSA 公钥解密出 MD5 值。
本地计算返回的 JS 文件 MD5 值。
对比上述的两个 MD5 值,若相等则校验通过,取 JS 文件保存到本地。
由于 RSA 是非对称加密,在没有私钥的情况下第三方无法加密对应的 MD5 值,也就无法伪造 JS 文件,杜绝了 JS 文件在传输过程被篡改的可能。
1、关于加密传输的详细介绍请看JSPatch作者bang的博客
http://blog.cnbang.net/tech/2879/
2、加密使用的是非对称RSA 校验的方式,会涉及到公钥和私钥,可参考下面的博客
http://www.cnblogs.com/hxwj/p/5163635.html
3、具体的加密步骤可参看下面的博客内容
http://www.cnblogs.com/hxwj/archive/2016/01/28/5165436.html

上一篇下一篇

猜你喜欢

热点阅读