3

注:これはApp Store向けのアプリではないため、プライベートAPIを使用することは私には関係ありません。

このSOの質問に基づいて、Xamarin / Monotouchを使用して機内モードのオンとオフを切り替えようとしています:プライベートAPIを使用してIOS5.1で機内モードをオン/オフにする方法

このコードをモノタッチで実行するのに苦労しています。最初に試したのは、モノタッチバインディングプロジェクトを使用してネイティブのObjectiveCライブラリを作成することでした。

AppSupportフレームワークが使用されているため、linkwithファイルは次のようになります。

[assembly: LinkWith ("libAirplaneModeLib.a", LinkTarget.ArmV7, ForceLoad = true, Frameworks = "AppSupport")]

これを行うと、コンパイルされますが、メインプロジェクトから名前空間を参照できません。次のようなフレームワークを含めない場合:

[assembly: LinkWith ("libAirplaneModeLib.a", LinkTarget.ArmV7, ForceLoad = true)]

この場合、名前空間を参照できますが、メインプロジェクトは次のリンクでコンパイルされます。

  "_OBJC_CLASS_$_RadiosPreferences", referenced from:
      objc-class-ref in libAirplaneModeLib.a(AirplaneModeLib.o)
ld: symbol(s) not found for architecture armv7
collect2: ld returned 1 exit status

error MT5202: Native linking failed. Please review the build log.

私のApiDefinitionファイルは次のとおりです。

[BaseType(typeof(NSObject))]
public interface AirplaneModeLib
{
    [Export("toggleAirplane")]
    void ToggleAirplane ();
}

ネイティブライブラリは次のとおりです。

#import "AirplaneModeLib.h"
#import "RadiosPreferences.h"

@implementation AirplaneModeLib

- (void) toggleAirplane {
    RadiosPreferences* preferences = [[RadiosPreferences alloc] init];
    preferences.airplaneMode = NO;
    [preferences synchronize];

    preferences.airplaneMode = YES; 
    [preferences synchronize];
    [preferences release];        
}

@end

これを行うためのより良いまたはより簡単な方法はありますか?そうでない場合、誰かが私の現在のアプローチで間違っていることを提案できますか?

4

1 に答える 1

0

解決したようです。何らかの理由で、バインディングプロジェクトはAppSupportフレームワークを参照できません(または、私が知らない何らかの方法で参照できます)

私のメインプロジェクトでは、追加のビルド引数を手動で追加しました

-gcc_flags "-F /path/to/framework -framework AppSupport"

そして今はうまくコンパイルされます。それでも機内モードは切り替わりませんが、それは別の問題だと思います...

このコードは実行されますが、機内モードは切り替えられないようです。私が知る限り、iOS5以降のジェイルブレイクされていないデバイスでこれを行う方法はありません。

于 2013-03-19T14:55:54.223 に答える