创建跨平台的Windows,Mac OS X应用程序

时间:2008-10-31 03:22:57

标签: c# .net objective-c cocoa realbasic

我想构建一个在Windows和Mac OS X上运行的应用程序。我也想 喜欢利用它运行的平台所提供的最好的框架,API等等。有没有办法做到这一点,而无需编写Objective-C代码,然后编写C#代码?我一直在考虑将C ++作为替代方案,但我想知道是否还有其他任何东西。该应用程序将基于GUI(虽然我不确切知道它将做什么)

-G。

21 个答案:

答案 0 :(得分:49)

你很早就想到了可移植性 - 在事实发生之后将它“搞砸”是非常困难的。

有各种各样的跨平台工具包可供使用,但恕我直言所有这些都没有在所有支持的平台上提供“本机”外观。在Mac(我使用的)上,这些套件的支持者总是想提到他们正在使用原生控件。这是一个好的开始,但这不是整个旅程。 Apple's Human Interface Guidelines解决的其他问题包括如何安排控件,如何设置按钮标签,应使用哪些标准快捷键等等。

甚至微软也不得不learn the hard way关于尝试使用命运多Word的Word 6.0 for Mac编写跨平台GUI的危险。

恕我直言,更好的方法是使用MVC设计,模型层使用标准的可移植C ++编写,视图和控制器层使用每个平台的本机工具包。对于Mac版本,Carbon和C ++曾经是一个有趣的选项,现在不再支持了,所以你想要使用Cocoa,在视图中使用Objective-C,在控制器中使用Objective-C ++来弥合语言差距。您的Windows版本同样可以将您的模型编译为“托管C ++”,并将任何.NET语言用于控制器和视图。

答案 1 :(得分:16)

看看Real Studio。认真。您可以在Real Studio中编写应用程序,并将其部署在Windows,Mac OS X和Linux上。

编辑:Real Studio现在是Xojo

答案 2 :(得分:6)

wxWidgets是一个跨平台的C ++库,是一个实用的选择。但我同意Sherm的观点 - 所有跨平台库都会为原生应用程序创建一个较差的UI。

每个具有不同UI语义(按钮顺序等)的操作系统都会变得更加困难,所以虽然你可以获得良好的外观,但通过一个视图层在每个平台上获得'感觉'几乎是不可能的。

根据您最终的操作,您可以更好地找到网络界面(例如,在您的应用中嵌入网络服务器并将HTTP网页提供给浏览器)。那你就避免了L& F问题了!

或者,你可以决定你将拥有一个完全非标准的L& F,并选择像wxWidgets或Tcl / Tk这样的东西。

答案 3 :(得分:4)

使用AIR库的Adobe Flex可以很好地为您提供单一,高级的开发环境。我已经编写了几个人们可以互换使用的实用工具。

如果感兴趣的话,你也可以为浏览器提供合理的可移植性。但我认为,如果不考虑这种好处,这是一个非常好的解决方案。

答案 4 :(得分:4)

我的建议,使用Python。 Python与Ob​​jective-C和C#(IronPython)集成。只要避免使用该语言的许多全新的边缘功能,你就可以了。

当然,它不会轻易放松。但是我认为它不应该变得容易上瘾。当设计人员在移植到另一个平台时不考虑他们的应用程序如何工作时,这一点变得非常明显。

答案 5 :(得分:3)

如果您决定使用C ++,那么有许多优秀的跨平台GUI库可以避免为每个平台复制GUI代码。例如:

还有许多其他类似的项目,但这些项目是一些更好,更知名的项目。对于代码的其余部分,任何特定于系统的内容当然都必须使用单独的C ++代码编写,以便在必要时与Win32 API或OS X的系统API进行交互。话虽如此,您可能会发现通过使用Boost这样的大量库,您可以避免使用大量特定于系统的代码。

其他建议可能是使用配置文件而不是Windows注册表或mac上的plist文件。相反,尽可能使用平台无关的方法进行拍摄,以最大限度地减少使用系统API编写代码的位置。

答案 6 :(得分:3)

您应该使用适用于每个操作系统的最佳工具。

C / C ++代码可以与GUI分离,并在每个单独开发的程序中使用。

在做出决定之前,请先了解使用便携式工具包(如Qt或wxWidgets)开发的跨平台应用。根据我的经验,他们从来没有像他们的同行一样精致,特别是在Mac上。

答案 7 :(得分:3)

对于GUI,我会研究SDL或QT。

另外,请查看单http://mono-project.com/Main_Page

答案 8 :(得分:3)

即将推出的QT-Creator可能值得一看:link text

答案 9 :(得分:2)

如果您是Windows开发人员,请使用Qt或C#Winforms;如果你是Mac开发人员,你可以尝试Cocotron(http://www.cocotron.org/),但它还没有100%完成,尽管商业应用程序随附了。

答案 10 :(得分:2)

感谢您的所有答案。我一直在研究和使用WPF和CAn​​imation等。看起来使用C / C ++模型并为每个平台单独执行GUI是最好的方法。谢谢你的帮助。

答案 11 :(得分:1)

同时查看fltk,wxWidgets非常好&丰富但也很大......

答案 12 :(得分:1)

正如其他人所提到的那样,绝对有可能在Windows和Mac上用Java创建漂亮的跨平台GUI。但是,如果您希望自己的应用程序融入其中,并使其“感觉”类似于为其运行的平台而设计的应用程序,那么您必须为每个版本的应用程序开发GUI和用户体验。申请单独。

如果您分析应用程序将要执行的操作并确定可以在平台之间共享的代码/逻辑的很大一部分,则以可移植的方式使用两种系统上可用的语言编写该部分。 C,C ++,Java,Python,Ruby等。如果没有重要的部分,即大部分代码将用于GUI,则根本不需要共享任何代码。

如果有很多公共代码,我建议将Python和Ruby作为实现语言,因为在Mac和Windows上使用IronPython和IronRuby的那些语言都有Cocoa绑定也可以在.Net应用程序中重用该代码。

答案 13 :(得分:0)

Java或Mono浮现在我的脑海中。有些人可能认为java图形工具包并不是最简单的,但对我来说,似乎是将应用程序移植到多个平台并避免部署困难的最简单方法。

另一方面,Mono可能会更难以移植,因为如果您计划使用本机小部件(Windows的winforms或GTK以及Max的CocoaSharp),则必须至少写两次gui,但是你只能写一次后端并为每个平台开发一个前端。

正如我所说,Java GUI工具包可能在OSX内部甚至在Windows上都不会感觉“原生”,但它们确实可以在两个平台上运行,您可以使用Swing或AWT。

至于mono,你可以在Windows和OSX上使用GTK或Winforms,但它们仍然不会感觉原生,你可以使用CocoaSharp绑定到Cocoa框架,但我不确定项目的状态(阅读:功能支持)

答案 14 :(得分:0)

为了完整起见,现在值得将Unity添加到列表中。

要么为这两个平台创建一个本机外观的应用程序非常困难,而且一般的GUI工具还远未成熟。但是,它不仅仅是一个游戏引擎,而且你可以用C#/ Mono编写,使用一系列合适的库并轻松地部署到Win和OSX。

答案 15 :(得分:0)

如果你选择C ++语言,我肯定会推荐Qt。您的应用程序可以按照OP中的要求部署在Windows和Mac下,也可以在Linux上使用,现在,使用iOs,Windows RT和Android的智能手机上的最新版本。

它在网上有很好的文档记录和非常活跃(包括在SO上)。

我看到的唯一不利点是Qt创建工具,恕我直言,比历史工具(例如Visual Studio)更不方便用户友好,但实际上并没有被迫将它用作Qt开发的IDE。

答案 16 :(得分:0)

Magnetism Studios的工作人员有一个很好的write up on using Cocotron用Xcode构建Windows可执行文件。

我没有使用Cocotron的经验,但如果我需要编写一个Windows应用程序 - 具有Mac开发背景 - 这将是我尝试的第一件事。

答案 17 :(得分:0)

您可以使用Java Swing创建出色的跨平台应用程序。这需要稍微努力才能学会这样做。

在这里,看一下这些链接。

  1. http://jidesoft.com/products/component.htm
  2. http://www.xerto.com/imagery.php
  3. http://www.jgraph.com/screenshots.html
  4. http://www.javootoo.com/
  5. http://www.formdev.com/screenshots/
  6. http://www.jidesoft.com/products/oss.htm

答案 18 :(得分:0)

我是第二个Java。它被设计为跨平台解决方案。

其他人提到了Adobe Air。

类似于Adobe Air是Silverlight。我相信它(或将会)完全跨平台。

答案 19 :(得分:0)

我打算做类似的事情,我正在考虑创建一个C#/。NET Windows应用程序,然后使用Mono将其移植到OS X.我的应用程序已经完全(标题栏和角落按钮除外)自定义绘制的用户界面,因此化妆品操作系统的差异不应该对我产生太大的影响。

我不确定在框架和API等方面利用每个平台的最佳性能是什么意思。一般而言,编写跨平台应用程序意味着写入最小公分母,因此意味着从每个平台中获得最佳效果。

答案 20 :(得分:0)

只要你不依赖于语言,看起来Java就是一个很好的候选者。将其与SWT配合使用,您可以在任何您喜欢的操作系统上使用原生应用程序。