这是怎么回事? - 越狱调整

时间:2014-03-19 02:20:22

标签: ios ios7 hook jailbreak theos

我对越狱iOS调整开发非常新,并且有一个问题。我按照教程在每次从Springboard打开应用程序时显示警报。调整代码是:

#include <UIKit/UIKit.h>
@interface SBApplicationIcon
- (void)launchFromLocation:(int)arg;
- (id)displayName;
@end

%hook SBApplicationIcon

-(void)launchFromLocation:(int)location{

        NSString *appName = [self displayName];
        NSString *message = [NSString stringWithFormat:@"Application launched: %@", appName];
        UIAlertView *myAlert = [[UIAlertView alloc]initWithTitle:appName message:message delegate:nil cancelButtonTitle:@"Yes" otherButtonTitles:@"No", nil];
        [myAlert show];

    %orig;
}//end function

%end

这个调整代码工作得很好。我不明白的是这是如何运作的。查看SBApplicationIcon的头文件,没有这样的方法 - (void)launchFromLocation:(int)location;

经过一些研究后我发现SBIcon类头具有这个确切的函数定义。如果我将代码更改为:

#include <UIKit/UIKit.h>
@interface SBIcon
- (void)launchFromLocation:(int)arg;
- (id)displayName;
@end

%hook SBIcon

-(void)launchFromLocation:(int)location{

        NSString *appName = [self displayName];
        NSString *message = [NSString stringWithFormat:@"Application launched: %@", appName];
        UIAlertView *myAlert = [[UIAlertView alloc]initWithTitle:appName message:message delegate:nil cancelButtonTitle:@"Yes" otherButtonTitles:@"No", nil];
        [myAlert show];

    %orig;
}//end function

%end

警报视图不会显示,并且永远不会调用该功能!我觉得这是一个愚蠢的问题,但我根本不明白这是如何运作的。有人可以向我解释一下吗?我使用的是iOS7标头和iOS7 iPhone。

谢谢!

1 个答案:

答案 0 :(得分:1)

SBIcon的启动方法(因为至少iOS 5,之前不知道)一直存在只是在子类中被覆盖,例如SBLeafIcon,即SBApplicationIcon的超类。在iOS 7中,-launchFromLocation也是如此:因此,SBIcon的实现从未调用过(如果它只是一个空方法,为什么要调用super?),所以你的代码永远不会运行如果你挂钩SBIcon。