【问题标题】:Cross Platform Desktop Application - Windows+Mac+Linux [closed]跨平台桌面应用程序 - Windows+Mac+Linux [关闭]
【发布时间】:2014-02-02 05:51:17
【问题描述】:

我正在为多个桌面平台构建一个应用程序:Windows、Mac 以及以后的 Linux 平台。

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

  1. 编程语言必须是 C#(首选)或 Java。
  2. 核心库必须在所有平台之间共享,这意味着所有平台都必须链接到单个核心库(库是指类和函数的列表)。
  3. Windows 和 Mac 优先,Linux 应用程序用于未来规划。
  4. 应用程序的设计是完全定制的,它不遵循每个平台的任何准则。

我在这三种解决方案之间陷入了困境:

  1. 使用 Xamarin.Mac + Visual Studio for Windows 并链接它们之间的核心类。
  2. 对整个项目使用 GTK#,并为每个平台编译多个构建。
  3. 对整个项目使用 Java,并为每个平台编译多个版本。

对于#2 和#3,考虑到我的应用程序设计,我需要建议哪种语言更适合我。我的意思是,哪一个对我的目标有更好的 GUI 构建能力?

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

【问题讨论】:

  • Java(我是 C# 人)
  • 同样,Java 就是为此而创建的(我是 .Net 开发人员)。如果你真的想使用 C#,你可以看看 Mono (mono-project.com/Start)。
  • 我最大的问题是GUI设计,Java有没有很好的UI设计工具包?!
  • 侯赛因,是的,有多种选择。 Swing 可能是 Java 领域中的佼佼者,尽管 JavaFX 可能是更现代的一种,它具有声明性和移动友好(有点类似于 QT,恕我直言)接口规范,它也有一个 GUI 设计器

标签: c# java windows macos cross-platform


【解决方案1】:

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

空间中有多个选项。

其他人

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

What is the Visual Studio Code editor built on

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

【讨论】:

  • 也可以看看这里:stackshare.io/cross-platform-desktop-development StackShare 有一个跨平台开发选项的比较,你可能会觉得有用
  • 对这篇文章有一些反对意见,并且有兴趣知道人们可能会强烈认为 JavaScript 在跨平台开发领域不是一个可行的竞争者!也许我的答案可以更好地表述?
  • 我没有投反对票,但我强烈反对:你不能用 JS 创建一个完整的非常复杂的软件:语言不够结构化,而且你有没有编译时检查和not 是强类型的。是的,很多框架都灵活且完全可用,我认为以出色的 Quasar 为例,但它不适合复杂的大型桌面应用程序。另外......一个电子应用程序仍然可以轻松打开来做奇怪的事情。当然,这只是我的意见,但它(仅)基于我 20 年的桌面、移动和网络 deleoper 的长期经验
【解决方案2】:

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

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

【讨论】:

  • 我还要补充一点,Xojo 使用一种面向对象的编程语言,与 C#/Java 非常相似(它可以制作 Web 应用程序)。
【解决方案3】:

你也可以考虑 Livecode

实时代码:http://livecode.com 对于除 Web 之外的任何平台,它都是开源的,并且还包括移动目标,前提是您的代码足够灵活,不是 C# 或 Java。

一种选择是使用 C# 和 GUI 独立性在编译库中构建核心逻辑,然后将其插入实时代码,让 UI 为该工具工作。

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

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

        如果其面向大众市场的消费者

        电子或本机 UI,可能带有共享的非 UI 代码。例如,Visual Studio Code 是用 Electron 制作的(我上次检查过)。 Google Flutter 是一个值得评估的新进入者。 Dropbox 是 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 提供完整的套件而没有任何限制,但它还没有发生。如果它是一个企业应用程序,您也许可以使用 .NET Core for Mac。但请首先使用您要使用的所有控件/库构建一个基本的 .NET Core “hello world”应用程序。然后尝试在 MacOS 上为其构建安装程序,并随机找人使用 Mac 来查看它是否真正安装并运行。您可能会发现您今天在这方面苦苦挣扎(尽管我希望它会变得更好,但多年来都没有)。

        跨平台的总体说明

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

        这就是为什么 - Xojo 和 LiveCode 已经存在 10 年了。他们更多地是为了让事情保持一致。而我发现 .NET 和 QT 一直在变化。你有很多成本跟上琼斯和维护安装程序。因此,对于小型应用程序或实用程序 - XML 编辑器、IT 辅助工具、Xojo 或 LiveCode 可能会帮助您更快地实现目标。

        例如,当您点击 Xojo 上的构建按钮时,它实际上会为 Windows、Mac 和 Linux 生成 3 个可执行文件。老实说,将其与打包跨平台 Python 应用程序甚至为 Windows 打包 .NET 应用程序的疯狂相比。

        权衡的是这些工具 - Xojo 和 LiveCode 通常最终会丢失一些您需要的关键内容,需要一些技巧。您可以阅读他们的论坛。 Xojo 有点像 .NET,虽然 LiveCode 是完全基于“堆栈”的不同编程范式。

        请记住开发人员的幸福感。许多开发人员不想使用 Xojo 或 LiveCode 进行编码,因为它们是鲜为人知的语言。因此,请确保您获得支持。如果你被解雇并在 Xojo 工作了 5 年会怎样?嗯。

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

        【讨论】:

          【解决方案7】:

          Microsoft 刚刚推出了 .NET MAUI,这是一个基于 Xamarian.forms 构建的跨平台 GUI 框架。

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

          这似乎满足您的所有要求。他们没有在文章中明确提及 Linux,但在 Github Repo 的描述中声称支持它。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2010-09-16
            • 1970-01-01
            • 1970-01-01
            • 2011-05-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-03-09
            相关资源
            最近更新 更多