iOS中 动态热修补技术JSPatch 韩俊强的博客

所谓动态热修补就是把能够导致app 崩溃的严重bug,提交新版本到appstore 审核速度太慢影响用户使用,这时候就可以利用

JSPatch 可以让你用 JavaScript 书写原生 iOS APP。只需在项目引入极小的引擎,就可以使用 JavaScript 调用任何 Objective-C 的原生接口,获得脚本语言的优势:为项目动态添加模块,或替换项目原生代码动态修复 bug。

这里就不在赘述优缺点重点看实现!

每日更新关注:http://weibo.com/hanjunqiang 
新浪微博

(一)首先在终端

pod search JSPatch

接下来就可以自己pod进你需要引入的工程中,或者download到本地自己加到工程中搜索结果如下

-> JSPatch (0.1.4)
  JSPatch bridge Objective-C and JavaScript. You can call any Objective-C class
  and method in JavaScript by just including a small engine.
  pod ‘JSPatch‘, ‘~> 0.1.4‘
  - Homepage: https://github.com/bang590/JSPatch
  - Source:	https://github.com/bang590/JSPatch.git
  - Versions: 0.1.4, 0.1.3, 0.1.2, 0.1.1, 0.1, 0.0.3, 0.0.2, 0.0.1 [master
  repo] - 0.1.4, 0.1.3, 0.1.2, 0.1.1, 0.1, 0.0.3, 0.0.2, 0.0.1 [master-1 repo]
  - Subspecs:
    - JSPatch/Core (0.1.4)
    - JSPatch/Extensions (0.1.4)
macxy:~ xy$

一般我们将执行的".js"文件放在服务器端每次程序启动时候可以执行比对本地js文件与服务器端js文件是否有变化这里细节就不做解释

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
   // 加载引擎
  [JPEngine startEngine];
//	本地JS,动态更新技术就是通过服务器获取JS更新这个JS
  NSString *sourcePath = [[NSBundle mainBundle] pathForResource:@"demo" ofType:@"js"];
  NSString *script = [NSString stringWithContentsOfFile:sourcePath encoding:NSUTF8StringEncoding error:nil];
  [JPEngine evaluateScript:script];
  从服务器获取更新JS
  [NSURLConnection sendAsynchronousRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://cnbang.net/test.js"]] queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
    NSString *script = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    //执行js
    [JPEngine evaluateScript:script];
  }];
}

这是大概过程举个小栗子描述下js替换的具体应用;

每日更新关注:http://weibo.com/hanjunqiang 
新浪微博

先上一段js文件解释下oc与js交互如何访问oc API

//按钮事件
defineClass(‘YFJSPatchMainViewController‘, {//哪个类中的方法
  buttonTouch: function(button) {//方法名:function(参数)
//跳转到tableView
    var tableViewCtrl = YFJSPatchTsetViewController.alloc().init()
self.navigationController().pushViewController_animated(tableViewCtrl, YES) } })

相信大家也都看的懂那么我们要怎么去用呢比如   我上面所写的就是要找到

YFJSPatchMainViewController这个类中的
-(void)buttonTouch:(uibutton)btn
{
}
这个方法最开始我们什么都没有写,当执行完js文件后这个方法就会去执行js  然后push;原理就是这样要自己去用一下才好祝您愉快
时间: 2024-10-14 20:54:34

iOS中 动态热修补技术JSPatch 韩俊强的博客的相关文章

iOS中 最新支付宝支付(AliPay) 韩俊强的博客

每日更新关注:http://weibo.com/hanjunqiang  新浪微博 现在的支付方式一般有三种, 支付宝, 微信, 网银. 个人觉得最简单易用的还是支付宝, 微信虽然看起来币支付宝要简单,但是后端太麻烦了, 网银就不说了. 先放出官方文档,免得还有人找不到文档: https://doc.open.alipay.com/doc2/detail?treeId=59&articleId=103563&docType=1 环境搭建 下载AliPayDK,官方链接,更新时间:2016/

iOS中 Realm错误总结整理 韩俊强的博客

每日更新关注:http://weibo.com/hanjunqiang  新浪微博! 一.错误信息:Attempting to modify object outside of a write transaction - call beginWriteTransaction on an RLMRealm instance first.企图在 写入事务 外修改对象 应该先在RLMRealm实例对象前 调用beginWriteTransaction 代码部分: //ManagementCamView

iOS中 断点下载详解 韩俊强的博客

布局如下: 基本拖拉属性: #import "ViewController.h" #import "AFNetworking.h" @interface ViewController () @property (weak, nonatomic) IBOutlet UILabel *progressLabel; @property (weak, nonatomic) IBOutlet UIProgressView *progressView; @property (n

iOS开发中的零碎知识点笔记 韩俊强的博客

每日更新关注:http://weibo.com/hanjunqiang  新浪微博 1.关联 objc_setAssociatedObject关联是指把两个对象相互关联起来,使得其中的一个对象作为另外一个对象的一部分. 2.tableView的beginUpdates 和 endUpdates 3.关于代码与storyBoard的自动布局 4.国际化与本地化,为了实现全球化 5.技巧 可以通过设置Scheme来设置app所运行的语言,你想要什么语言就是什么语言,而不用重新设置系统的语言. 6.i

iOS中 流媒体播放和下载 韩俊强的博客

每日更新关注:http://weibo.com/hanjunqiang  新浪微博 iOS中关于流媒体的简介:介于下载本地播放与实时流媒体之间的一种播放形式,下载本地播放必须全部将文件下载完成后才能播放,而渐进式下载不必等到全部下载完成后再播放,它可以一边下载一边播放,在完成播放内容之后,整个文件会保存在手机上. 实时流媒体 实时流媒体是一边接收数据包一边播放,本地不保留文件副本,实时流式传输总是实时传送,可以实时实况转播,支持随机访问,用户可以快进或者快退以观看前面或后面的内容.实时流媒体传输

iOS中 扫描二维码/生成二维码详解 韩俊强的博客

最近大家总是问我有没有关于二维码的demo,为了满足大家的需求,特此研究了一番,希望能帮到大家! 每日更新关注:http://weibo.com/hanjunqiang  新浪微博 指示根视图: self.window.rootViewController = [[UINavigationController alloc]initWithRootViewController:[SecondViewController new]]; 每日更新关注:http://weibo.com/hanjunqi

iOS中 HTTP/Socket/TCP/IP通信协议具体解释 韩俊强的博客

简介: // OSI(开放式系统互联), 由ISO(国际化标准组织)制定 // 1. 应用层 // 2. 表示层 // 3. 会话层 // 4. 传输层 // 5. 网络层 // 6. 数据链接层 // 7. 物理层 // TCP/IP, 由美国国防部制定 // 1. 应用层, HTTP, FTP, SMTP, DNS // 2. 传输层, TCP, UDP // 3. 网络层, IP // 4. 链路层, ARP, RARP // HTTP(短连接) // 1. 建立链接, 三次握手 // 2

iOS中 HTTP/Socket/TCP/IP通信协议详解 韩俊强的博客

每日更新关注:http://weibo.com/hanjunqiang  新浪微博 简单介绍: // OSI(开放式系统互联), 由ISO(国际化标准组织)制定 // 1. 应用层 // 2. 表示层 // 3. 会话层 // 4. 传输层 // 5. 网络层 // 6. 数据链接层 // 7. 物理层 // TCP/IP, 由美国国防部制定 // 1. 应用层, HTTP, FTP, SMTP, DNS // 2. 传输层, TCP, UDP // 3. 网络层, IP // 4. 链路层,

iOS中 Realm的学习与使用 韩俊强的博客

每日更新关注:http://weibo.com/hanjunqiang  新浪微博! iOS开发者交流QQ群:446310206  有问题或技术交流可以咨询!欢迎加入! 这篇直接搬了一份官方文档过来看的 由于之前没用markdown搞的乱七八糟的 所以重新做了一份 后面看到官网的中文文档更新不及时看着英文翻译了一点 搞的更乱了 :( 英文好的直接点右边->官方OC文档 Realm是一个移动端的数据库,Realm是SQLite和CoreData的替代者.它可以节省你成千上万行代码和数周的工作,并且