Xamarin iOS绑定,在库中找不到符号

时间:2016-11-22 13:54:35

标签: xamarin xamarin.ios objective-sharpie

我需要为我的Xamarin.iOS项目绘制草图/绘画控件,虽然我似乎找不到与C#兼容的版本,但我找到了一个用Objective C编写的好组件。https://github.com/acerbetti/ACEDrawingView < / p>

之前我已经完成了Xamarin绑定,所以我希望这个过程相当简单,但不幸的是我在路上遇到了一些障碍。

我开始创建我的静态库并使用ant构建脚本制作FAT二进制文件来覆盖设备和模拟器:

我的蚂蚁脚本片段

AceDrawingViewSDK.a: libAceDrawingView-i386.a libAceDrawingView-armv7.a   libAceDrawingView-armv7s.a libAceDrawingView-arm64.a xcrun -sdk iphoneos lipo -create -output $@ $^

接下来,我跑了

sharpie bind --sdk=iphoneos10.1 *.h

在头文件上获取我的ApiDefinitions和Structs以及Enum文件。

我检查并删除了验证属性。 (他们看起来都很好。)但这是我的其他一些问题开始的地方。

The type ACEDrawingLabelViewTransform' already contains a definition forTransform' (CS0102) (AceDrawingViewBinding). 

为了试图继续前进并获得一些工作,我只是注释了这个参考。

然后我遇到了类似的多个问题:

The type or namespace name `IACEDrawingTool' could not be found. Are you missing an assembly reference? (CS0246) (AceDrawingViewBinding)

我认为这与此有关:

// @interface ACEDrawingPenTool : UIBezierPath 
[BaseType(typeof(UIBezierPath))]
interface ACEDrawingPenTool : IACEDrawingTool

和此:

// @protocol ACEDrawingTool 
[Protocol, Model]
[BaseType(typeof(NSObject))]
interface ACEDrawingTool

我试图解决这个问题,我使接口名称保持一致(我尝试了IACEDrawingTool和ACEDrawingTool。)这样做了这个错误并允许我编译

我的一个枚举是

[Native]
 public enum ACEDrawingMode : nuint
{
Scale,
OriginalSize
}

在这种情况下,我无法找到如何处理[Native](所以再一次,为了测试我删除它。)我尝试使用从枚举中删除nuint并使用uint。这两种方法似乎都解决了错误。

因此修复了这些错误后,我能够从我的绑定项目中生成.dll并将其添加到我的主项目中。

现在,我还有两个问题。

如果我构建并部署到模拟器,我可以运行我的应用程序,直到我尝试从绑定创建ACEDrawingView的新实例。我明白了:

Could not create an native instance of the type 'ACEDrawingView': the native class hasn't been loaded.
It is possible to ignore this condition by setting ObjCRuntime.Class.ThrowOnInitFailure to false.

如果我尝试构建并部署到我的手机,我在构建阶段会遇到不同的错误,导致它无法在设备上启动:

MTOUCH: error MT5211: Native linking failed, undefined Objective-C class: ACEDrawingArrowTool. The symbol 'OBJC_CLASS$ACEDrawingArrowTool' could not be found in any of the libraries or frameworks linked with your application.
MTOUCH: error MT5211: Native linking failed, undefined Objective-C class: ACEDrawingDraggableTextTool. The symbol '_OBJC_CLASS$ACEDrawingDraggableTextTool' could not be found in any of the libraries or frameworks linked with your application.
MTOUCH: error MT5211: Native linking failed, undefined Objective-C class: ACEDrawingEllipseTool. The symbol '_OBJC_CLASS$_ACEDrawingEllipseTool' could not be found in any of the libraries or frameworks linked with your application.

......等等。

我已经尝试过返回,重读和重做步骤,并试图重复使用我之前成功绑定的一些脚本和设置而没有运气。

有没有人对可以解决这些问题的建议有什么建议?

1 个答案:

答案 0 :(得分:0)

  

类型或命名空间名称`IACEDrawingTool&#39;无法找到。

添加新界面,例如interface IACEDrawingTool{ }

  

public enum ACEDrawingMode:nuint

nuint更改为ulong