与客观Sharpie绑定输出大文件

时间:2017-11-22 03:32:25

标签: xamarin xamarin.ios objective-sharpie

我正在尝试将我的快速框架与Xamarin绑定。我正在使用客观的Sharpie。

  • 我在框架中将'启用Bitcode'设置为'否'。
  • 构建了运行框架。
  • 使用以下命令绑定头文件。

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非常陌生并超级坚持到这里。任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:2)

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

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

希望可以帮助你。

答案 1 :(得分:1)

请看我的帖子:

Trouble binding Objective-C library to C# with Objective Sharpie

您想要使用梦幻般的工具objc-automatic:

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

答案 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