1.JSPatch 准备

地址:https://github.com/bang590/JSPatch

框架:libz.1.tbd , JavaScriptCore.framework

2.cocospod(可得到的三个文件)

JPEngine.h,JPEngine.m,JSPatch.js

3.Demo(重要的三个文件夹)

Extensions,JSPatch,Loader

********测试********

1.在本地生成一个main.js文件

require('SecondViewController')
defineClass('ViewController',{
rightClick:function(sender){
var vc = SecondViewController.alloc().init()
self.navigationController().pushViewController_animated(vc,YES)
}
})

2.JSPatchDemo

2.1 ViewController

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
[super viewDidLoad];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"right" style:(UIBarButtonItemStylePlain) target:self action:@selector(rightClick:)];
} - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
// [SecondViewController setGlBlock:^(NSString *) {
//
// }];
} #pragma mark - click
- (IBAction)rightClick:(id)sender{
NSLog(@"某某某");
} @end

2.2 AppDelegate (执行main.js)

  2.2.1 使用JPEngine (点击ViewController的rightNavigationItem 会跳转SecondViewController)

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
[JPEngine startEngine];
NSString *sourcePath = [[NSBundle mainBundle] pathForResource:@"main" ofType:@"js"];
NSString *script = [NSString stringWithContentsOfFile:sourcePath encoding:NSUTF8StringEncoding error:NULL];
[JPEngine evaluateScript:script];
return YES;
}

  2.2.2 使用JPLoader(5s前点击ViewController的rightNavigationItem 会打印'某某某',5s后会跳转SecondViewController)

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [JPLoader runTestScriptInBundle]; //5.0秒之前执行 本来就有的方法,5.0秒之后执行js里面的方法
[JPLoader setLogger:^(NSString *log) {
NSLog(@"hgl say:\"%@\"",log);
}];
}); return YES;
}

*********线上***********

1.服务端

文件管理 baseURL/version/v2.zip       (version:app版本号,v2:js版本号)

接口需求(request: {version:当前版本号,index:js版本号(为空是表示未下载过js.main)},

response:{state:状态码,update:是否需要下载,operate:是否需要执行当前js})

2.打包main.js

$php pack.php main.js -o v2 (pack.php 存在于Loader文件夹中,pack.php需要RSA私钥)

使用RSA加密验证 (只是为了验证,无法避免转包。如若需要可使用https协议)

*生成RSA公钥私钥

    1.安装openssl

      sudo apt-get install openssl
    2.生成RSA私钥 //该命令会生成1024位的私钥
      openssl genrsa -out rsa_private_key.pem 1024
    3.把RSA私钥转换成PKCS8格式
      openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM –nocrypt
    4.生成公钥
      openssl rsa -in rsa_private_key.pem -out rsa_public_key.pem -pubout

3.客户端

3.1 请示是否需要下载js,是否需要执行js

3.2 下载main.js

[JPLoader updateToVersion: callback:^(NSError *error) {

    }];

3.3 下载完成之后执行main.js

[JPLoader updateToVersion: callback:^(NSError *error) {
[JPLoader run];
}];

    *注:1.JPLoader中需要放入RSA的公钥

        2. updateToVersion方法会下载zip包,zip解压-> RSA验证 ->成功 -> 回调

        3. JSPatch平台托管 http://jspatch.com/Apps/index

4. 阿里百川平台托管 http://baichuan.taobao.com

注:2017-03 苹果官网 已经不允许app 动态修改一些东西,上App Store的应用最好先别使用这个东西。企业版app 还是可以用的。

JSPatch 使用的更多相关文章

  1. 【腾讯Bugly干货分享】JSPatch 成长之路

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/579efa7083355a9a57a1ac5b Dev Club 是一个交流移动 ...

  2. JSPatch来更新已上线的App中出现的BUG(超级详细)

    JSPatch的作用是什么呢? 简单来说:(后面有具体的操作步骤以及在操作过程中会出现的错误) 1.iOS应用程序上架到AppStore需要等待苹果公司的审核,一般审核时间需要1到2周.虽然程序在上架 ...

  3. JSPatch热更新的利器.

    如果用一句话来描述JSPatch,就是利用系统自带的JavaScriptCore.framework配合RunTime机制,进行实时的代码下载与运行.. 而且使用也很简单,启动,加载JS,运行... ...

  4. JSPatch 中 defineClass 中覆盖方法的使用

    今天研究了一下JSPatch,发现好神奇好奇妙,感觉这几天我都会乐此不彼的去研究这个高大上的东西. 出处来着:https://github.com/bang590/JSPatch 简单介绍一下这个 d ...

  5. iOS 利用JSPatch 添加热补丁功能

    ios 由于苹果的审核政策,一旦上线后发现bug是件让人崩溃的事情 不过可以利用oc的runtime机制可以家用JSPatch动态的为工程打热补丁 下载地址:https://github.com/ag ...

  6. JSPatch使用小记

    hotfix的作用众所周知,Android和iOS都有各自的技术,但是相比Android的当天发布来说(如果你们的项目不需要灰度),iOS热更新的意义更加重大.因为iOS审核周期长不说,而且运气不好会 ...

  7. JSPatch

    链接: JSPatch github项目主页 JSPatch技术文档 JSPatch基础用法总结 JSPatch – 动态更新iOS APP JSPatch使用小记 end

  8. IOS热更新-JSPatch实现原理+Patch现场恢复

    关于HotfixPatch 在IOS开发领域,由于Apple严格的审核标准和低效率,IOS应用的发版速度极慢,稍微大型的app发版基本上都在一个月以上,所以代码热更新(HotfixPatch)对于IO ...

  9. 使用jspatch进行热修复的实战总结

    最近正式在线上项目中集成了jspatch进行热修复,这里做一个简单的总结. 工具篇: 首先,用xcode来编辑js非常困难,基本上没有缩进,完全需要手写:经过研究发现使用 Sublime text3 ...

随机推荐

  1. BPM实例分享——日期自动计算

    日期自动计算 在请假流程中通常我们需要获得请假开始到请假结束时间的天数,那么请假天数(可结合工作日历)是怎么实现系统计算呢?下面我们来看下配置的方法.  1.  首选建立业务服务BPMService, ...

  2. ArcGIS Engine开发之书签加载

    ArcGIS中书签是保存特定视图范围的快捷方式.使用书签保存关注的视图范围,可在需要时快速定位.查看与浏览.书签功能主要用到IMapBookmarks.ISpatialBookmark和IAOIBoo ...

  3. VS2012 Unit Test 个人学习汇总(含目录)

    首先,给出MSDN相关地址:http://msdn.microsoft.com/en-us/library/Microsoft.VisualStudio.TestTools.UnitTesting.a ...

  4. 记一次git amend事故处理方案

    一.问题回顾 问题是git commit --amend 引起的. 一条commit已经push到远端develop了,但是后来又在这条commit上进行了amend操作,导致这条commit的哈希码 ...

  5. React Native之ListView使用

    前言 学习本系列内容需要具备一定 HTML 开发基础,没有基础的朋友可以先转至 HTML快速入门(一) 学习 本人接触 React Native 时间并不是特别长,所以对其中的内容和性质了解可能会有所 ...

  6. Mac电脑如何读取Android手机上的文件

    问题 一般Android手机用usb数据线连接到windows操作系统的电脑上后,会自动将手机存储卡以移动存储的方式显示在电脑里. 但是如果操作系统是Mac的,就没有这个存储设备.问题来了,Mac电脑 ...

  7. ORACLE RETURNING 用法总结

    ORACLE RETURNING 用法总结 场景 在存储过程.PL/SQL块里需要返回INSERT.DELETE.UPDATE.MERGE等DML语句执行后的信息时使用,合理使用returning能够 ...

  8. 转载 NPOI Excel 单元格背景颜色对照表

    NPOI Excel 单元格颜色对照表,在引用了 NPOI.dll 后可通过 ICellStyle 接口的 FillForegroundColor 属性实现 Excel 单元格的背景色设置,FillP ...

  9. Linux下安装 Posgresql 并设置基本参数

    在Linux下安装Postgresql有二进制格式安装和源码安装两种安装方式,这里用的是二进制格式安装.各个版本的Linux都内置了Postgresql,所以可直接通过命令行安装便可.本文用的是Cen ...

  10. 开源监控软件ganglia安装手册

    Ganglia是一个监控服务器,集群的开源软件,能够用曲线图表现最近一个小时,最近一天,最近一周,最近一月,最近一年的服务器或者集群的cpu负载,内存,网络,硬盘等指标. Ganglia的强大在于:g ...