我正在将基于.NET的测试自动化框架移植到Mac OS X. 我有很多.NET经验,但是,我完全是Mac界的新秀。
我需要从.NET / Mono调用Objective C代码。我从“MonoMac - Binding Objective-C Types”教程开始。
我创建了一个API定义文件。我无法编译它,因为找不到类型“BaseTypeAttribute”。后来我发现这不是问题,因为btouch工具会编译它(basetypeattribute-not-found-in-a binding-project)。
由于我正在开发OS X(不是iOS),我没有使用btouch,我打算使用bmac工具。 Findig并非琐碎,但我设法编译并发现它based on this article。好。
我无法编译我的绑定文件,因为bmac说“类型或命名空间'任务'在命名空间'System.Threading'中不存在”。 不过,我为生成的.cs文件指定了一个输出文件夹,修复了编译错误(不需要任务,错误是由生成的不必要的使用造成的)。
所以,如果我按照手册“绑定新的Objective-C类型/ Binding_Details”文档,我就可以了。
问题是我仍然无法使用我的Objective C库。 我可以使用MonoDevelop / Xamarin编译和运行C#代码,但它失败并显示消息:
System.Exception: Could not create an native instance of the type 'My.Type': the native class hasn't been loaded.
It is possible to ignore this condition by setting MonoMac.ObjCRuntime.Class.ThrowOnInitFailure to false.
at MonoMac.Foundation.NSObject.InitializeObject (Boolean alloced)
at MonoMac.Foundation.NSObject..ctor (MonoMac.Foundation.NSObjectFlag x)
at My.Type..ctor ()
我发现了一篇文章(coreplot-monomac-bindings-crashing),说文件必须在使用之前手动加载,但我没有运气。 “Dlfcn.dlopen”总是返回IntPtr.Zero。