美文网首页
Aspects的hook冲突问题解决

Aspects的hook冲突问题解决

作者: 千若逸 | 来源:发表于2017-10-07 18:54 被阅读295次

    利用MonkeyDev分析一个第三方App时,通常可以采用hook UIViewController的viewWillAppear:方法 来打印当前显示视图的vc名,但是现在大部分app内部为了方便数据统计起见,早就对 viewWillAppear: 进行了method swizzling处理,如果这个时候使用Aspects 对 UIViewController的viewWillAppear:方法进行hook时,运行就会出现undeclared selector 错误,为什么会出现这个错误,在JSPatch作者团队写的 面向切面编程之 Aspects 源码解析及应用 一文中已经有分析。

    如何解决这个问题呢?答案其实已经给出来了,JSPatch也是用类似的方法进行hook,但对这个问题进行了兼容处理,所以只需要在项目中pod引进JSPatch,创建demo.js,然后增加类似的代码:

    defineClass('UIViewController', {
    viewWillAppear: function(animated) {
        self.ORIGviewWillAppear(animated);
        console.log('viewWillAppear jspatch! ');
        UIViewController.printClassString(self);
    }
        });
    

    查找资料的过程中发现了一个比较不错的库,JGMethodSwizzler: Powerful and easy to use Objective-C swizzling API.,对swizzling API 进行了简化,更重要的它可以对已经swizzling 的API 进行反向恢复操作,Kapeli/Dash-iOS 中似乎就使用了它。

    参考:

    相关文章

      网友评论

          本文标题:Aspects的hook冲突问题解决

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