JSPatch 使用
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 使用的更多相关文章
- 【腾讯Bugly干货分享】JSPatch 成长之路
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/579efa7083355a9a57a1ac5b Dev Club 是一个交流移动 ...
- JSPatch来更新已上线的App中出现的BUG(超级详细)
JSPatch的作用是什么呢? 简单来说:(后面有具体的操作步骤以及在操作过程中会出现的错误) 1.iOS应用程序上架到AppStore需要等待苹果公司的审核,一般审核时间需要1到2周.虽然程序在上架 ...
- JSPatch热更新的利器.
如果用一句话来描述JSPatch,就是利用系统自带的JavaScriptCore.framework配合RunTime机制,进行实时的代码下载与运行.. 而且使用也很简单,启动,加载JS,运行... ...
- JSPatch 中 defineClass 中覆盖方法的使用
今天研究了一下JSPatch,发现好神奇好奇妙,感觉这几天我都会乐此不彼的去研究这个高大上的东西. 出处来着:https://github.com/bang590/JSPatch 简单介绍一下这个 d ...
- iOS 利用JSPatch 添加热补丁功能
ios 由于苹果的审核政策,一旦上线后发现bug是件让人崩溃的事情 不过可以利用oc的runtime机制可以家用JSPatch动态的为工程打热补丁 下载地址:https://github.com/ag ...
- JSPatch使用小记
hotfix的作用众所周知,Android和iOS都有各自的技术,但是相比Android的当天发布来说(如果你们的项目不需要灰度),iOS热更新的意义更加重大.因为iOS审核周期长不说,而且运气不好会 ...
- JSPatch
链接: JSPatch github项目主页 JSPatch技术文档 JSPatch基础用法总结 JSPatch – 动态更新iOS APP JSPatch使用小记 end
- IOS热更新-JSPatch实现原理+Patch现场恢复
关于HotfixPatch 在IOS开发领域,由于Apple严格的审核标准和低效率,IOS应用的发版速度极慢,稍微大型的app发版基本上都在一个月以上,所以代码热更新(HotfixPatch)对于IO ...
- 使用jspatch进行热修复的实战总结
最近正式在线上项目中集成了jspatch进行热修复,这里做一个简单的总结. 工具篇: 首先,用xcode来编辑js非常困难,基本上没有缩进,完全需要手写:经过研究发现使用 Sublime text3 ...
随机推荐
- javascript 表单
在HTML中,表单是由<form>元素来组成的.在js中,表单对应的则是HTMLFormElement类型.它和其他HTML元素一样具有相同的默认属性.下面是HTMLFormElement ...
- Android中使用ListView实现分页刷新(线程休眠模拟)
当要显示的数据过多时,为了更好的提升用户感知,在很多APP中都会使用分页刷新显示,比如浏览新闻,向下滑动到当前ListView的最后一条信息(item)时,会提示刷新加载,然后加载更新后的内容.此过程 ...
- (七)Maven使用的最佳实践
这里说一下在使用Maven过程中不是必须的,但十分有用的几个实践,关键时刻或许能解决您的问题. 1.设置MAVEN_OPTS环境变量 通常需要设置MAVEN_OPTS的值为-Xms128m -Xmx5 ...
- Atitit. 项目文档目录大纲 总集合 v2
Atitit. 项目文档目录大纲 总集合 v2 -----Atitti.原有项目源码的架构,框架,配置与环境说明 v3 q511 -----Atitit.开发环境 与 工具 以及技术框架 以及 注意 ...
- reborn to freelancer
I want to be a freelancer, so I come back to record all my efforts. I hope this will be a new start ...
- java Future 接口介绍
(转自:http://blog.csdn.net/yangyan19870319/article/details/6093481) 在Java中,如果需要设定代码执行的最长时间,即超时,可以用Java ...
- GDB 完全教程
一.简介 GDB是一个功能强大的调试器,它是一个自由软件,能够用在许多UNIX平台上.它同时也是Linux系统中的默认调试器.GDB已被移植到许多其他的计算机平台上,并且能够用于调试嵌入式实时系统.一 ...
- Linux 内核版本命名
Linux 内核版本命名在不同的时期有其不同的规范,我们熟悉的也许是 2.x 版本奇数表示开发版.偶数表示稳定版,但到 2.6.x 以及 3.x 甚至将来的 4.x ,内核版本命名都不遵守这样的约定. ...
- [C]指针有什么好处?
指针的好处,需要和数组比较起来说.具体如下: 1.指针可以随意申请不连续的数据存储空间,而数组是连续的,如果数组空间没有全部占用,那么会造成浪费,比如你申请了a[10],缺只有5个数据输入,那 ...
- Python 【第十一章】 Django模版
1.直接传值 urls.py """mysite URL Configuration The `urlpatterns` list routes URLs to view ...