【问题标题】:Binding with objective Sharpie outputs huge files与目标 Sharpie 绑定输出巨大的文件
【发布时间】:2017-11-22 03:32:25
【问题描述】:

我正在尝试将我的 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 非常陌生,并且非常卡在这里。任何帮助将不胜感激!

【问题讨论】:

  • MyFramework-Swift.h : 1) 那个头文件里有什么,它包括什么? 2) 不支持开箱即用的 Swift 框架,有办法“混搭”它们
  • MyFramework-Swift.h 是派生数据中随框架生成的头文件(MyFramework.framework/headers)。它看起来类似于这个文件:github.com/Flash3001/iOSCharts.Xamarin/blob/master/…。我正在关注本教程:medium.com/@Flash3001/…。关于如何使头文件工作的任何指针?

标签: xamarin xamarin.ios objective-sharpie


【解决方案1】:

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

您会注意到我们将 -scope build/Headers 参数传递给 客观的Sharpie。因为 C 和 Objective-C 库必须 #import 或 包括其他头文件,这些头文件是库的实现细节,而不是您希望绑定的 API,-scope 参数告诉 目标 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

【讨论】:

  • 谢谢,这对我帮助很大?
【解决方案2】:

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

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

希望能帮到你。

【讨论】:

    【解决方案3】:

    请看我的帖子:

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

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

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

    【讨论】:

    • 好工具!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-31
    • 2014-06-29
    • 2018-08-08
    • 2018-06-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多