How to turn on/off airplane mode in IOS 5.1 using private API

ios, iphone, iphone-privateapi

Solution

As jrtc27 describes in his answer (and I mentioned here), you need to grant your app a special entitlement in order to successfully change the `airplaneMode` property.

Here's a sample entitlements.xml file to add to your project:

<!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 is the file where the airplane mode preference is actually stored, so that's what you need write access to.

No, you don't need to use `dlopen` or `dlsym` to access this API. You can add the AppSupport framework to your project directly (with the exception that `AppSupport.framework` is stored on your Mac under the `PrivateFrameworks` folder). Then, just instantiate a `RadiosPreferences` object, and use it normally. The entitlement is the important part.

For your code, first use class-dump, or class-dump-z, to generate the RadiosPreferences.h file, and add it to your project. Then:

#import "RadiosPreferences.h"

and do

RadiosPreferences* preferences = [[RadiosPreferences alloc] init];
preferences.airplaneMode = YES;  // or NO
[preferences synchronize];
[preferences release];           // obviously, if you're not using ARC

I've only tested this for a jailbroken app. I'm not sure if it's possible to acquire this entitlement if the device isn't jailbroken (see Victor Ronin's comment). But, if this is a jailbreak app, make sure you remember to sign your executable with the entitlements file. I normally sign jailbreak apps with ldid, so if my entitlements file is entitlements.xml, then after building in Xcode without code signing, I would execute

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

Here's Saurik's page on code signing, and entitlements

Problem

I am trying to toggle on/off airplane mode in IOS 5.1 using private frameworks. In AppSupport.framework, `RadiosPreferences` has a property to get/set the airplane mode and set the value ./AppSupport.framework/RadiosPreferences.h: ``` @property BOOL airplaneMode; ``` ./AppSupport.framework/RadiosPreferences.h: ``` - (void)setAirplaneMode:(BOOL)arg1; ``` How can I use these methods? Do I need to use `dlsym` somehow to create an object and call the methods? Can someone help me with sample code or ways to do it.

Original source

Related problems