使用C#和Mono为OS X构建Cocoa UI

有没有人花时间比较Mono的各种Objective C桥和相关的Cocoa包装器?

我想移植现有的C#应用​​程序以在OS X上运行。理想情况下,我将在Mono上运行该应用程序,并为其构建本机Cocoa UI。

我想知道哪座桥是最好的选择。

如果它对任何人都有用,这里有一些到目前为止我发现的桥梁的链接:

  • CocoSharp – 在OS X上与Mono一起发布 – www.cocoa-sharp.com

  • Monobjc – 比其他文档更好的文档(在我看来) – www.mono-project.com/CocoaSharp和www.monobjc.net

  • 目标 – (显然)比其他人快 – code.google.com/p/nobjective

  • MObjc / MCocoa – code.google.com/p/mobjc和code.google.com/p/mcocoa

  • ObjC# – www.mono-project.com/ObjCSharp

Mono团队发布了一个名为MonoMac的新桥。

它本质上是他们为iPhone制作的MonoTouch框架的桌面版本。

Miguel在他的博客上宣布了这座新桥: http : //tirania.org/blog/archive/2010/Apr-19.html

一旦MonoMac成熟,我怀疑它将成为人们使用桥梁。

我最近一直在试用Monobjc,NObjective和MObjc / MCocoa和F#,我会选择MObjc / MCocoa。

Monobjc就像你写的最好记录和打包,但与其他两个相比非常慢 ,并没有从ObjC“重新抛出exception”。

我相信NObjective和MObjc / MCocoa是唯一两个重新抛出ObjCexception的人,这就是为什么我发现它们是唯一真正的替代品。

正如在这里讨论的那样, NObjective使用带有inheritance的结构,我发现它非常可怕并且让我最终选择了MObjC / MCocoa。

(你可能也有许可证问题.Monobjc和NObjective在LGPL下,MObjc / MCocoa在麻省理工学院……)

我认为NObjective是最好的选择因为它具有Objective-C包装器的自动代码生成function,可以轻松配置为其他版本的Mac OS重新生成包装器。

好的,我会问:你为什么要这样做? Cocoa的UI结构,包括Cocoa-std delgates和Cocoa bindngs与Objective-C密切相关。 Interface Builder和Objective-C的结合非常有效。 虽然您可以将Interface Builder与Objective-C(包括PyObjC,MacRuby和许多C#桥)结合使用,但由于框架与您选择的语言之间存在任何阻抗不匹配,您将不可避免地失去生产力。 使用C#,这种不匹配很重要。 由于您正在编写本机UI,从而失去了从C#中获得的任何跨平台优势,我将使用Objective-C。 对于一个称职的C / C ++ / C#/ Java /等。 程序员,在Objective-C中通常需要2-3天才能变得舒适和高效。

在Mono-OSX邮件列表上对各种桥梁进行了相当冗长的讨论。

讨论从Miguel开始:

  • 宣布Novell将不再维护Cocoa#。
  • 试图统一社区的其余努力。

如果你阅读剩下的讨论,似乎Mono社区倾向于Monoobjc或MObjc / MCocoa; 因此,如果您正在进行自己的调查,这些可能是需要关注的问题。

不会问为什么,因为你有理由我确定。

我会看看Unity3D项目,看看你是否能够certificate他们是如何做到的。 看起来,嗯,很难。