我们希望为在线服务编写客户端,该服务应该在尽可能多的平台上提供。这个问题是关于我们应该使用什么编程语言和框架来创建这个客户端。 这些平台是必需的:Linux,Mac,Windows,iOS(iPhone,iPod,iPad)和Android。越多越好。
对于移动平台,有Titanium Mobile。我还没有尝试过这个东西,该网站说你可以使用Javascript等网络技能为iOS和Android开发。我还不知道您是否可以使用SAME代码部署这两个平台。太棒了!
还有Titanium Desktop但我不喜欢与最终应用程序共享完整源代码的想法。 Titanium也为移动设备做到了这一点,但修改通过App Store加载的应用程序并不容易。
那么,还有什么方法可以创建一个至少在三个主要桌面平台上运行的应用程序?我认为使用mono的c#是可行的方法,但我只是意识到你需要在MonoMac上使用mono,以便在Mac App Store上发布它并使用像Growl这样的东西。由于MonoMac自然只适用于Mac,因此再次无法在所有平台上部署单声道应用程序而无需至少重写Mac。如果应用程序在所有平台上看起来都是“原生的”,那就太好了。 Gtk#在Mac上看起来不太好看。它在Windows上“没问题”,在Linux上很棒。
我知道我们可以使用适用于iOS和Mac的Objective-C,适用于Android的Java,适用于Windows的C#.net和适用于Linux的C#.mono,但重点是我们不想在很多中编写相同的应用程序不同的语言。这将使开发和维护变得非常困难。
我们更喜欢具有C风格语法的语言,这对我们PHP Web开发人员来说更容易学习。顺便说一句:我们不喜欢Air,我不确定Java,因为我从未使用它,但它看起来也不像“本机”,感觉有点慢。
修改
请注意:如果至少剩下的代码是相同的,为每个平台创建自己的表单不会有问题。是否可以在同一个C#应用程序中使用MonoMac,Gtk#和Win Forums?而且我更喜欢C#而不是C ++,因为我没有C ++的技能,所以我首先需要检查用Qt写的有多难。
另一个注意事项:我们不打算花太多钱,因为我们需要支付苹果开发者计划,我们想要使用免费或廉价的技术。优先的开源。
答案 0 :(得分:8)
如果您真的想从单个应用程序支持所有这些平台,最好的办法是创建一个Web应用程序。使用HTML5,这样的应用程序甚至可以缓存在设备上,并在没有可用连接时使用。此外,该策略可以根据运行应用程序的设备自定义UI。
如果您打算构建一个在Android和iOS上运行的单个本机应用程序,那就不会有好运,更不用说您提到的所有其他平台了。他们是不同的平台而不是相同的原因是他们是,嗯,不同。它们具有不同的功能,在不同的硬件上运行,使用不同的语言构建,使用具有不同用户界面的不同应用程序模型,并且具有不同期望的受众。
答案 1 :(得分:6)
只需使用C#即可。
单声道项目将涵盖Mac和Linux,monodroid您的Android要求已涵盖,monotouch将负责iPod / iPad / iPhone。
关于UI - mono完全支持System.Windows.Forms命名空间,因此如果你不想,你不必使用GTK#。
我认为我不需要提及Windows支持;)
答案 2 :(得分:5)
多年来我遇到的最佳解决方案是 Qt SDK 。 对所有主要平台,Symbian,OS X,Linux风格,Windows,Windows CE(移动),Android和iOS部分支持等提供强大支持。
它的基础是C ++,但几乎所有语言(如C#)的绑定都可用。还包括许多帮助和支持。
核心Qt库是非常快速和广泛的,整个KDE桌面(Linux)都是用它完成的。 VLC和VirtualBox等着名软件在Qt。
中完成答案 3 :(得分:3)
另一种相对较新的跨平台开发方式是使用开源Eto.Forms,它允许您为每个平台的本机工具包提供一个UI代码库。它是一个UI抽象层,可以定位GTK#,MonoMac / OSX,WinForms和WPF。
还有一个iOS端口正在开发中。
答案 4 :(得分:2)
Java听起来最合适。它是跨平台的,易于理解,拥有庞大的用户群,而Android则基于它。
答案 5 :(得分:1)
根据您是否需要离线交互模式,听起来您应该开发Web应用程序。您可以开发移动版本和桌面版本,从而支持所有上述平台。看看youtube的Iphone应用程序,它保留了与iphone应用程序相同的功能,但纯粹是html。此外,支持html5的浏览器还可以脱机运行。
答案 6 :(得分:0)
听起来很疯狂,请查看 Flash / Flex - 它是跨平台的,代码一次,在任何地方运行,现在编译为例如本机代码Android和iOS以及10.1播放器全程发货。我必须解决这个问题,当Flash Builder Burrito在使用它一段时间后迎合移动时,我已经从C#/ Flash混合转换为仅用于客户端的Flash。 (我们的后端是C#/ Node / C ++等)。
根据您的时间表和需求,您需要了解一下。
一些随机链接:
Blog post about performance and video to single app multi device