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

使用C#和Mono为OS X构建Cocoa UI,c#,cocoa,macos,mono,C#,Cocoa,Macos,Mono,有没有人花时间比较过Mono的各种Objective C桥和相关的Cocoa包装 我想移植一个现有的C#应用程序在OSX上运行。理想情况下,我会在Mono上运行该应用程序,并为其构建一个本地Cocoa UI 我想知道哪座桥是最好的选择 如果它对任何人都有用,这里有一些到目前为止我找到的桥梁的链接: CocoSharp-在OS X上与Mono一起分发- Monobjc-比其他文件更好(在我看来)-以及 无主观性-(显然)比其他人更快- MObjc/MCocoa-和 ObjC#- 我不想问为什么,

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

我想移植一个现有的C#应用程序在OSX上运行。理想情况下,我会在Mono上运行该应用程序,并为其构建一个本地Cocoa UI

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

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

  • CocoSharp-在OS X上与Mono一起分发-

  • Monobjc-比其他文件更好(在我看来)-以及

  • 无主观性-(显然)比其他人更快-

  • MObjc/MCocoa-和

  • ObjC#-


    • 我不想问为什么,因为我相信你有自己的理由


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

      我认为NobObjective是最好的选择,因为它具有针对Objective-C包装的自动代码生成功能,可以轻松配置为为为Mac OS的进一步版本重新生成包装

      好吧,我会问:你为什么要这么做?Cocoa的UI架构,包括Cocoa std delgates和Cocoa Bindings,与Objective-C紧密相连。Interface Builder和Objective-C的结合非常高效。尽管您可以将Interface Builder与Objective-C(包括PyObjC、MacRuby和许多C#bridges)结合使用,但由于框架和您选择的语言之间的阻抗不匹配,您将不可避免地降低生产效率。对于C#,这种不匹配是显著的。由于您编写的是本机UI,因此失去了从C#中获得的任何跨平台优势,因此我将使用Objective-C。对于一个称职的C/C++/C#/Java/等程序员来说,使用Objective-C通常需要2-3天才能变得舒适和高效。

      我一直在尝试Monobjc,NobObjective和MObjc/MCocoa最近和F#一起,我将和MObjc/MCocoa一起去

      Monobjc是您编写的最好的文档和打包工具,但与其他两种工具相比,它非常有用,并且不会从ObjC中“重现异常”

      我相信NObjective和MObjc/MCocoa是唯一两个从ObjC中重新引用异常的方法,这就是为什么我发现它们是唯一真正的替代方法

      如前所述,NobObjective将结构与继承结合使用,这让我感到非常害怕,并最终选择了MObjC/MCocoa


      (您可能也有许可证问题。Monobjc和NObjective在LGPL下,MObjc/MCocoa在MIT下……)

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

      讨论从米格尔开始:

      • 宣布Novell将不再保留可可
      • 试图统一社区中剩余的努力

      如果您阅读了讨论的其余部分,那么Mono社区似乎倾向于Monoobjc或MObjc/MCocoa;因此,如果你在做自己的调查,这些可能是重点。

      Mono团队已经发布了一个名为MonoMac的新桥梁

      它本质上是他们为iPhone生产的MonoTouch框架的桌面版

      米格尔在他的博客上宣布了这座新桥:


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

      简单回答:我不会从头开始。我想为现有的C#应用程序构建Cocoa UI(而不是使用GTK或WinForms)。在Objective C中复制我当前的代码,然后继续维护两组等效的代码是不值得的。但是,您仍然可以在UI中使用Objective-C,并使用问题中列出的一个桥接来重用现有的模型代码。这是在OS X上跨平台应用的推荐方法。我现在用Objto-C花了2-3多天,而我发现它比C++更干净,它仍然比C语言低得多。作为一名Python程序员,即使是C#也会觉得很低级和冗长。通过使用更高级别的语言,您确实获得了大量的生产力。一个写得好的C#-Objc桥在理想情况下会让你大吃一惊。当不得不使用冗长的低级语言编写代码时,我们甚至不必提及CTS的所有真正风险(是的,Xcode完成在某种程度上缓解了这一风险)。。。我们可以开始明白为什么比ObjC更高级的语言对于Cocoa程序员来说是一个非常理想的目标。事实上,我对已经存在的桥梁感兴趣,而不是写一个新的桥梁……对你使用它的目的或遇到的问题有什么评论吗?我为这个问题添加了一个新的答案,重点是MonoMac。我保留了这个答案,以防细节对那些对MonoMac是如何产生的感兴趣的人有用。Johan我从你的答案中删除了接受答案的标志。请不要为此生气。你的回答仍然很有价值,但我觉得MonoMac是前进的方向。我希望这一页能反映这一点。我无意冒犯……:)我也相信MacMono的发布改变了现状。。。