如何使用Xamarin.Mac绑定到系统框架?

时间:2017-10-25 13:48:15

标签: macos xamarin xamarin.mac cryptotokenkit

我正在制作与智能卡交互的应用程序。 为此,我想使用CryptoTokenKit框架,它是Mac上的标准框架(位于/System/Library/Frameworks/CryptoTokenKit.framework)。

此链接表示可以在Mac项目中绑定框架: https://developer.xamarin.com/guides/cross-platform/macios/native-references/

我使用以下sharpie命令创建了ApiDefinition.cs文件和StrucsAndEnums.cs文件: sharpie bind -framework ./CryptoTokenKit.framework -sdk macosx10.13 -o~ / CryptoTokenKitBinding

我在互联网上找不到任何关于如何实现上述文件并开始使用框架的信息。

1 个答案:

答案 0 :(得分:4)

在解决方案中创建Xamarin.Mac绑定项目。

NativeReference添加到:

/System/Library/Frameworks/CryptoTokenKit.framework

使用sharpie

绑定它
sharpie bind \
    -o CryptoTokenKitFramework \
    -namespace CryptoTokenKit \
    -sdk macosx10.13 \
    -f /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/CryptoTokenKit.framework

绑定项目模板和sharpie输出之间不匹配,因此您可以删除ApiDefinition.cs并添加ApiDefinitions.cs或只覆盖创建的模板:

mv CryptoTokenKitFramework/ApiDefinitions.cs CryptoTokenKitFramework/ApiDefinition.cs

会有很多属性,(版本会随之改变):

[Watch (4,0), TV (11,0), Mac (10,12), iOS (10,0)]

由于这些是iOS,Watch,TV上的 私有 框架,因此剥离这些平台。保留Mac属性和原始版本:

[Mac (10,11)]

注意:PlatformAttribute已过时但sharpie仍在使用它(假设向后版本兼容性(?)),因此如果您真的想要清理构建,可以使用Introduced输出:

[Introduced (PlatformName.MacOSX, 10, 11, PlatformArchitecture.Arch64)]

必须审核/更正一些[Verify]属性。即TKSmartCardUserInteraction.CancelTKSmartCardSlot.MakeSmartCard都应该是方法而不是属性。

示例/生成:

// -(TKSmartCard * _Nullable)makeSmartCard;
[NullAllowed, Export ("makeSmartCard")]
[Verify (MethodToProperty)]
TKSmartCard MakeSmartCard { get; }

修正:

// -(TKSmartCard * _Nullable)makeSmartCard;
[NullAllowed, Export("makeSmartCard")]
TKSmartCard MakeSmartCard();

修复剩余的[Verify]属性和编译器错误,有一堆坏方法签名,指针,返回类型等等。生成并需要更正。

注意:为了让您的生活更轻松,请确保您使用的是最新的Sharpie版本:

Version:  3.4.0
SHA1:     c12859dac8d43121b5a9ed866a0db8409f9df817
URL:      https://dl.xamarin.com/objective-sharpie/ObjectiveSharpie-3.4.0.pkg