建议支持Mac和Windows桌面

时间:2011-02-05 15:29:08

标签: windows macos cross-platform desktop-application

构建支持Windows和OS X的GUI桌面应用程序的最佳做法是什么?让我们说它是预算编制软件,所以有一些数学和一些大数据结构。用户数据保存在XML文件中;没有单独的数据库或网络。

在一个极端情况下,您可以在C#中构建Windows版本,在Objective C中构建Mac版本。是否有更好的方法,因此您可以更轻松地保持两个版本同步并编写较少的重复代码?您是否会在C ++中编写数学和数据结构以及“业务逻辑”,使用用于简单系统调用(如IO)的预处理器指令,然后为Windows编写一次单独的GUI层,为OS X编写一次GUI层?假设您需要本机代码,C / C ++是跨平台后端的唯一选择吗?有没有办法一次写出GUI部分? (我希望不会。)

请注意,我不是在问如何使用交叉编译器。我对如何以最少的麻烦构建整个项目感兴趣。

3 个答案:

答案 0 :(得分:3)

你基本上是正确的。您可以在C / C ++中编写数据模型,在C#/ .NET和Objective-C / Cocoa中编写UI。

我不熟悉C#如何与非C#代码对话,但Objective-C(基于C构建)将很容易与C和C ++(后者使用Objective-C ++)对话。如果您更喜欢将它们用于跨平台段,您还可以将Python和/或Ruby与Objective-C代码和Cocoa框架一起使用。

我赞赏你超越Java或其他跨平台UI的简单解决方案。如果你选择本土路线,你将拥有更好看,更易于使用的产品。

答案 1 :(得分:2)

鉴于我对平台本机用户界面和控件/小部件的强烈感觉,我很可能在这个问题上对大多数人有不同的看法,但我更倾向于选择第二种方法。即使我没有足够的自虐来解决分别构建整个应用程序的麻烦。

所以我肯定编写完全独立于GUI层的库或数据层代码。在C ++中使用它是一个显而易见的选择,特别是如果你已经习惯了这种语言,但稍后会更多。关键是此代码应仅限于您的“业务逻辑”,因此完全独立于平台。如果您遵循坚实的面向对象原则,那么应该确定编程工作的批量是在这个级别上完成的。

除此之外,您还可以在Windows和OS X的核心操作系统和UI功能上编写一个精简的“包装”库。包装器库将是负责直接与平台交互的唯一实体,以及您的数据层代码应该从这个包装器库调用函数,而不是直接从平台的API调用。

当然,你们中的几个人可能会尖叫“但这就是QT已经为你做的了!”是的,我知道。但它不使用本机小部件,并且它不符合这么多位置中的标准平台约定。这意味着很糟糕。我已经看到了其他用于Windows的其他包装库这样做了,但是我还没有看到OS X上的那个看起来不太合适。是的,我很挑剔,但你的典型Mac用户也是如此。他们只是不会在Windows用户的屏幕上忍受垃圾的类型,甚至Mac Office团队都知道这一点。 (我们都集体赞扬你试图做到这一点。)

就您选择的语言而言,您说您正在两个平台上寻找 native 代码。这是一块非常难以粘在墙上的果冻。例如,您认为JIT编译的代码是原生代码吗?如果没有,那就排除了C#。排除任何类型的解释代码排除了许多其他潜在语言。除了C ++和Objective-C之外,没有多少选项其他。但是C ++ / Win32编程并不比Cocoa编程困难得多,只是不同。

答案 2 :(得分:1)

你看过Mono了吗?它允许您在.Net中开发,但跨平台部署。