JSPatch学习记
Posted 水谷
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JSPatch学习记相关的知识,希望对你有一定的参考价值。
本文参考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); } } )
以上是关于JSPatch学习记的主要内容,如果未能解决你的问题,请参考以下文章
ios开发不能不知的动态修复bug补丁第三方库JSPatch 使用学习:JSPatch导入和使用.js文件传输加解密