Вопрос по iphone, ios – Как включить / выключить режим полета в IOS 5.1 с помощью частного API

14

Я пытаюсь включить / выключить режим полета в IOS 5.1, используя частные платформы.

В AppSupport.framework,RadiosPreferences имеет свойство получать / устанавливать режим полета и устанавливать значение

./AppSupport.framework/RadiosPreferences.h:

@property BOOL airplaneMode;

./AppSupport.framework/RadiosPreferences.h:

- (void)setAirplaneMode:(BOOL)arg1;

Как я могу использовать эти методы? Нужно ли использоватьdlsym как-то создать объект и вызвать методы? Может кто-нибудь помочь мне с примером кода или способов сделать это.

ты когда-нибудь это понимал? ninjaneer

Ваш Ответ

2   ответа
6

jrtc27 описывает в своем ответе (а такжеЯ упоминал здесь), вам необходимо предоставить вашему приложению особые права, чтобыsuccessfully изменить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 это файл, в котором фактически сохранены предпочтения режима полета, так что вам нужен доступ для записи.

Noвам не нужно использоватьdlopen или жеdlsym чтобы получить доступ к этому API. Вы можете добавитьAppSupport рамки для вашего проекта напрямую (за исключением того, чтоAppSupport.framework хранится на вашем Mac подPrivateFrameworks папка). Затем просто создайте экземплярRadiosPreferences объект, и используйте его как обычно. Право является важной частью.

Для вашего кода, сначалаиспользовать класс-дамп, или жеКласс-свалка-г, чтобы создать файл 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

Я проверял это только для взломанного приложения. Я не уверен, возможно ли получить это право, если устройство не взломано (см. Комментарий Виктора Ронина). Но, если это приложение для джейлбрейка, не забудьте подписать свой исполняемый файлwith файл прав. Я обычно подписываю приложения для джейлбрейкаldid, так что если мой файл разрешенийentitlements.xmlпотом после сборки в Xcodewithout code signingЯ бы казнил

ldid -Sentitlements.xml $BUILD_DIR/MyAppName.app/MyAppName

Вот страница Saurik по подписанию кода и правам

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
3

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
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded

Похожие вопросы