开发者社区> ghost丶桃子> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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;原理就是这样要自己去用一下才好祝您愉快

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Android、iOS和Windows Phone中的推送技术
 Android、iOS和Windows Phone中的推送技术    推送并不是什么新技术,这种技术在互联网时代就已经很流行了。只是随着进入移动互联网时代,推送技术显得更加重要。
1065 0
文章
问答
文章排行榜
最热
最新
相关电子书
更多
移动 App 性能监测实践(iOS篇)
立即下载
深入剖析 iOS 性能优化
立即下载
React-Native 在iOS上的性能优化方案
立即下载