困了好几天,UIApplication下这几个函数都无法hook,问大神究竟错在何处呢?代码如下:
#import <substrate.h>
//ApplicationHooks=======================================================
%hook UIApplication
-(void)applicationDidBecomeActive:(UIApplication *)application{
%log((NSString *)@"jy-7 ");
}
-(void)applicationDidEnterBackground:(UIApplication *)application{
%log((NSString *)@"jy-8 ");
}
%end
gangzimo
(gangzimo)
2
这两个函数都是UIApplication里定义的protocol,你需要到对应的App Delegate去hook看效果。另外,hook函数里%orig;也没调用,你确定要覆盖掉?
跟@gangzimo 说的一样,因为这2个方法根本就不是定义在UIApplication里的,而是协议方法。你需要到实现了这个协议的类里去hook它们
可是很奇怪,hook了UIApplicationDelegate的protocol也同样没有效果,看文档资料说是什么回调参数,不知道会不会因此而不能用常规方法hook呢?
gangzimo
(gangzimo)
5
protocol只是声明,具体实现是没有的。要去找实现方法hook,protocol hook了是没用的。
@interface SpringBoard : FBSystemApp SBPowerDownControllerDelegate, MCProfileConnectionObserver, **UIApplicationDelegate**
如上在SpringBoard中定义了遵循UIApplicationDelegate,那是否说明通过hook SpringBoard即可?
1 个赞
gangzimo
(gangzimo)
8
还是要看SpringBoard有没有实现其中protocol,protocol可以是optional的,看代码吧