使用C#和Mono构建适用于OS X的Cocoa用户界面

13

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

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

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

对于任何有用的人士,以下是我目前发现的一些桥接链接:

6个回答

5
Mono团队发布了一个名为MonoMac的新桥接程序,与他们为iPhone开发的MonoTouch框架本质上是桌面版。Miguel在他的博客中宣布了这个新的桥接程序,网址为:http://tirania.org/blog/archive/2010/Apr-19.html。一旦MonoMac成熟,我相信它将成为人们使用的唯一桥接程序。

3
我最近尝试了Monobjc、NObjective和MObjc/MCocoa与F#一起使用,我会选择MObjc/MCocoa。
Monobjc的文档和打包是最好的,但与其他两个相比非常,并且不会从ObjC中"rethrow exceptions"。
我认为NObjective和MObjc/MCocoa是唯一重新抛出ObjC异常的两个选择,这就是为什么我认为它们是唯一的真正替代品的原因。
此处所讨论的,NObjective使用具有继承的结构,这让我感到非常可怕,最终我选择了MObjC/MCocoa。
(您可能也会遇到许可问题。Monobjc和NObjective属于LGPL,而MObjc/MCocoa属于MIT...)

Johan,我从你的答案中移除了已接受的答案标志。请不要因此感到冒犯。你的回答仍然很有价值,但我认为MonoMac是未来的方向。我希望这个页面能够反映出这一点。 - Antony Perkov
不会生气的... :) 我也相信MacMono的发布改变了情况... - Johan Kullbom

1

在Mono-OSX邮件列表上已经进行了关于各种桥接的相当长的讨论。

讨论从Miguel开始,在这里

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

如果您阅读讨论的其余部分,似乎Mono社区倾向于使用Monoobjc或MObjc / MCocoa;因此,如果您正在进行自己的调查,这些可能是要重点关注的。


我已经添加了一个新答案,重点关注MonoMac。我保留了这个答案,以防这些细节对于对MonoMac产生兴趣的人有用。 - Antony Perkov

1

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


你对你所使用的东西有什么评论或者遇到了什么问题吗? - Antony Perkov

1

好的,我来问一下:你为什么想要这样做呢?Cocoa的UI架构,包括Cocoa标准代理和Cocoa绑定,与Objective-C密切相关。Interface Builder和Objective-C的组合非常高效。虽然你可以使用许多桥接到Objective-C的Interface Builder(包括PyObjC、MacRuby和许多C#桥接),但由于框架与你选择的语言之间的任何阻抗不匹配,你不可避免地会失去生产力。对于C#来说,这种不匹配是显著的。既然你正在编写本地UI,因此失去了从C#中获得的任何跨平台优势,我建议你使用Objective-C。对于一个有能力的C/C++/C#/Java等程序员来说,通常需要2-3天的时间才能在Objective-C中感到舒适和高效。


1
简短回答:我不是从零开始。我想为现有的C#应用程序构建一个Cocoa UI(而不是使用GTK#或WinForms)。没有必要在Objective C中复制我的当前代码,然后维护两组等效的代码。 - Antony Perkov
但您仍可以使用Objective-C编写UI并使用问题中列出的桥接之一来重用现有的模型代码。这是在OS X上进行跨平台应用的推荐方法。 - Barry Wark
2
我现在已经花了2-3天的时间学习Objective-C,虽然我认为它比C++更加简洁,但仍然比C#低级得多。作为一名Python程序员,即使是C#也感觉相当低级和啰嗦。使用高级语言可以获得更高的生产力。一个良好编写的C#-Objc桥接器理想情况下可以让你既拥有大部分优点又不失效率。 - Andz
更不用提在使用冗长的低级语言编码时患上CTS的所有真实风险(是的,Xcode完成功能在一定程度上可以缓解这种情况)......人们可以开始看到为什么比ObjC更高级的语言对于Cocoa程序员来说是一个极其理想的目标。 - Andz

0

不会问为什么,因为我相信你有你的理由。

我会看一下Unity3D项目,看看能否弄清楚他们是如何做到的。看起来,嗯,很难。


谢谢回复。实际上我对已经存在的桥梁感兴趣,而不是编写新的桥梁... - Antony Perkov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接