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 ...
随机推荐
- 微信小程序的认识和开发适用性
来源:三节课课堂笔记 小程序认知 初识小程序. 目前微信小程序包括各类公众号接口的情况: 那么微信拥有的功能产品和对应的互联网产品有哪些: 小程序相当于AppStore应用分发市场: ...
- querySelectorAll 方法相比 getElementsBy 系列方法区别
最近有人问到querySelectorAll 方法相比 getElementsBy 系列方法区别,一时没想起来说些什么,今天查下文档,总结一下它们的区别,以便自己理解. 1. W3C 标准queryS ...
- js获取页面url
设置或获取对象指定的文件名或路径. window.location.pathname例:http://localhost:8086/topic/index?topicId=361alert(windo ...
- AlloyTouch全屏滚动插件发布--30秒搞定顺滑H5页
原文链接:https://github.com/AlloyTeam/AlloyTouch/wiki/AlloyTouch-FullPage-Plugin 先验货 插件代码可以在这里找到. 注意,虽然是 ...
- 简单实用angular.js购物车功能
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 一位资深程序员大牛给予Java初学者的学习路线建议
java学习这一部分其实也算是今天的重点,这一部分用来回答很多群里的朋友所问过的问题,那就是我你是如何学习Java的,能不能给点建议?今天我是打算来点干货,因此咱们就不说一些学习方法和技巧了,直接来谈 ...
- Linux2.6内核进程调度系列--scheduler_tick()函数3.更新普通进程的时间片
RT /** * 运行到此,说明进程是普通进程.现在开始更新普通进程的时间片. */ /* 首先递减普通进程的时间片计数器.如果用完,继续执行以下操作 */ if (!--p->time_sli ...
- MVC @Html.TextBoxFor 格式化
不能使用Html.EditorFor() 因为需要为生成的控件 指定HTML特性 @Html.TextBoxFor(model => model.StartDate, new { Value = ...
- ASP.NET MVC 初体验
MVC系列文章终于开始了,前段时间公司项目结束后一直在封装一个html+ashx+js+easyui的权限系统,最近差不多也完成了,迟些时候会分享源码给大家.当然这个MVC系列结束后如果时间允许还会另 ...
- apachetop 实时监测web服务器运行状况
apachetop 实时监测web服务器运行状况 我们经常会需要知道服务器的实时监测服务器的运行状况,比如哪些 URL 的访问量最大,服务器每秒的请求数,哪个搜索引擎正在抓取我们网站?面对这些问题 ...