14

プライベートフレームワークを使用して、IOS5.1で機内モードのオン/オフを切り替えようとしています。

AppSupport.frameworkにRadiosPreferencesは、機内モードを取得/設定し、値を設定するプロパティがあります

./AppSupport.framework/RadiosPreferences.h

@property BOOL airplaneMode;

./AppSupport.framework/RadiosPreferences.h

- (void)setAirplaneMode:(BOOL)arg1;

これらの方法をどのように使用できますか?dlsymオブジェクトを作成してメソッドを呼び出すために、何らかの方法で使用する必要がありますか?誰かがサンプルコードまたはそれを行う方法を手伝ってくれますか?

4

2 に答える 2

7

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.frameworkPrivateFrameworksRadiosPreferences

コードでは、最初に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のページは次のとおりです

于 2012-11-19T23:18:40.483 に答える
3

エンタイトルメントのplistに追加com.apple.SystemConfiguration.SCPreferences-write-accessし、trueに設定します(plistを作成する必要がある場合があります)。私は次のことがうまくいくと信じています-それがうまくいかない場合は、今夜、テストできるときに後で見ることができます:

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
于 2012-11-15T08:04:00.210 に答える