我正在尝试将我的快速框架与Xamarin绑定。我正在使用客观的Sharpie。
sharpie bind -sdk iphoneos11.1 MyFramework.framework/Headers/MyFramework-Swift.h -output=MyFrameworkCS -namespace=MyFramework
我收到了APIDefinitions.cs文件,但它有超过79,000行并且有很多错误。 StructsAndEnums.cs文件也很庞大。
我的框架(和.h文件)只有UIKit,AVFoundation和Foundation的import语句。但是APIDefinitions.cs有这个。
using System;
using AVFoundation;
using AudioToolbox;
using AudioUnit;
using CloudKit;
using CoreAnimation;
using CoreAudio;
using CoreData;
using CoreFoundation;
using CoreGraphics;
using CoreImage;
using CoreLocation;
using CoreMIDI;
using CoreMedia;
using CoreMidi;
using CoreText;
using CoreVideo;
using Darwin;
using Dispatch;
using FileProvider;
using Foundation;
using HyperSecureSDK;
using IOSurface;
using ImageIO;
using Intents;
using MediaToolbox;
using Metal;
using ObjCRuntime;
using ObjectiveC;
using OpenGLES;
using Security;
using UIKit;
using simd;
我对Xamarin非常陌生并超级坚持到这里。任何帮助将不胜感激!
答案 0 :(得分:2)
您需要限制范围,添加标题所在的路径。使用-scope
命令和library/Headers/
参数。
例如。 sharpie bind -sdk iphoneos11.2 -output myLibrary -scope myLibrary/Headers/ mainHeader.h
答案 1 :(得分:1)
答案 2 :(得分:1)
您需要定义一个范围,以便并非所有其他库都显示在您的APIDefinition.cs中,如https://developer.xamarin.com/guides/cross-platform/macios/binding/objective-sharpie/examples/advanced/中所述
您会注意到我们将-scope build / Headers参数传递给了 客观Sharpie。因为C和Objective-C库必须#import或 -scope参数告诉我们包括其他头文件,它们是库的实现细节,而不是你想要绑定的API 目标Sharpie忽略任何未在文件中定义的API 在-scope目录中的某个地方。
你会发现-scope参数通常是可选的,干净利落 实现了库,但是没有明确的伤害 提供它。
这应该删除APIDefinition.cs中其他库的所有绑定
sharpie bind -sdk iphoneos11.1 -scope MyFramework.framework/Headers/ MyFramework.framework/Headers/MyFramework-Swift.h
-output=MyFrameworkCS -namespace=MyFramework