美文网首页
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