10

昨天我尝试在 iOS 7 中使用 Private 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 中使用此代码片段时,它会返回一个空指针。框架、类和方法仍然存在(点击我)。对我的问题有任何想法吗?是否有额外的安全层使其不再可能在 iOS 7 中调用私有 API?

谢谢!

4

1 回答 1

8

在大多数情况下,这种行为意味着此 API 受到权利的保护。这是一种跨 iOS 使用的授权方法。大多数 API 调用进程服务器。该服务器可能会检查客户端是否具有某些特定权利。权利仅适用于越狱 iOS 上的系统应用程序和 3rd 方应用程序。

没有简单的方法来检查服务器是否需要权利。但是,有时它会在控制台中写入类似“嘿……您需要权利 X 才能调用 API Y”之类的内容。但是,大多数时候,它会默默地失败。

如果您真的想检查这一点,您将不得不反汇编框架以查看它使用哪个服务器并反汇编服务器并找到此 API 的实现。

于 2013-09-15T14:53:46.243 回答