标签:
一.热补丁作用:修复导致崩溃的错误、替换/增加方法、替换原来的界面等等
二.实现手段:JSPatch (使用Objective-C Objective-C和JavaScript jspatch桥。你可以调用任何Objective-C类和方法在JavaScript中的只是其中一小发动机。这使应用程序获取脚本语言的力量:添加模块或更换Objective-C代码来修复漏洞动态)。传送门:https://github.com/agelessman/JSPatch
三.Demo:
JSEngine.m
、JSEngine.h
、JSPatch.js到工程。添加依赖库 JavaScriptCore.framework
1 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
2
3 /** 这里热更新的实现思路:info.plist记录一个当前的版本号,每次程序开启的时候都去后台获取当前最新的版本号。拿这个最新版本号与本地的版本号比对,如果匹配成功---->不进行任何操作;如果匹配失败---->下载js文件进行热更新 */
4
5 //1.开启JP引擎
6 [JPEngine startEngine];
7
8 //2.js文件路径
9 NSString * jsPath = [[NSBundle mainBundle] pathForResource:JSName
10 ofType:@"js"];
11
12 //3.设置编码格式
13 NSString * script = [NSString stringWithContentsOfFile:jsPath
14 encoding:NSUTF8StringEncoding
15 error:nil];
16
17 //4.热更新
18 [JPEngine evaluateScript:script];
19
20 self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
21
22 [self.window addSubview:[self genView]];
23
24 self.window.rootViewController = [[ViewController alloc]init];
25
26 [self.window makeKeyAndVisible];
27
28 return YES;
29 }
1 /** 创建一个View到当页面,我们的目标利用js文件来动态修改这个方法 */
2 -(UIView *)genView
3 {
4 UIView * newView = [[UIView alloc]initWithFrame:CGRectMake(0, 0,KDeviceWidth,KDeviceHeight)];
5 newView.backgroundColor = [UIColor grayColor];
6 return newView;
7 }
1 // demo.js
2 require(‘UIView, UIColor, UILabel‘)
3 defineClass(‘AppDelegate‘, {
4 // 替换这个 -genView 方法
5 genView: function() {
6 var view = self.ORIGgenView();
7 view.setBackgroundColor(UIColor.greenColor()) //修改背景色
8 var label = UILabel.alloc().initWithFrame(view.frame()); //创建一个label
9 label.setText("JSPatch");
10 label.setTextAlignment(1);
11 view.addSubview(label);
12 return view;
13 }
14 });
四.实现原理:
五.弊端:
标签:
原文地址:http://www.cnblogs.com/conorBlogs/p/5258514.html