我的iphone应用程序已越狱,我不在乎应用程序商店是否拒绝了我的应用程序。
我希望在我的程序中使用私有API DevicePINController
。
我最近发现名为DevicePINController
的私有API,但它无法正常工作。应用程序运行,除了它的方法之外什么也不做。它的BOOL
方法总是返回false。设置方法不做任何事情。
有谁知道设备引脚控制器需要哪些权利?
修改:CODE
id away = [[objc_getClass("DevicePINController") alloc]init];
NSLog( [away simplePIN] ? @"YES":@"NO" );
NSLog( [away _isBlocked] ? @"YES":@"NO" );
NSLog( [away _attemptValidationWithPIN:@"1234"] ? @"YES":@"NO" );
NSLog(@"%d",[away _unblockTime] );
NSLog(@"%@",[away blockedStateKey] );
NSLog(@"%@",[away blockTimeIntervalKey] );
NSLog(@"%@",[away failedAttemptsKey] );
NSLog(@"%d",[away pinLength] );
NSLog(@"%@",[away stringsBundle] );
NSLog(@"%@",[away stringsTable]);
每个方法调用都会返回错误的答案。有些只返回null。布尔总是回归NO。
答案 0 :(得分:1)
所以,第一个问题是你有一个nil
对象。在Objective-C中,向nil
对象发送消息将不起作用。如果该方法应该返回BOOL
,则默认值BOOL
为NO
,因此如果离开为零,您将获得一堆NO。
要回答您的后续问题(在您测试之后确实有nil
值)... 执行需要确保您的应用打开图书馆DevicePINController
已定义。否则,它将不知道该类是什么,并且将无法实例化它。因此,objc_getClass
会返回nil
对象。
对于该课程,它在 Preferences.framework 中定义,位于
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/System/Library/PrivateFrameworks/Preferences.framework
(显然,请调整您的安装目录和/或SDK版本)
您可以通过转到目标设置将其添加到Xcode中的项目中 - > 构建阶段 - > 将二进制文件链接到库并添加它。您当然必须导航到上面的目录,因为它是一个私有框架,并且不会显示在初始弹出列表中。
或者,您可以使用代码动态加载库:
#import <objc/runtime.h>
#include <dlfcn.h>
和
void* libHandle = dlopen("/System/Library/PrivateFrameworks/Preferences.framework/Preferences", RTLD_LAZY);
id away = [[objc_getClass("DevicePINController") alloc] init];
if (away == nil) {
NSLog(@"object is nil");
} else {
if ([away respondsToSelector: @selector(simplePIN)]) {
NSLog(@"object responds to selector!");
}
}
close(libHandle);
我在iOS 6.1(越狱)上进行了测试,但它确实有效。
顺便说一下,请将您的个人识别码更改为1234
以外的其他人。我的行李箱上有相同的组合;)