好久没更新自己的博客了,最近终于闲下来了, 总结下, 最近使用的 JSPatch,帮助大家节省些学习时间.
JSPatch 是一个开源项目(Github链接),只需要在项目里引入极小的引擎文件,就可以使用 JavaScript 调用任何 Objective-C 的原生接口,替换任意 Objective-C 原生方法。目前主要用于下发 JS 脚本替换原生 Objective-C 代码,实时修复线上 bug。
例如线上 APP 有一段代码出现 bug 导致 crash:
然后我们可以通过写一段JS 代码把上面 tableView代理中的方法全部覆盖,其实就是在下发了 js 代码的工程里,到了这个.m 里不在去执行上面的代码, 转而去执行你通过 JSPatch 平台下发的代码,从而使线上的工程正常运行.如下图:
当然对于如何接入 JSPatch 官网写的很详细, 我在这里就不去赘述.
坑一:
JSPatch一直以来语法特别恶心, 需要遵从他自己的语法才能与 iOS 兼容, 平台在更新了网页之后, 出了一个 OC 转 JSPatch 语法的转换器, 他的初衷是为了来帮助我们简化学习成本, 快速编写代码,但是很可悲的是, 如果你想把全部代码输进去,直接转成你要的 js 代码,是 绝 对 会出错的, 因为他们那个转化器的只能大致转化一句OC, 并不能100%转对...这就给那些过于相信转译器的同学带来了困扰. 所以我的建议是最好去学习官网的代码语言, 如果实在觉得记得麻烦,毕竟没有提示与联想嘛, 那就一句一句把 OC 语言沾到代码转译器里,然后再通过自己的需要改动, 对于 OC 官方的语言他们是没问题的,对于自定义的类或者 define 的属性会转移不好.
坑二:
在他们的官方语法中,没有关于 例如: @property(nonatomic,strong)UILabel *titleLB; 属性的转译语法, 只有全局变量的语法, 但是在我们的工程中大量使用了属性, 一时间无所适从.
但是不要担心:
其实我们可以想象,在 OC 中属性是可以通过 self.xxx 出来, 同样的, 找到该类中的名称, 直接 self.xxx(); 就可以了..同时前面用一个变量来接收下.
我也是个 JSPatch 的初学者, 如果再遇到什么问题, 我会继续更新这个博客.其实使用 JSPatch 不是难, 只是没有方法提示, 我们不好写, 容易少个字母啥的,就出不来效果, 只要大家静心写,仔细点,写出来是没问题的~! O(∩_∩)O