昨天我尝试在 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 中使用此代码片段时,它会返回一个空指针。 框架、类和方法仍然存在(click me)。 对我的问题有什么想法吗?是否有额外的安全层使得不再可能在 iOS 7 中调用私有(private) API?
谢谢!
最佳答案
在大多数情况下,此类行为意味着此 API 受到授权保护。这是一种跨 iOS 使用的授权方法。大多数 API 的调用都是在进程服务器外进行的。并且该服务器可能会检查客户端是否具有某些特定的权利。权利仅适用于越狱 iOS 上的系统应用和第 3 方应用。
没有简单的方法来检查服务器是否需要授权。但是,有时它会在控制台中写入类似“嘿...您需要授权 X 才能调用 API Y”之类的内容。然而,大多数时候,它会悄无声息地失败。
如果你真的想检查这个,你将不得不反汇编框架以查看它使用哪个服务器并反汇编服务器并找到此 API 的实现。
关于iOS 7 私有(private) API 使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18810049/