我的 Xamarin.iOS 项目需要一个草图/绘画控件,虽然我似乎找不到与 C# 兼容的控件,但我确实找到了一个用 Objective C 编写的好的组件。https://github.com/acerbetti/ACEDrawingView
我以前做过 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 并将其添加到我的主项目中。
现在,我又遇到了 2 个问题。
如果我构建并部署到模拟器,我可以运行我的应用程序,直到我尝试从绑定中创建一个新的 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.
...等等。
我尝试返回、重读和重做步骤,并尝试重用我之前成功绑定的一些脚本和设置,但没有成功。
有没有人有什么可以解决这些问题的建议?