我正在将基于 .NET 的测试自动化框架移植到 Mac OS X。我拥有丰富的 .NET 经验,但是,我在 Mac 世界中完全是个新手。
我需要从 .NET/Mono 调用 Objective C 代码。我从“ MonoMac - 绑定 Objective-C 类型”教程开始。
我创建了一个 API 定义文件。我无法编译它,因为找不到类型“BaseTypeAttribute”。后来发现这不是问题,因为btouch工具会编译(basetypeattribute-not-found-in-a-binding-project)。
因为我正在为 OS X(不是 iOS)开发,所以我没有使用 btouch,我打算使用 bmac 工具。Findig 这不是微不足道的,但我设法根据这篇文章编译并找到了它。好的。
我无法编译我的绑定文件,因为 bmac 说“类型或命名空间 'Tasks' 在命名空间'System.Threading' 中不存在”。尽管如此,我为生成的 .cs 文件指定了一个输出文件夹,修复了编译错误(任务并不是真正需要的,错误是由生成的不必要的使用引起的)。
因此,如果我遵循手册“Binding New Objective-C Types / 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。
- 我试图在 XCode 中将我的库创建为“Cocoa Framework”、“Cocoa Library”和“Bundle”。我应该使用哪一个?
- Mono(Mac)中是否有任何低级调试可能性?
- 有没有人设法做到这一点?(从 .net 调用 objc)
在此先感谢,-g