JSPatch热修复的使用的那些深坑

发个广告:iOS开发两年了,一步步走来,从小白到大白,有自己的新的体验  关注公众号一起进步,有技术、工具分享



1、为什么要分享JSPatch?

Cicada(iOS)1.6.0版本上线后发现有个非常严重的Bug,导致老版本升级之后一打开应用就Crash,如果紧急修复提交审核,最快也得三天左右,那么这三天的成本是巨大的,所以引入JSPatch进行热修复,动态更新App,替换项目原生代码,无需更新App即时修复Bug。

2、实现原理

JSpatch用iOS内置的JavaScriptCore.framework作为JS引擎,通过Objective-CRuntime,从JS传递要调用的类名函数名到Objective-C,在使用NAInvocation(一种消息调用的方法,并且它的参数没有限制)动态调用对应的OC方法。【备注:iOS中可以直接调用某个对象的消息方式有两种:a、performSelector:withObject;b、NSInvocation。】

3、基础原理

 Objective-C是动态语言,OC上多有方法的调用/类的生成都通过Objective-CRuntime在运行时进行,我们可以通过类名/方法名反射得到相应的类和方法,也可以替换某个类的方法为新的实现,还可以新注册一个类,为类添加方法。也就是说:理论上可以在运行时通过类名/方法名调用到任何OC方法,替换任何类的实现以及新增任意类。那么也可以这里理解JSPatch的原理:JS传递字符串给OC,OC通过Runtime接口调用和替换OC方法。

4、JSPatch导入

(1)使用Cocoapods进行管理,引入 pod ‘JSPatch’

(2)在AppDelegate导入 #import

(3)在didFinishLaunchingWithOptions中进行配置



5、本地调用

 将写好的js文件拖到MacintoshHD/Library(资源库)/WebServer/Documents目录下,然后运行项目即可。

相关资源:

1、JSPatch-动态更新iOS APP  http://blog.cnbang.net/works/2767/

2、JSPatch实现原理详解       http://blog.cnbang.net/tech/2808/

3、JSPatch实现原理详解(完善) http://www.iyeah.net/2015/07/06/3580.html

4、JSpatchGithub地址          https://github.com/bang590/JSPatch

5、JSPatch官网                  http://jspatch.com

6、JSPatch使用文档            https://github.com/bang590/JSPatch/wiki

6、JSPatchConvertor            http://bang590.github.io/JSPatchConvertor/

7、Objective-C对象模型和动态消息发送原理 http://blog.csdn.net/kesalin/article/details/6689226

8、Objective-C运行时编程指南 https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Introduction/Introduction.html

补录

1.在js中 NSNumber不需要在处理,可直接当数值使用。

2. NSRang 初始化:
var range = {location: 0, length: senderName.length()};

3.无论变量还是方法,单下划线全部改为双下划线
4. CGRect 取宽高, 直接rect.width, 不用rect.size.width。其他结构体类似
5.js 中 YES 为 ture,NO 为false
6.替换实例方法第一个参数, 替换类方法是第二个参数

defineClass("FSBackBoardCell", {第一个参数},{第二个参数})

7.oc对象转js对象可操作toJS(),js对象转oc对象暂时没找到方法。
js内创建的字典为js对象,传入oc方法无效

8.jspatch 不支持变参方法,如stringWithFormat,可用js字符串方法或nsmutablestring代替。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值