Использование iOS 7 для частного API

Вчера я попытался использовать Private API в iOS 7, но он не работает. Следующие вызовы отлично работают с 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 он возвращает нулевой указатель. Структура, класс и методы все еще существуют (нажмите меня). Любая идея для моей проблемы? Есть ли дополнительный уровень безопасности, который делает невозможным вызов частного API в iOS 7?

Спасибо!

Ответ 1

В большинстве случаев такое поведение означает, что этот API был защищен правом. Это метод авторизации, используемый в iOS. Большая часть API вызывается из сервера процессов. И этот сервер может проверить, имеет ли клиент определенное право. Права доступа доступны только для системных приложений и сторонних приложений на jailbroken iOS.

Нет простого способа проверить, требует ли сервер права. Однако иногда он пишет в консоли что-то вроде "Эй... Вам нужно право X называть API Y". Однако большую часть времени он терпит неудачу.

Если вы действительно хотите это проверить, вам придется разобрать фреймворк, чтобы узнать, какой сервер он использует и разобрать сервер, и найти реализацию этого API.