0

我想检查屏幕是否被私有 api 锁定。

我从谷歌得到一些代码:

#import <SpringBoard/SpringBoard.h>  
#import <SpringBoard/SBAwayController.h>

Class clsAway = objc_allocateClassPair(clsAlert, "SBAwayController", 0);
objc_registerClassPair(clsAway);

Class clsAwayController = objc_getClass("SBAwayController");
SBAwayController * controller = [clsAwayController sharedAwayController];

if ([controller isLocked]){
    NSLog(@"double check Home ,now YES Lock");
}
else{
    NSLog(@"double check Home ,now NO Lock");
}

为了使这些代码正常工作,我从 kennytm 的 github 下载私有头文件并导入 SpringBoard.h 和 SBAwayController.h 编译好并在我的 iPhone 4S 上运行它,似乎我可以使用 objc_getClass("SBAwayController "); 但是程序崩溃了:

SBAwayController * controller = [clsAwayController sharedAwayController];

出现错误:'+[SBAwayController sharedAwayController]:无法识别的选择器发送到类 0x1456c0'

我需要任何其他工作才能使这些代码正常工作吗?我知道私有 api 的使用会导致 Apple 的拒绝,但我只想知道如何使它工作。感谢您的任何建议!

4

3 回答 3

1

SBAwayController 在 iOS 5 中没有被删除。你怎么能期望从另一个进程中使用 SpringBoard 方法?SpringBoard 不是框架。它是一个可执行文件。

于 2012-08-12T04:03:36.100 回答
0

我相信 SBAwayController 在 iOS 5 中被删除了。我检查了 SpringBoard,它只有这个类的回忆。

于 2012-07-19T22:49:37.490 回答
0

维克多错了。该类仍然存在于 iOS 6 中

cy# c = SBAwayController.sharedAwayController;
@"<SBAwayController: 0x1c510580> <SBActivationContext: 0x1c50be50> activate:  deactivate: "

cy# printMethods(SBAwayController);
[{selector:@selector(hasEverBeenLocked),implementation:0x109c49},{selector:@selector(activateLostModeForRemoteLock:),implementation:0x116505},{selector:@selector(unlockWithSound:),implementation:0x110835},{selector:@selector(frontLocked:animate:automatically:),implementation:0x1120d5},{selector:@selector(cancelDimTimer),implementation:0x11291d},{selector:@selector(activeAwayPluginController),implementation:0x116885},{selector:@selector(shouldShowInCallUI),implementation:0x116111
...
于 2012-12-12T19:49:08.703 回答