PandaHook 1.5.7

PandaHook 1.5.7

slience维护。



PandaHook 1.5.7

PandaHook

CI Status Version License Platform

    在学习和使用了aspect后,对于我自己的runtime理解有很大提升。随着我们需求的提升,aspect有些特性并不能满足实际需要。
比如:aspect同一个类的同一个方法只能hook一次,第一次hook成功后的所有hook都会失败。但实际应用中,其他组件可能引用
aspect进行某方法A的hook,导致其他地方就不能使用aspectd对该方法A 进行hook了。并且aspect并不能hook block。在此背景下,我写了这个组件。
    PandaHook的特点有:
        支持普通OC类和block的hook;
        支持同一个类同一个方法的不同时机hook(比如之前、之后、或者替换掉原来实现);
        甚至支持同一个类、同一个方法的相同时机hook。(也就是说,在A组件里hook TargetClass 的 s 方法,同时在其他组件或主工程hook......,均会有效)。
    感谢开源世界,感谢aspect和它的开发者,以及为开源世界做出贡献的所有人!

示例

要运行示例项目,请克隆仓库,然后首先从Example目录运行pod install

    //hook成功会返回自定义实现的block对象,需要外部管理其生命周期
    self.hookBlock = [PandaHook hookClass:targetClass               //要hook的类
                              whichMethod:@selector(targetSel:)     //要hook的方法
                            isClassMethod:YES                       //hook的方法是类方法还是对象方法
                                     when:PandaHookTimeBefore       //PandaHookTime 枚举中的定义值,自定义代码的执行时机
                                     with:^(NSArray *contextArr)    //自定义代码blok,数组内是原方法的参数
    {
        //这里调用自定义实现
    }];

要求

安装

PandaHook通过CocoaPods提供。要安装它,只需将以下行添加到Podfile中:

pod 'PandaHook'

作者

[email protected]

许可证

PandaHook受MIT许可证的约束。更多详情请参阅LICENSE文件。