与客观 Sharpie 绑定输出大文件

Sri*_*ija 4 xamarin.ios xamarin objective-sharpie

我正在尝试将我的 swift 框架与 Xamarin 绑定。为此,我正在使用客观的 Sharpie。

  • 我已在框架中将“启用位码”设置为“否”。
  • 构建运行框架。
  • 使用以下命令绑定头文件。

sharpie bind -sdk iphoneos11.1 MyFramework.framework/Headers/MyFramework-Swift.h -output=MyFrameworkCS -namespace=MyFramework

我得到了 APIDefinitions.cs 文件,但它有超过 79000 行并且有很多错误。StructsAndEnums.cs 文件也很大。

我的框架(和 .h 文件)只有 UIKit、AVFoundation 和 Foundation 的导入语句。但是 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;
Run Code Online (Sandbox Code Playgroud)

我对 Xamarin 非常陌生,并且超级卡在这里。任何帮助将不胜感激!

Phi*_*ens 5

您需要定义一个范围,以便并非所有其他库都显示在您的 APIDefinition.cs 中,如https://developer.xamarin.com/guides/cross-platform/macios/binding/objective-sharpie/examples 中所述/先进的/

您会注意到我们向 Objective Sharpie 传递了一个 -scope build/Headers 参数。因为 C 和 Objective-C 库必须 #import 或包含其他头文件,这些头文件是库的实现细节而不是您希望绑定的 API,所以 -scope 参数告诉 Objective 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
Run Code Online (Sandbox Code Playgroud)


小智 5

您需要限制您的范围,添加标题所在的路径。使用-scope命令和library/Headers/参数。

例如。 sharpie bind -sdk iphoneos11.2 -output myLibrary -scope myLibrary/Headers/ mainHeader.h

希望能帮到你。