跨平台桌面应用程序 - Windows + Mac + Linux

时间:2014-01-14 08:36:37

标签: c# java windows macos cross-platform

我正在为多个桌面平台构建一个应用程序:Windows,Mac,以及稍后可能用于Linux。

我想知道哪种编程语言和IDE组合最适合我:

  1. 编程语言需要是C#(首选)还是Java。
  2. 核心库必须在所有平台之间共享,这意味着所有平台必须链接到单个核心库(按库我的意思是类和函数列表)。
  3. Windows和Mac是优先考虑的事项,Linux应用程序适用于未来的规划。
  4. 应用程序的设计完全是自定义的,它不遵循每个平台的任何指导原则。
  5. 我陷入了这三种解决方案之中:

    1. 使用Xamarin.Mac + Visual Studio for Windows并链接它们之间的核心类。
    2. 将GTK#用于整个项目,并为每个平台编译多个版本。
    3. 将Java用于整个项目,并为每个平台编译多个构建。
    4. 对于#2和#3,我需要一个建议,考虑到我的应用程序的设计,哪种语言更适合我。我的意思是,哪一个对我的目标有更好的GUI构建能力?

      BTW GTK#为每个平台使用不同的库,所以这应该是我的核心架构的混乱,不是吗?!

8 个答案:

答案 0 :(得分:7)

这听起来像是Xojo或类似的工作:http://www.xojo.com

Mac,Windows,Linux使用简单的GUI设计和本机应用程序构建。自定义UI也很容易完成,然后您就可以为所有三个平台提供一个代码库。您可以免费下载和使用该软件进行开发和测试,只需在您决定构建应用程序后需要许可证。

答案 1 :(得分:7)

三年后,Javascript现在也是这场辩论的有力竞争者。

空间内有多种选择。

和其他人

甚至微软也发布了Visual Studio Code,它是用Javascript编写的开发环境的跨平台版本。

What is the Visual Studio Code editor built on

其好处包括利用许多可用的网络库,以及建立/使用您的网络开发技能。

答案 2 :(得分:3)

“GTK#为每个平台使用不同的库”,你的意思是不同的渲染后端(例如X11,Cairo)?

您只需要构建一次GTK#app。但是,您必须将GTK#运行时(对于Windows和Mac而言不同)与您的应用程序捆绑在一起。 Banshee是您可以效仿的一个很好的例子。

答案 3 :(得分:2)

您还可以考虑使用Livecode

动态代码:http://livecode.com 对于除web之外的任何平台,它都是开源的,如果你的代码足够灵活,不是C#或Java,它也包含移动目标。

一个选项是使用C#和GUI独立性在已编译的库中构建核心逻辑,然后将其插入到livecode中,使UI能够用于该工具。

答案 4 :(得分:1)

最好的选择是使用Nevron Open Vision。它是一个基于C#的跨平台用户界面平台,可实现构建企业级应用程序所需的大多数控件。它是MyDraw(www.mydraw.com)背后的框架-MyVis是类似于Visio的专业绘图程序。 MyDraw是使用Nevron Open Vision完全构建的,不需要任何其他第三方库。我们主要是在Windows下开发它,只是将其编译为Mac。不久,我们将添加对Linux和WebAssembly主机的支持。

答案 5 :(得分:1)

Microsoft刚刚发布了.NET MAUI,这是一个基于Xamarian.forms的跨平台GUI框架。

当我们考虑在统一的.NET中构建设备应用程序的外观时,我们看到跨多个平台使用的许多设备,从Android和iOS到Windows和macOS。为了满足这一需求,我们很高兴地宣布一个新的一流的UI框架来实现这一目的:.NET多平台App UI,亲切地调用.NET MAUI。

这似乎可以满足您的所有要求。他们没有在文章中明确提及Linux,而是声称在Github Repo的说明中支持Linux。

答案 6 :(得分:0)

这取决于应用程序的受众:消费大众市场业务/ IT

如果其大众市场消费者面临

电子或本机UI,也许带有共享的非UI代码。例如,Visual Studio Code是用Electron制作的(我最后检查过)。 Google Flutter是值得评估的新进入者。 Dropbox是Python(或以前是Python)。 (a)正确包装Python以便顺利进行x平台安装,并且(b)GUI工作将花费很多时间。不幸的是,对于大众市场的消费者应用程序(不是IT人员使用的实用程序,而是Dropbox,Skype等大众使用的精美设计),您将花费大量时间使安装系统正常工作,并使应用程序外观和感觉合适。无论采取哪种方式,这都是一项非常耗时的工作。

  • 消费者:Java?尽管我可能错了,但我认为Java不适合消费者桌面。有一些精简/捆绑在一起的Java打包系统。我也想说JVM软件公司倾向于倒闭(稍后会详细介绍)。 FreeMind思维导图器是Java可以实现的一个很好的例子。
  • 用户:.NET?是的,对于Windows端。然后使用Mac的本机软件和非GUI代码的共享库。有“ .NET Core”(又名Mono),但在Mac上目前尚未完全成熟。 Mono已经存在了五年多了,我还没有看到它对于消费类应用程序已经成熟。问:Mac应用商店中有多少个.NET Core应用?我希望它会变得更好,但是截至撰写本文(2020年)时,很少有值得注意的文章。

业务应用或IT工具

如果它是可以使用基本UI的基本业务应用程序或实用程序,则我主要出于比较的目的而评估Xojo和/或LiveCode。 Xojo非常接近.NET。由于Google Flutter即将推出,因此也是如此。在您阅读本文时,Flutter可能是最佳选择。

B2B:Java吗?这是针对“大型”企业应用程序的经过反复尝试,测试和真正解决方案。鉴于Java应用程序会耗尽内存,因此最终用户可能不会喜欢您。但是对于企业级应用程序,主要关注的是非常激烈的业务逻辑是否会起作用。对于IT工具,这取决于。如果它是一个三屏实用程序,请避免使用Java。如果是复杂的ERP,那么Java就是很好的选择。记住要四处寻找不同的打包工具,以免引起消费者对JVM的困扰。同样,我喜欢的一个Java桌面应用程序是Freemind。这是用Java制作合理的桌面应用程序的一个很好的例子。我在Windows和Mac中都使用过它,它很棒。您还可以查看编译为Java字节码的Kotlin或Groovy(用于测试用例)。

B2B .NET?这里有很多要解压的东西。在我看来,关键是.NET Windows桌面开发的开发时间比Windows Java桌面开发快2到4倍。从制作GUI到更好的代码完成,到更快的编译时间,到更少的打包和安装障碍。就是说,在撰写本文时,“。NET Core”或Mono对于MacOS来说还很薄。我真的非常希望这种变化。但是,我一直在等待Mono或.NET Core提供无限制的MacOS全套套件,并且这种情况尚未发生。如果它是企业应用程序,则可以使用Mac的.NET Core摆脱困境。但是,请首先使用您要使用的所有控件/库构建一个基本的.NET Core“ hello world”应用程序。然后尝试在MacOS上为其构建安装程序,然后随机找一个人查看Mac是否真正安装并运行。您可能会发现您今天在这个领域苦苦挣扎(尽管我希望它会好起来,但已经好几年了。)

跨平台的总体说明

如果这是一个较小的应用程序,不需要出色的UX和超深度的OS集成,那么我考虑使用Xojo或LiveCode,也许用于UX元素。就像@merlucin所说的那样,您可以在共享的东西中编写核心逻辑-也许是C#,python等。

这就是为什么-Xojo和LiveCode已经存在了10年了。他们更多地是要保持一致。而我发现.NET和QT一直在变化。跟上Joneses和维护安装程序的成本很高。因此,对于小型应用程序或实用程序-XML编辑器,IT帮助工具,Xojo或LiveCode可以帮助您更快地到达那里。

例如,当您按下Xojo上的build按钮时,它实际上为Windows,Mac和Linux创建了3个可执行文件。坦白地说,这与打包跨平台的Python应用程序甚至打包用于Windows的.NET应用程序的疯狂。

需要权衡的是这些工具-Xojo和LiveCode通常最终会缺少您需要的一些关键内容,这需要一点技巧。您可以在他们的论坛附近阅读。 Xojo有点像.NET,尽管LiveCode是完全基于“堆栈”的另一种编程范例。

也请牢记开发人员的幸福。许多开发人员不想使用Xojo或LiveCode进行编码,因为它们是鲜为人知的语言。因此,请确保您能接受。如果您被解雇并在Xojo拥有5年经验,会发生什么?嗯。

在评估中,无论您选择什么,都必须在要评估的平台上编译基本的GUI应用程序,并需要3个人将其正确安装在Mac上。您会对所需的库和疯狂感到震惊。特别是如果您是Web开发人员,您会发现仅维护安装程序是跨3个平台的大量工作。没关系,GUI的一致性。

答案 7 :(得分:-1)

我的两分钱:现在 Flutter 也可以创建桌面应用了