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文件传输加解密

热修复JSPatch之实战教程

热修复JSPatch之实战教程

Atom编辑器折腾记_(15)JS代码片段补全(插件:javascript-snippets)

JSPatch Convertor 实现原理详解

JSPatch部署JS代码控制OC代码