Использование 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.