关于JSPatch的一些坑

作者: jing091111 | 来源:发表于2017-05-12 18:53 被阅读256次

发出去的app 出现bug 鞭长莫及?有热修复的出现再也不用担心了。可以在客户还没发现就偷偷的把bug修复了。JSPatch我相信有好多人会用的,但是否真的了解他的原理呢?是否发现一些坑呢?

1.前段时间苹果封杀了JSPatch,但苹果只根据关键字的过滤,我的做法就是把JSPatch重写,一个主类有几千行代码,看的真心累啊!我把它拆分成几个子类,我想就算是原创作者都认不出来了吧?不多说了上代码。。。

这些类都是一个类拆分出来的,搞不懂原创作者为什么要写成一个类,就是为了让人看不懂吗?

整改后的JSPatch已经成功通过苹果的审核了。但拆分也不是一件简单的时间,改一下几十个bug,再动下又出现几十个,就是这样一点点修复掉,最坑的应该要算是哪些C语言的静态方法和静态变量了。需要改成oc的静态方法写法就ok了。

2.原理的话网上有很多就不再重复了,什么消息转发  runtime 之类的。只要去看都有的

3.说说遇到的坑

如果你需要修改父类的某个方法同时也需要修改子类的这个方法,就会出现问题。举个例子:WBTakeTheirHomeViewController继承WBBaseViewController,我需要修改WBBaseViewController里面的viewDidLoad方法,同时也需要修改WBTakeTheirHomeViewController类的viewDidLoad方法,这时候就会出现如果js里面是父类的viewDidLoad写在前面,子类的viewDidLoad就不会被运行,同样如果写在前面的是子类的viewDidLoad父类的viewDidLoad就不会被运行

defineClass('WBBaseViewController',

{viewDidLoad: function(){

self.ORIGviewDidLoad();

self.setValue_forKey(false, "olViewControllers");

},});

defineClass('WBTakeTheirHomeViewController',

{viewDidLoad: function(){

self.ORIGviewDidLoad();

console.log("测试===jing");

},});

为什么会这样呢?看下调用栈:

方法已经被交互了,方法名已经不在是viewDidLoad了。

所以我的解决方法就是把写在下面的那个viewDidLoad替换成ORIGviewDidLoad

defineClass('WBBaseViewController',

{viewDidLoad: function(){

self.ORIGviewDidLoad();

self.setValue_forKey(false, "olViewControllers");

},});

defineClass('WBTakeTheirHomeViewController',

{ORIGviewDidLoad: function(){

//self.ORIGviewDidLoad();  //并且去掉这句

console.log("测试===jing");

},});

测试下 完美通过了。

相关文章

  • 关于JSPatch的一些坑

    发出去的app 出现bug 鞭长莫及?有热修复的出现再也不用担心了。可以在客户还没发现就偷偷的把bug修复了。JS...

  • 初识 JSPatch

    前言说明: 前段时间看新浪微博的一些文章,有位叶大神提到 JSPatch 的作者和一些关于 JSPatch 的...

  • 集成JSPatch遇到的问题总结

    何为JSPatch这里就不在赘述,本文主要讲解下,集成JSPatch过程和遇到的坑. 1,需要导入的框架 a...

  • JSPatch使用坑记录

    本文只用做记录一些使用JSPatch过程中出现的坑 编译的坑 如果你直接把作者的demo拿过来,然后把各种东西放进...

  • 关于JSPatch的一些总结

    原理基础 JSPatch 之所以能做到通过 JS 调用和改写 OC 方法最根本的原因是 Objective-C 是...

  • 关于JSPatch使用CGRect踩过的坑

    说道JSPatch,相信iOS开发人员都不陌生,能实时修复iOS bug,想想都让人激动。如果想详细了解请参照大牛...

  • JSPatch 浅探

    前言 JSPatch下载地址自己实现JSPatch的功能 修改JSPatch JSPatch简介 JSPatch ...

  • JSPatch 踩过的坑

    https://github.com/bang590/JSPatch/issues/9 selector btn....

  • JSPatch的趟坑之路

    不能使用 宏/常量/枚举 (所以所有的自定义字体\颜色宏都得用原始值, 就连系统自带的枚举值都得用原始值)(自定义...

  • JSPatch 踩坑日记

    写给蠢蠢的自己 一定要记得时刻加括号括号括号()()()啊小伙伴们 一些小细节坑了我一下午 2. 特殊类型JSPa...

网友评论

  • 一个小小熊:这样子拆分,现在还能通过审核吗?发现用最新 jspatch 这段时间又被拒了。
    jing091111:@一个小小熊 :sob: 今天被拒了,看来苹果改了方案了
    一个小小熊:@jing091111 嗯嗯 :clap:
    jing091111:四月份的时候过了,五月还没试呢!好像现在更严了。周一会提审核有结果告诉你们哈
  • 春暖花已开:你加的图片为什么都不显示呀:cry::cry::cry:

本文标题:关于JSPatch的一些坑

本文链接:https://www.haomeiwen.com/subject/umctxxtx.html