Xamarin 2.0 vs Appcelerator Titanium vs PhoneGap

在今年所有的IDE演进(主题上的所有平台都发生了变化)之后,我希望了解这些平台的技术状态。

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

我在c#和Javascript方面有很好的经验,没有编程语言的影响可以倾斜到一边。

150378 次浏览

我使用Appcelerator Titanium的时间并不长,但我会把我对它的理解放在最后。

我可以更多地谈谈PhoneGap和Xamarin之间的区别,因为我每周都有5天(或更多)的时间在使用这两个软件。

如果你已经熟悉c#和JavaScript,那么我猜问题是,业务逻辑是否在一个更适合JavaScript或c#的领域?

PhoneGap

PhoneGap被设计成允许你使用JavaScript和HTML来编写你的应用程序,它们所提供的大部分功能都是为了模仿当前提议的功能规范而设计的,最终将与HTML5一起使用。在我看来,PhoneGap的最大好处是,因为你是用HTML做UI,它可以很容易地平台间移植。缺点是,因为你在不同平台间移植相同的UI,所以在任何一个平台上都感觉不太自在。意思是,在没有进一步调整的情况下,你就不能让应用程序在iOS和Android上感觉完全自在吗,这意味着它具有iOS和Android样式。你的大部分逻辑可以使用JavaScript编写,这意味着它也可以是平台间移植。如果当前的PhoneGap API做了你想要的大部分事情,那么它很容易启动和运行。然而,如果你需要从设备中获得一些API中没有的东西,那么你就会进入插件开发的乐趣,它将在本机设备开发语言的选择中(有一个警告,但我会讲到它),这意味着你可能需要在Objective-C, Java等中迅速跟上速度。这个模型的好处是,你通常可以适应许多不同的本机库来服务于你的目的,而许多库已经有PhoneGap插件。虽然你可能对这些语言没有太多的经验,但至少会有大量的例子来工作。

Xamarin的

Xamarin的。iOS和Xamarin。Android(也称为MonoTouch和MonoDroid),被设计成允许你拥有一个业务逻辑库,并在你的应用程序中使用它,并将它挂钩到你的UI中。因为它是基于。net 4.5的,所以你可以得到一些很棒的lambda符号LINQ,和一大堆其他的c#很棒的东西,这可以让你编写业务逻辑不那么痛苦。缺点是Xamarin希望您的应用程序在设备上真正具有原生的感觉,这意味着在将其与业务逻辑连接在一起之前,您可能会以为每个平台重写UI结束。我听说过MvvmCross,它是为了让你更轻松,但我还没有机会深入研究它。如果你熟悉c#中的MVVM系统,你可能想看一下这个。谈到本机库,MonoTouch变得很有趣。MonoTouch需要一个绑定来告诉你的c#代码如何链接到底层的Objective-C和Java代码。其中一些库已经有绑定,但如果您的库没有绑定,创建一个绑定可能会很有趣。Xamarin制作了一个名为Objective Sharpie .的工具来帮助这个过程,在大多数情况下,它将为您提供很棒的lambda符号0。剩下的5%可能会占用您80%的时间来尝试绑定库。

更新

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

PhoneGap / Xamarin Hybrid

现在因为我说过我会讲到它,上面PhoneGap中提到的警告是混合方法,在那里你可以部分使用PhoneGap,部分使用Xamarin。我有相当多的经验与此,我将警告你不要这样做高度。问题是,它是这样一个无人地带,如果你遇到问题,几乎没有人会接近你在做什么,并会质疑你正在尝试做什么。这是可行的,但这一点都不好玩

Appcelerator钛

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

Phonegap非常慢:点击一个按钮最多需要3秒才能显示下一个屏幕。

. Iscroll是缓慢和跳跃的 还有其他有趣的错误和问题,我能够克服, 但总的来说-还没有完全成熟 < p >编辑: 根据不爽的评论,实际上不是Phonegap慢,而是JS/Browser原生引擎

概述

蒂姆•安德森报告

跨平台开发是一个大不了,并将继续如此,直到有一天所有人都使用相同的平台。安卓吗? HTML ?WebKit吗?iOS吗?窗户吗?Xamarin的吗?Titanum吗?PhoneGap吗?电晕吗?ecc。< / p >

有时我听到有人说基本上有两种方法 跨平台移动应用。你可以使用嵌入 浏览器控件,并写入Web应用程序包装成原生应用程序,作为 在adobephonegap /Cordova或Sencha采取的类似方法,或 你可以使用一个创建本机的跨平台工具 应用程序,如Xamarin Studio, Appcelerator Titanium或Embarcardero FireMonkey . < / p > 然而,在第二类中,存在多样性。特别是, 它们在抽象用户的程度上有所不同 接口。< / p > 这里有一个权衡。如果你设计跨平台框架 可以让您的应用程序在每个平台上以几乎相同的方式工作。 如果你在所有平台上共享UI设计,那就很难做到 让你的设计在所有情况下都一样正确。可能会更好 采用大多数游戏采用的方法,使用设计 让你的应用与众不同,并充分利用它的一致性 平台,即使它没有本机的外观和感觉 任何平台。< / p >

Xamarin v3在2014年开始提供Xamarin的。形式和pure native的选择,仍然遵循这里提到的哲学(自由的内联编辑,因为这样一个伟大的答案)

另一方面,Xamarin Studio并没有试图提供一个共享的GUI框架:

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

这是对的;但缺点是需要为应用程序维护两个或多个用户界面设计。

PhoneGap和Titanium的比较在凯文Whinnery博客中有很好的报道。

PhoneGap

PhoneGap的目的是允许基于html的web应用程序 作为本地应用程序安装。PhoneGap网络 应用程序被包装在本机应用程序外壳中,并且可以这样做 通过本地应用商店安装,适用于多个平台。 此外,PhoneGap努力提供一个通用的本地API集 这通常是不可用的web应用程序,如基本 摄像头访问、设备触点和尚未暴露的传感器 浏览器。< / p > 要开发PhoneGap应用程序,开发人员将创建HTML, CSS, 和JavaScript文件在本地目录,很像开发一个 静态网站。方法中的原生质量的UI性能 浏览器是一个不简单的任务- Sencha雇用了一个大型的web团队 编程专家们致力于解决这个问题。甚至 所以,在今天的大多数平台和浏览器中,到达 原生质量的UI性能和响应简单地是不可能的,即使使用像Sencha Touch这样高级的框架。是 浏览器已经足够好了吗?这取决于你的要求 但毫无疑问,它不如原生UI。 有时更糟,取决于浏览器

PhoneGap并不像人们想象的那样真正跨平台,并不是所有的功能在所有平台上都得到了同等的支持。

  • Javascript不是一种应用程序规模的编程语言,有太多的全局范围交互,不同的库通常不能很好地共存。我们花了很多时间尝试获得knockout.js和jQuery。我们在移动领域合作得很好,但我们仍然存在问题。

  • 框架和库的碎片化景观。太多的选择,太多的不够成熟。

  • 奇怪的是,对于我们的应用程序的需求,可以实现不错的性能(不是用jQuery。移动)。我们尝试了jqMobi(不是很成熟,但是很快)。

  • 与其他应用程序或cdevice功能的交互能力非常有限,而且这不是跨平台的,因为HTML5中除了地理定位、摄像头和本地数据库等少数标准外,没有任何标准。

卡尔Waclawek

Appcelerator钛

Mobile的目标是提供一个高级的,跨平台的JavaScript运行时和移动应用程序接口开发(今天我们支持iOS, Android和Windows Phone。Titanium实际上与MacRuby/Hot Cocoa, PHP或node.js有更多的共同点,而不是与PhoneGap, Adobe AIR, Corona或Rhomobile。《Titanium》是基于关于手机开发的两个论断: 有一个核心的移动开发api,可以在不同平台上标准化。这些区域应该是代码重用的目标。 —开发者在面向该平台开发游戏时,需要结合一些平台特有的api、UI约定和功能。对于这些用例,应该存在特定于平台的代码,以提供可能的最佳体验

因此,由于这些原因,Titanium并不是“编写一次,到处运行”的尝试。和Xamarin一样。

钛将在类似Xamarin的方向上更进一步。在实践中,他们会做两个不同深度的层:一层是Titanium(在JS中),它会给你一个bee JS-of-Titanium。如果你想要更低级的,可以创建一个额外的层(称为Hyperloop),在那里(总是使用JS)直接调用SO的原生api

Xamarin (+ MVVMCross)

AZDevelop.net

Xamarin(原Novell的一个部门)在过去的18个月里已经有了 为Visual Studio推出了自己的IDE和管理单元。的 Mono的主要前提是创建不同的移动应用程序

.使用c#,同时保持本地UI开发策略

除了创建一个视觉设计平台来开发原生 应用程序,它们集成了测试套件,集成了本机 库支持和Nuget风格的组件存储。最近他们 通过他们的IDE提供iOS视觉设计,解放了开发者 打开XCode。在Visual Studio中,这三个平台现在都是

从一开始,Xamarin就提供了丰富的Android视觉设计 体验。我还没有下载或打开Eclipse或任何其他IDE 除了Xamarin的。真正令人惊讶的是我能使用LINQ 使用集合以及创建自定义委托和事件 这让我摆脱了objective-C和Java的限制。许多 我已经被宠坏了,比如Newtonsoft JSON。净,工作

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

  • 本机性能
  • 更易于阅读代码(IMO)
  • 可测试性
  • 客户端和服务器之间的共享代码
  • 支持(尽管Xam可以在bugzilla上做得更好)

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

结论

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

我选择了Xamarin + MVVMCross,我必须说我对这个选择很满意。 我不害怕使用Native SDK进行软件更新,也不害怕看到系统的有限功能或最琐碎的功能图形。编写结构合理的代码 (DDD + SOA) 非常有用与原生c#视图实现共享核心项目

参考资料及连结

我和Xamarin一起工作过。以下是我发现的优点和缺点:

阳性

  1. 易于编码,c#使工作更容易
  2. 性能不是问题
  3. 本地用户界面
  4. 好的IDE,很像Xcode和Visual Studio。
  5. Xamarin的调试器
  6. Xamarin SDK是免费的开源软件。维基

底片

  1. 你需要了解你想要瞄准的每个平台(iOS、Android、WP8)的API。但是,您不需要了解Objective-C或Java。
  2. Xamarin跨平台共享的东西很少(比如数据库和web服务)。
  3. 你必须为每个平台分别设计UI(这可能是好事,也可能是坏事)。

作为替代方案,你可以在BridgeIt .mobi上查看BridgeIt。它是开源的,解决了上面讨论的浏览器性能/一致性问题,因为它利用了设备上的标准浏览器而不是web视图浏览器。它还允许你访问本地功能,而不必担心应用商店部署和/或本地容器。

我已经将它用于简单的基于摄像头的访问和扫描仪访问,它适用于简单的应用程序。文档内容有点少。不知道它在更复杂的应用程序上会如何表现。

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

使用类固醇,你可以添加像本机标签,本机导航栏,本机动画和过渡,本机模式窗口,本机抽屉/面板(facebook侧菜单)等东西到你的PhoneGap应用程序。

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