本文参考JSPatch wiki :https://github.com/bang590/JSPatch/wiki
1.概念
JSPatch是一个轻量的JS引擎,能够使用JavaScript语言来调用任何object-c接口,替换任何原生的方法。目前主要用于发步JS脚本替换原生Objective-C代码,实时修复线上bug
2.原理
利用OC语言的动态性,动态的修改类的方法和属性。在app启动的时候加载我们写好的JavaScript文件并通过JavaScriptCore来执行,用JS写好的类函数去篡改原有的OC函数。JSPatch只提供了篡改这个过程的代码,像部署线上Js代码、下载这些逻辑都得自己写。当然你可以用JSpatchSDK这个平台,这个平台帮我们部署JS代码、下载等一些逻辑。JSPatchSDK是收费的,也有免费版的。
3.部署
通过pod或者其他方式引入JSPatch,在didFinishLaunchingWithOptions函数加上如下代码:
[JPEngine startEngine]; NSString *sourcePath = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"js"]; NSString *script = [NSString stringWithContentsOfFile:sourcePath encoding:NSUTF8StringEncoding error:nil]; [JPEngine evaluateScript:script];
部署完OC代码,我们就可以在index.js专心写JavaScript来修复线上的bug.
4.写JS代码
- defineClass 用来定义(覆盖)一个类
-
defineClass(classDeclaration, [properties,] instanceMethods, classMethods) classDeclaration:字符串类型,代表类名字 properties:一个字符串数组,代表要添加的属性列表 instanceMethods:实例方法 classMethods:累方法
- 下面是一个例子:
-
defineClass( ‘MainViewController‘, { viewDidLoad:function(){ self.super().viewDidLoad(); self.view().setBackgroundColor(require(‘UIColor‘).redColor()); self.navigationController().setNavigationBarHidden(true); } } )
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 15.0px "Helvetica Neue"; color: #444444 }
span.s1 { }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #ffffff }
span.s1 { }
时间: 2024-11-09 23:58:52