Xamarin 2.0 vs Appcelerator Titanium v​​s PhoneGap

在今年所有的IDE演进(所有主题的平台都改变了)之后,我期待了解这些平台的技术状态。

每个人的优点和缺点是什么? 其中一种方法有一些局限性吗?

我对C#和Javascript有一个很好的体验,没有任何语言的程序化影响可以倾向于一方。

概观

正如Tim Anderson所报道的那样

跨平台开发是一个大问题 ,并且在每个人都使用相同的平台之前一直会如此。 Android的? HTML? WebKit的? iOS版? 视窗? Xamarin? Titanum? PhoneGap的? 电晕? ECC。

有时候我听到说, 基本上有两种跨平台的移动应用程序。 您可以使用 embedded式浏览器控件并编写一个包装为本地应用程序Web应用程序 ,如Adobe PhoneGap / Cordova或Sencha采用的类似方法,也可以使用 创build本机应用程序跨平台工具 ,如Xamarin Studio,Appcelerator Titanium或Embarcardero FireMonkey。

在第二类中,有多样性。 特别是,它们在抽象用户界面的程度上有所不同。

这是权衡。 如果你devise你的跨平台框架,你可以让你的应用程序在每个平台上以几乎相同的方式工作。 如果您在所有平台上共享UIdevise,那么在所有情况下都很难让您的devise感受到同样的感觉。 采用大多数游戏所采用的方法可能会更好一些,即使使用与您的应用程序不同的devise,并在各平台之间保持一致性,尽pipe它在任何平台上都没有本地外观。

编辑 Xamarin v3在2014年开始提供Xamarin.Forms的select,以及纯粹的本地仍然遵循这里提到的哲学(由于这样一个很好的答案冒失的内联编辑)

另一方面,Xamarin Studio却不提供共享的GUI框架:

我们不试图提供一个在所有平台上工作的用户界面抽象层。 我们认为这是一个不好的方法,导致最低的共同用户界面。 (纳特·弗里德曼对蒂姆·安德森)

这是对的; 但不足之处在于为您的应用程序维护两个或更多用户界面devise。

关于PhoneGap和Titanium的比较在Kevin Whinnery的博客中有很好的报道。

PhoneGap的

PhoneGap的目的是允许基于HTML的Web应用 程序作为本地应用程序进行部署和安装 。 PhoneGap Web应用程序封装在本机应用程序shell中,可以通过本地应用程序商店安装多个平台。 此外,PhoneGap还致力于提供一个通用的本地API集,这对于Web应用程序来说通常是不可用的,例如基本的摄像头访问,设备联系人以及浏览器中尚未公开的传感器。

为了开发PhoneGap应用程序,开发人员将在本地目录中创buildHTML,CSS和JavaScript文件,就像开发静态网站一样。 在浏览器中接近本机质量的用户界面性能是一项不重要的任务 – Sencha雇佣了一大批全职的networking编程专家来解决这个问题。 即便如此,在大多数平台上,在今天的大多数浏览器中,即使使用像Sencha Touch这样先进的框架,也无法实现原生质量的UI性能和响应能力。 浏览器已经够好了吗? 这取决于您的要求和敏感度,但毫无疑问,不如本地用户界面。 有时更糟的是,取决于浏览器。

PhoneGap并不像人们所认为的那样是真正的跨平台,并不是所有的平台都支持所有的function。

  • Javascript不是一个应用程序规模的编程语言,太多的全局范围交互,不同的库往往并不很好地共存。 我们花了好几个小时试图让knockout.js和jQuery.mobile一起玩,我们仍然有问题。

  • 框架和图书馆的碎片化景观。 select太多,太多还不够成熟。

  • 奇怪的是,为了我们的应用程序的需要,体面的performance可以实现(不是与jQuery.Mobile,虽然)。 我们尝试了jqMobi(不是很成熟,但速度很快)。

  • 与其他应用程序或cdevicefunction交互的能力非常有限,无论如何,这不会是跨平台的,因为除了less数地理位置,相机和本地数据库之外,HTML5中没有任何标准。

通过Karl Waclawek

Appceleratortitanium

Titanium Mobile的目标是为移动开发提供一个高层次, 跨平台的JavaScript运行时间和API (今天我们支持iOS,Android和Windows Phone,Titanium实际上与MacRuby / Hot Cocoa,PHP或者节点有更多的相同之处。比起PhoneGap,Adobe AIR,Corona或者Rhomobile来,Titanium基于两个关于移动开发的主张: – 移动开发API的核心可以跨平台进行规范化,这些领域应该成为代码重用的目标。 – 开发人员在开发该平台时应该包含特定于平台的API,UI约定和function,针对这些用例提供平台特定的代码以提供最佳体验。

所以出于这些原因, titanium不是企图“写一次,到处跑” 。 和Xamarin一样。

titanium将朝着与Xamarin相似的方向迈进一步。 在实践中,他们将做两层不同的深度:titanium层(在JS中),它给你一个蜜蜂JS-titanium。 如果你想要更低层次,创build了一个额外的层(称为Hyperloop),在那里(总是用JS)直接调用回到本地API的SO

Xamarin(+ MVVMCross)

AZDevelop.net

在过去的18个月中,Xamarin(最初是Novell的一个部门)已经为Visual Studio带来了自己的IDE和pipe理单元。 Mono强调的前提是使用C#创build不同的移动应用程序,同时保持原生UI的开发策略。

除了创build开发本地应用程序的视觉devise平台之外,他们还集成了testing套件,并入本地库支持和Nuget风格的组件库。 最近,他们通过他们的IDE提供了iOS可视化devise,使开发人员免于开放XCode。 在Visual Studio中,现在支持所有三个平台,云testing套件即将出现。

Xamarin从一开始就提供了丰富的Android视觉devise经验。 我还没有下载或打开Eclipse或Xamarin之外的任何其他IDE。 真正令人吃惊的是,我能够使用LINQ处理集合,并创build自定义的委托和事件,使我摆脱了Objective-C和Java的限制。 许多像我一样被宠坏的图书​​馆,如Newtonsoft JSON.Net,在所有这三个环境中都能很好地工作。

在我看来,有几个巨大的优势,包括

  • 本机性能
  • 更容易阅读代码(IMO)
  • 可testing性
  • 客户端和服务器之间共享代码
  • 支持(虽然Xam可以在bugzilla上做的更好)

升级我是使用Xamarin和MVVMCross相结合。 它还是一个相当新的框架,但它是从其他几个框架(如MvvmLight和单行本)的经验中诞生的,现在已经用于几个发布的跨平台项目。

结论

在了解了所有这些基础知识之后,我select了基于产品需求的开发工具。 但是,一般来说,如果你开始使用一个你觉得舒服的工具(即使它需要更高的初始开销),你将永远使用它。

我select了Xamarin + MVVMCross ,我必须说要对这个select感到满意。 我并不害怕用于软件更新的原生SDK,或者看到系统的有限function或者functiongraphics中最微不足道的东西。 编写相当结构化的代码 (DDD + SOA) 对于拥有与本地C#视图实现共享的核心项目 非常有用

参考和链接

我并没有和Appcelerator Titanium一起工作,但是最后我会理解它。

我可以多说一些PhoneGap和Xamarin之间的差异,因为我每周工作在这两个5(或更多)天。

如果您已经熟悉C#和JavaScript,那么我猜想的问题是, 业务逻辑是否位于更适合于JavaScript或C#的领域?

PhoneGap的

PhoneGap旨在允许您使用JavaScript和HTML编写您的应用程序,而且它们提供的许多function旨在模拟当前build议的HTML5最终可用的function规范。 PhoneGap在我看来的好处是,由于您使用HTML来进行UI操作,因此可以轻松地在各个平台之间进行移植 。 不足之处在于,因为您在平台之间移植相同的用户界面,所以它们在任何地方都不会像在家一样感觉到。 这意味着,如果没有进一步的调整,你就不能在iOS和Android上拥有完全在家的应用程序 ,这意味着它具有iOS和Android的风格。 大部分的逻辑可以使用JavaScript编写,这意味着它也可以在平台之间移植 。 如果当前的PhoneGap API可以完成大部分的function,那么启动和运行起来非常简单。 但是,如果设备中有某些东西不在API中,那么您将进入插件开发的乐趣,这将是本地设备的开发语言 (有一个注意事项,但是我会去这意味着您可能需要在Objective-C,Java等中快速起步。关于这个模型的好处是,您通常可以调整许多不同的本地库来满足您的需求,而且许多库已经具有PhoneGap插件 。 虽然你可能没有太多的这些语言的经验,至less会有大量的例子可以使用。

Xamarin

Xamarin.iOS和Xamarin.Android(也称为MonoTouch和MonoDroid)旨在让您拥有一个业务逻辑库 ,并在您的应用程序中使用它,并将其挂接到您的UI中。 因为它是基于.NET 4.5的,所以你可以得到一些很棒的lambda符号LINQ ,以及其他一些C#awesomeness,这可以使你的业务逻辑写得更轻松。 这里的缺点是,Xamarin期望您希望使您的应用程序真正感受到设备本身的特性,这意味着您最终可能会重写每个平台的UI ,然后再将其与业务逻辑挂钩。 我听说过MvvmCross ,这是为了让你更容易 ,但我还没有真正有机会进行研究。 如果你熟悉C#中的MVVM系统,你可能想看看这个。 当谈到本地库,MonoTouch变得有趣。 MonoTouch需要一个绑定库来告诉你的C#代码如何链接到底层的Objective-C和Java代码 。 其中一些图书馆已经有绑定,但是如果你的图书馆没有绑定,创build一个可以是有趣的。 Xamarin已经制定了一个名为Objective Sharpie的工具来帮助这个过程,而且大部分时间,它会为你带来95%的收益 。 其余的5%可能会花费你80%的时间试图绑定一个图书馆。

更新

正如下面的评论所指出的,Xamarin已经发布了Xamarin Forms ,它是一个平台特定UI组件的跨平台抽象 。 绝对值得一看。

PhoneGap / Xamarin混合

现在因为我说过了,所以在上面PhoneGap中提到的警告是一个混合的方法 ,在这里你可以使用PhoneGap作为部件,而Xamarin作为其一部分。 我对此有相当多的经验,我会提醒你不要这样做高度 。 问题在于,如果遇到问题,几乎没有人会接近你正在做的事情,而且会质疑你正在努力做甚么。 这是可行的,但它绝对不是乐趣

Appceleratortitanium

正如我之前提到的,我没有和Appcelerator Titanium一起工作过,所以对于它们之间的差异,我build议你看比较Titanium和Phonegap或Corona,Phonegap,Titanium之间的比较,因为它有一个非常详尽的描述差异。 基本上,虽然他们都使用JavaScript ,但JavaScript的解释方式略有不同。 使用Titanium,您将把您的JavaScript编写到Titanium SDK ,而使用PhoneGap,您将使用PhoneGap API编写应用程序。 由于PhoneGap非常符合HTML5和JavaScript标准,所以您可以使用任何您想要的JavaScript库,如JQuery。 PhoneGap的用户界面将由HTML和CSS组成。 使用Titanium,您将从跨平台XML中受益,该跨平台XML似乎可以生成Native组件 。 这意味着它肯定会有更好的本地外观和感觉。

我曾与Xamarin合作过。 这里是我发现的积极和消极的一面:

阳性

  1. 易于编写代码,C#使工作更容易
  2. 性能不会是一个问题
  3. 原生UI
  4. 良好的IDE,非常像Xcode和Visual Studio。
  5. Xamarindebugging器
  6. Xamarin SDK是免费且开源的。 维基

否定

  1. 您需要知道您想要定位的每个平台的API(iOS,Android,WP8)。 但是,您不需要了解Objective-C或Java。
  2. Xamarin只在平台上分享一些东西(比如数据库和Web服务)。
  3. 你必须分别devise每个平台的UI(这可能是一个祝福或诅咒)。

Phonegap非常慢:单击一个button最多可能需要3秒才能显示下一个屏幕。 iscroll是缓慢和跳动。

还有其他有趣的错误和问题,我能够克服,但总的来说 – 没有完全成熟。

编辑:每脾气暴躁的评论,它不是Phonegap谁实际上是慢,这是JS /浏览器本地引擎

还有AppGyver类固醇很好地将PhoneGap和Native UI结合在一起。

使用类固醇,您可以添加像本机标签,本地导航栏,本地animation和转换,原生模式窗口,原生抽屉/面板(Facebook的一面菜单)等东西到您的PhoneGap应用程序。

这是一个演示:http: //youtu.be/oXWwDMdoTCk?t=20m17s

作为一种替代scheme,您可能需要在bridgeit.mobi上查看BridgeIt。 开放源代码,它解决了上面讨论的浏览器性能/一致性问题,因为它利用了设备上的标准浏览器与Web浏览器。 它还允许您访问本地function,而无需担心app store部署和/或本地容器。

我已经使用,如果简单的基于相机的访问和扫描仪访问,并适用于简单的应用程序。 文档有点轻。 不知道如何在更复杂的应用程序。