简单的iPhone越狱调整无法正常工作

时间:2014-01-08 21:31:47

标签: iphone ios7 jailbreak logos

#import <UIKit/UIAlertView.h>

@class NSObject;

@interface SBIconController : NSObject
+ (SBIconController *)sharedInstance;
- (BOOL)isEditing;
@end

%hook SBIconController
-(void)iconTapped:(id)tapped {
    SBIconController *sbic = [objc_getClass("SBIconController") sharedInstance];
    if ([sbic isEditing]) {
        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Message"  message:[NSString stringWithFormat:@"%@", tapped] delegate:nil cancelButtonTitle:@"OK"  otherButtonTitles:nil];
        [alertView show];
        [alertView release];
    }
    %orig;
}
%end

上面是我用Logos创建的简单调整。由于某些原因安装后,没有任何工作,我只是无法弄清楚问题是什么,我怎么能解决这个问题?

我的其他问题是:

  • 为什么我们在已经有SBIconController课程时声明类似SBIconController的课程?
  • 为什么我们将它声明为NSObject
  • 的子类
  • 为什么我们在调用[SBIconController sharedInstance]而不是[objc_getClass("SBIconController") sharedInstance]时只输入SBIconController?

非常感谢你的帮助!

1 个答案:

答案 0 :(得分:1)

代码很好。我测试了它(我不使用徽标),当您点击应用图标时,确实调用了iconTapped:方法。但是你想用isEditing做什么?此属性指示您是否正在编辑SpringBoard(点按并按住应用程序图标),当它等于YES时,在点击图标时不会调用方法iconTapped:。仅在isEditing等于NO时才会调用它。因此,我建议您在没有if ([sbic isEditing])的情况下插入警报来测试您的调整是否有效。

至于你的其他问题:

  1. 在处理私有API时,我们没有标题,如果我们尝试使用它们会收到警告/错误。在你的情况下它是SBIconController。要解决此问题,我们可以使用各种工具(如class-dump)下载其他人转储的标头,也可以自己声明这些私有API。在你的情况下,它是后者。
  2. 因为SBIconController继承自NSObject
  3. 你可以这样做。当然,当您有课程声明时,您不需要使用objc_getClass。在你的情况下,你甚至不需要这些东西。您可以像使用任何其他obj-C方法一样使用self。您的代码将如下所示:

    %hook SBIconController
    -(void)iconTapped:(id)tapped {
        if ([self isEditing]) {
            UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Message"  message:[NSString stringWithFormat:@"%@", tapped] delegate:nil cancelButtonTitle:@"OK"  otherButtonTitles:nil];
            [alertView show];
            [alertView release];
        }
        %orig;
    }
    %end