HookStatistics includes two way by using method swizzling:
1 use StatisticsManager to hook methods of different classes
2 usually because of referring to business logic,so we could use class category to log user actions
excute command: pod install
First,swizzling method should happens in +(void)load
[self swizzleClassSelector:NSSelectorFromString(@"privateClassMethod") andSelector:NSSelectorFromString(@"hk_privateClassMethod")];
[self swizzleInstanceSelector:NSSelectorFromString(@"privateInstanceMethod") andSelector:NSSelectorFromString(@"hk_privateInstanceMethod")];
[self swizzleInstanceSelector:NSSelectorFromString(@"clickTestNormal") andSelector:NSSelectorFromString(@"hk_clickTestNormal")];
[self swizzleInstanceSelector:NSSelectorFromString(@"someDelegateTriggerWithArg:") andSelector:NSSelectorFromString(@"hk_someDelegateTriggerWithArg:")];
static IMP originBlockMethodImp = NULL;
...
+(void)load{
originBlockMethodImp = [self instanceMethodIMPForSelector:NSSelectorFromString(@"clickTestBlockCompletion:")];
[self swizzleInstanceSelector:NSSelectorFromString(@"clickTestBlockCompletion:")
andSelector:NSSelectorFromString(@"hk_clickTestBlockCompletion:")];
}
...
-(void)hk_clickTestBlockCompletion:(ClickCompletion)block{
//replacement
ClickCompletion hookBlock = ^(NSString *text){
block(text);
//insert color to statistic database;
};
//method-imp
((void (*)(id, SEL, void *))originBlockMethodImp)(self, NSSelectorFromString(@"clickTestBlockCompletion:"),(__bridge void *)hookBlock);
}