昨天我尝试在iOS 7中使用私有API,但它不起作用。 以下调用适用于iOS 6:
1. NSBundle *b = [NSBundle bundleWithPath:@"/System/Library/PrivateFrameworks/AppleAccount.framework"];
2. BOOL success = [b load];
3.
4. Class AADeviceInfo = NSClassFromString(@"AADeviceInfo");
6.
7. NSLog(@"-- serialNumber: %@", [AADeviceInfo serialNumber]);
8. NSLog(@"-- udid: %@", [AADeviceInfo udid]);
在iOS 7中使用此代码段时,它会返回一个空指针。 框架,类和方法仍然存在(click me)。 对我的问题有什么想法吗?是否有额外的安全层使得不再能够在iOS 7中调用私有API?
谢谢!
答案 0 :(得分:8)
在大多数情况下,此类行为意味着此API受权利保护。这是跨iOS使用的授权方法。大多数API调出进程服务器。此服务器可能会检查客户端是否具有某些特定权利。权利仅适用于越狱iOS上的系统应用和第三方应用。
没有简单的方法来检查服务器是否需要权利。但是,有时它会在控制台中写入类似“嘿......你需要权利X来调用API Y”。但是,大多数时候,它无声地失败。
如果你真的想检查一下,你将不得不反汇编框架以查看它使用的服务器和反汇编服务器并找到该API的实现。