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);
    
            }
        }
    )

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

JSPatch学习记的相关文章

Alex Fung魔方转法学习记

我学了Alex Fung魔方转法,这是一种精确的数学法,且是一种思路,一个系统解决方案,一种原理,不用死记硬背公式. 这是一篇学习记,所有用到的算法必须去原文查看具体的数学公式和Java Applet的演示.因为我还不会编程演示,所以本文不self-contained,而像是一个数学课抄录的笔记,只是记录我的学习过程. 首先,请拿纸和笔——数学公式必须自己写一遍,自己推导一遍,使得自己看到那些符号,心里不发怵,所以写只是为了变得信任眼熟亲切记得. 魔方基础的令人讨厌气噎眼花缭乱终于整个头脑都拧巴

软工学习记1

这学期,我们分了方向,专业方向.也许向老师说的那样学习好的选了计科,我大概属于学习差的吧.高中的紧绷让我到了大学不知道该干嘛了,荒废了整个大一,到现在还不知道自己读了大学学会了干什么.现在我要追赶了,毕竟差的不是一点半点.分了方向,有了任务,也大概自导自己该干嘛了.开始感觉还是挺无从下手的,不过信心还是有的.也算亡羊补牢吧. 这俩星期自己抽空看了看这本构建之法.粗略明白了点要想开发一个堪称完美的软件是十分困难的.需要大量人力时间.软件等于程序加软件工程,软件开发的阶段不同,我们所需要的标准花费的

ftk学习记(icon篇)

[声明:版权全部,欢迎转载.请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 在開始今天的文章之前.我们还是先看一下上一节的效果图. 大家能够參照上一节的解说,是不是存在这种button,是不是存在这种wait_box控件,相同是不是能够看到wait_box活动的情形.当然,有条件的朋友最好自己编译一下这个demo代码.按步骤调试每一行代码. 今天,如标题所看到的.我们所学习的是icon的内容.简单一点说,此次基本的目的就是想在窗体上显示icon图像的内容. 至于怎样显

ftk学习记(label篇)【转】

转自:http://blog.csdn.net/feixiaoxing/article/details/25000093 版权声明:本文为博主原创文章,未经博主允许不得转载. [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 还是接着上面的一篇博文.之前曾经答应过大家,让大家看一下最简单的ftk程序是怎么运行的.所以,这里我们上传一下图片. 因为还是编辑模式,所以暂时还不能看到图片在网页中是怎么显示的.不过没有关系,这次只是做一个最初的尝试

老菜鸟MVC学习记

大学毕业已三年,菜鸟称谓依然.毕业前使用过六个月的MVC,但是自从毕业后因为公司一直在用webForm,所以MVC就没有再用过.直到最近打算用MVC做一个项目管理系统,才发现MVC已经变得陌生了,只有再从新学起.为了防止自己的拖延症拖延自己的学习计划,特在博客园写此文.学习期间,所有的感悟和整理的可以提高开发速度的代码都要粘出来,一是方便今后随时取用,二是方便所有像我一样的菜鸟,可以少走弯路.

JSPatch学习笔记

JSPatch 做到了让JS调用/替换任意OC方法,让iOS APP具备hotfix的能力 1.引入执行js脚本 [JPEngine startEngine]; 直接执行JS脚本 [JPEngineevaluateScript:@"\ console.log('call JPEngine success');\ "]; 执行本地JS文件demo.js脚本 NSString *sourcePath = [[NSBundlemainBundle] pathForResource:@&quo

python学习记【1】

本人是个渗透小子 从开始接触渗透已经将近四年了 现在目标就是python的学习与应用 今天听了老男孩的python的课程所以心血来潮就来写个文章 今天的内容很是多  主要学习了有几个块 1. 用户的交互 使用input 输入信息 Input 接受的值是string类型的 如果想要输入int类型的需要类型转换 格式:int(input("输入一个数字:")) 2. IF判断流程控制 If 顾名思义就是判断语句 If语句的格式:               If [条件]:        

ftk学习记(首篇)

[ 声明:版权全部,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 非常早之前就知道ftk了,当时主要是由于买了李先静的书,所以知道了这么一个项目.由于对这样的gui的代码非常感兴趣.所以在我闲暇的时候也会拿来看一看.从整个project来看,代码非常工整.平台移植也方便.所以有兴趣的同学能够看一看. 一般对于一个开源项目.要深入地參与当中都要经历几个过程,这各自是使用.阅读.改动.重构. 大多数公司里面也会使用到开源项目,可是往往停留在使用的阶段. 所以.

ftk学习记(label篇)

[ 声明:版权全部,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 还是接着上面的一篇博文. 之前以前答应过大家,让大家看一下最简单的ftk程序是怎么执行的.所以,这里我们上传一下图片. 由于还是编辑模式.所以临时还不能看到图片在网页中是怎么显示的. 只是没有关系,这次仅仅是做一个最初的尝试.假设大家有更好的意见,最好还是用微信扫一下头像或者私信给我,就能够了. 前面的代码还是比較简单的.今天,我们来学习一下label的显示方法.当然,无论大家是做windo