美文网首页
关于JSPatch的学习

关于JSPatch的学习

作者: 来宝 | 来源:发表于2016-08-16 01:53 被阅读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

    相关文章

      网友评论

          本文标题:关于JSPatch的学习

          本文链接:https://www.haomeiwen.com/subject/chqpsttx.html