4

我正在尝试将我的 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;

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

4

3 回答 3

5

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

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

希望能帮到你。

于 2018-03-28T01:59:46.570 回答
5

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

您会注意到我们将 -scope build/Headers 参数传递给了 Objective Sharpie。因为 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
于 2018-03-05T11:51:08.987 回答
1

请看我的帖子:

使用 Objective Sharpie 将 Objective-C 库绑定到 C# 时遇到问题

你会想要使用神奇的工具 objc-automatic:

https://github.com/alexsorokoletov/objc-automatic

于 2017-11-30T04:04:49.620 回答