热修复JSPatch之实战教程

Posted JackLee18

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了热修复JSPatch之实战教程相关的知识,希望对你有一定的参考价值。

  接上篇《热修复JSPatch之接口设计》,在这篇文章主要给大家讲述一下如何快速具备热修复能力,当然了如果有人有志于把JSPatch系统的学习,甚至用JSPatch进行开发的,就没有必要听我在这里啰嗦了。

简单了解下JSPatch语法

  我这里只介绍一些简单常用的。

1. require

在使用Objective-C类之前需要调用 require('className’) :


require('UIView')
var view = UIView.alloc().init()




可以用逗号 , 分隔,一次性导入多个类:


require('UIView, UIColor')
var view = UIView.alloc().init()
var red = UIColor.redColor()




或者直接在使用时才调用 require() :


require('UIView').alloc().init()




2. 调用OC方法

调用类方法


var redColor = UIColor.redColor();




调用实例方法


var view = UIView.alloc().init();
view.setNeedsLayout();




参数传递

跟在OC一样传递参数:


var view = UIView.alloc().init();
var superView = UIView.alloc().init()
superView.addSubview(view)







Property

获取/修改 Property 等于调用这个 Property 的 getter / setter 方法,获取时记得加 ():


view.setBackgroundColor(redColor);
var bgColor = view.backgroundColor();




方法名转换

多参数方法名使用 _ 分隔:


var indexPath = require('NSIndexPath').indexPathForRow_inSection(0, 1);




若原 OC 方法名里包含下划线 _,在 JS 使用双下划线 __ 代替:


// Obj-C: [JPObject _privateMethod];
JPObject.__privateMethod()




3.defineClass

API

qqqq defineClass(classDeclaration, instanceMethods, classMethods)

@param classDeclaration: 字符串,类名/父类名和Protocol
@param instanceMethods: 要添加或覆盖的实例方法
@param classMethods: 要添加或覆盖的类方法

在使用的过程中发现property属性命名,方法命名要严格按照驼峰式命名,禁止在属性名,或者方法名中间使用下划线'_' 此处要格外注意哦,血的教训积累出来的经验,如果使用了,会造成无法修复
如果想查看完整的教程可以点击查看

在实践的过程中发现,大部分人对于js方法不是很熟悉,写起来很慢,给大家找到了转换的网站转换网站地址

当然,转换后,我们是不能直接拿来用的,还是用很多的问题,比如宏定义无法使用,相关方法转换错误,js语法错误等等,我们可以使用下面的一个网站来进行js语法校验 js校验网址

通过上面的转换,校验,我们开始尝试在本地修复我们的bug,如果可以修复,并经过测试后,我们就可以上传我们的热修复脚本了。感兴趣的小伙伴可以尝试一下哦,下面是我写的一个小demo。 JSPatch修复demo

以上是关于热修复JSPatch之实战教程的主要内容,如果未能解决你的问题,请参考以下文章

JSPatch 热修复技术

关于苹果禁止采用JSPatch / wax/ rollout 热修复框架的app上架,你怎么看

iOS一个轻量级热修复工具,可替代JSPatch,可通过苹果审核

使用JSPatch平台热修复iOS App

iOS中 动态热修补技术JSPatch 韩俊强的博客

iOS中 动态热修补技术JSPatch 韩俊强的博客