Como jrtc27 describes in his answer (y I mentioned here), es necesario conceder a la aplicación de un derecho especial en orden a con éxito cambiar la propiedad airplaneMode
.
Aquí hay un ejemplo de archivo entitlements.xml para agregar a su proyecto:
<!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 es el archivo donde la preferencia modo avión se almacena, así que eso es lo que necesita escribir acceso a.
No, no es necesario utilizar dlopen
o dlsym
para acceder a esta API. Puede agregar el marco AppSupport a su proyecto directamente (con la excepción de que AppSupport.framework
se almacena en su Mac bajo la carpeta PrivateFrameworks
). Luego, solo crea una instancia de un objeto RadiosPreferences
y úsalo normalmente. El derecho es la parte importante.
Para su código, primero use class-dump, o class-dump-z, para generar el archivo RadiosPreferences.h, y agréguelo a su proyecto. Entonces:
#import "RadiosPreferences.h"
y hacer
RadiosPreferences* preferences = [[RadiosPreferences alloc] init];
preferences.airplaneMode = YES; // or NO
[preferences synchronize];
[preferences release]; // obviously, if you're not using ARC
sólo lo he probado esto para una aplicación de jailbreak. No estoy seguro de si es posible adquirir esta autorización si el dispositivo no tiene jailbreak (consulte el comentario de Victor Ronin). Pero, si se trata de una aplicación de jailbreak, asegúrese de recordar firmar su archivo ejecutable con el archivo de derechos. Normalmente firmo aplicaciones jailbreak con ldid, por lo que si mi archivo de derechos es derechos.xml, a continuación, después de la construcción en Xcode without code signing, me ejecutar
ldid -Sentitlements.xml $BUILD_DIR/MyAppName.app/MyAppName
Here's Saurik's page on code signing, and entitlements
¿alguna vez resolver esto? – ninjaneer