jrtc27が彼の回答で説明しているように(そして私がここで述べたように)、プロパティを正常に変更するには、アプリに特別な資格を付与する必要がありairplaneMode
ます。
プロジェクトに追加するサンプルのentitlements.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は、機内モード設定が実際に保存されているファイルであるため、書き込みアクセスが必要です。
いいえ、このAPIを使用しdlopen
たりアクセスしたりする必要はありません。AppSupportフレームワークをプロジェクトに直接dlsym
追加できます( Macのフォルダーの下に保存されている場合を除く)。次に、オブジェクトをインスタンス化して、通常どおりに使用します。資格は重要な部分です。AppSupport.framework
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
私はこれをジェイルブレイクされたアプリに対してのみテストしました。デバイスがジェイルブレイクされていない場合にこの資格を取得できるかどうかはわかりません(Victor Roninのコメントを参照)。ただし、これがジェイルブレイクアプリの場合は、実行可能ファイルにエンタイトルメントファイルで署名することを忘れないでください。私は通常、 ldidを使用して脱獄アプリに署名します。したがって、資格ファイルがentitlements.xmlの場合、コード署名なしでXcodeをビルドした後、実行します。
ldid -Sentitlements.xml $BUILD_DIR/MyAppName.app/MyAppName
コード署名と資格に関するSaurikのページは次のとおりです