Как включить / выключить режим полета в IOS 5.1 с помощью частного API
Я пытаюсь включить / выключить режим полета в IOS 5.1, используя частные платформы.
В AppSupport.framework, RadiosPreferences
имеет свойство получать / устанавливать режим полета и устанавливать значение
./AppSupport.framework/RadiosPreferences.h:
@property BOOL airplaneMode;
./AppSupport.framework/RadiosPreferences.h:
- (void)setAirplaneMode:(BOOL)arg1;
Как я могу использовать эти методы? Нужно ли использовать dlsym
как-то создать объект и вызвать методы? Может кто-нибудь помочь мне с примером кода или способов сделать это.
2 ответа
Как jrtc27 описывает в своем ответе (и я упомянул здесь), вам нужно предоставить вашему приложению особые права, чтобы успешно изменить airplaneMode
имущество.
Вот пример файла authorlements.xml для добавления в ваш проект:
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.SystemConfiguration.SCDynamicStore-write-access</key>
<true/>
<key>com.apple.SystemConfiguration.SCPreferences-write-access</key>
<array>
<string>com.apple.radios.plist</string>
</array>
</dict>
</plist>
com.apple.radios.plist - это файл, в котором на самом деле хранятся настройки режима полета, поэтому вам нужен доступ для записи.
Нет, вам не нужно использовать dlopen
или же dlsym
чтобы получить доступ к этому API. Вы можете добавить платформу AppSupport в свой проект напрямую (за исключением того, что AppSupport.framework
хранится на вашем Mac под PrivateFrameworks
папка). Затем просто создайте экземпляр RadiosPreferences
объект, и используйте его как обычно. Право является важной частью.
Для своего кода сначала используйте class-dump или class-dump-z, чтобы сгенерировать файл RadiosPreferences.h и добавить его в свой проект. Затем:
#import "RadiosPreferences.h"
и делать
RadiosPreferences* preferences = [[RadiosPreferences alloc] init];
preferences.airplaneMode = YES; // or NO
[preferences synchronize];
[preferences release]; // obviously, if you're not using ARC
Я только что проверил это для взломанного приложения. Я не уверен, возможно ли получить это право, если устройство не взломано (см. Комментарий Виктора Ронина). Но, если это приложение для джейлбрейка, не забудьте подписать свой исполняемый файл файлом полномочий. Обычно я подписываю приложения для джейлбрейка с помощью ldid, поэтому, если мой файл разрешений имеет имя authorlements.xml, то после сборки в Xcode без подписи кода я выполню
ldid -Sentitlements.xml $BUILD_DIR/MyAppName.app/MyAppName
Добавлять com.apple.SystemConfiguration.SCPreferences-write-access
к списку ваших прав и установите его в значение true (возможно, вам потребуется создать список). Я считаю, что должно работать следующее - если это не так, я могу посмотреть позже вечером, когда смогу проверить это:
NSBundle *bundle = [NSBundle bundleWithPath:@"/System/Library/PrivateFrameworks/AppSupport.framework"];
BOOL success = [bundle load];
Class RadiosPreferences = NSClassFromString(@"RadiosPreferences");
id radioPreferences = [[RadiosPreferences alloc] init];
[radiosPreferences setAirplaneMode:YES]; // Turns airplane mode on