注意:这不是 App Store 的应用程序,所以使用私有 API 对我来说不是问题。
我一直在尝试根据这个 SO 问题使用 Xamarin/Monotouch 关闭和重新打开飞行模式:如何使用私有 API 在 IOS 5.1 中打开/关闭飞行模式
我很难让这段代码在单点触控中运行——我尝试的第一件事是使用单点触控绑定项目创建一个本机目标 C 库。
使用了 AppSupport 框架,所以我的链接文件如下:
[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
有没有更好或更简单的方法来做到这一点?如果没有,谁能建议我目前的方法做错了什么?