Xamarin 2.0 vs Appcelerator Titanium v​​s PhoneGap

Val*_*inc 257 titanium cordova xamarin

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

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

我对C#和Javascript有很好的经验,而不是没有程序化的语言影响可以倾向于一方.

Lui*_*ese 346

概观

蒂姆安德森报道

跨平台开发是一个大问题,并将继续如此,直到每个人都使用相同的平台.Android的?HTML?WebKit的?iOS版?视窗?Xamarin?Titanum?PhoneGap的?电晕?ECC.

有时我听说它基本上有两种 跨平台移动应用程序的方法.您可以使用一个嵌入式浏览器的控制,写一个包装成一个原生应用程序的Web应用程序,如在Adobe的PhoneGap /科尔多瓦或煎茶采取了类似的办法,或者你可以使用一个跨平台的工具创建本机应用程序,比如Xamarin Studio,Appcelerator Titanium或Embarcardero FireMonkey.

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

这是权衡.如果您设计跨平台框架,您可以让您的应用程序在每个平台上的工作方式几乎相同.如果您在所有平台上共享UI设计,那么很难让您的设计在所有情况下都同样正确.采用大多数游戏采用的方法可能会更好,使用与您的应用程序不同的设计,并在各个平台上实现其一致性,即使它在任何平台上都没有本机外观.

编辑 Xamarin v3在2014年开始提供Xamarin.Forms以及纯粹本机的选择,仍然遵循这里提到的哲学(采取内联编辑的自由因为这么好的答案)

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

我们不会尝试提供适用于所有平台的用户界面抽象层.我们认为这是一种糟糕的方法,可以导致最小的公分母用户界面.(纳特弗里德曼给蒂姆安德森)

这是正确的; 但缺点是为您的应用程序维护两个或更多用户界面设计所需的努力.

关于PhoneGap和Titanium的比较在Kevin Whinnery博客中得到了很好的报道.

PhoneGap的

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

要开发PhoneGap应用程序,开发人员将在本地目录中创建HTML,CSS和JavaScript文件,就像开发静态网站一样.在浏览器中接近原生质量的UI性能是一件非常重要的任务--Sencha雇佣了一个由专职人员组成的大型网络编程专家团队来解决这个问题.即便如此,在大多数平台上,在当今的大多数浏览器中,即使使用与Sencha Touch一样先进的框架,也无法达到 原生质量的UI性能和响应能力.浏览器已经"足够好"了吗?这取决于您的要求和敏感度,但毫无疑问它不如原生UI.有时候更糟糕,取决于浏览器.

PhoneGap并不像人们所认为的那样真正的跨平台,并非所有平台都支持所有功能.

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

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

  • 奇怪的是,为了满足我们应用程序的需求,可以实现不错的性能(不过使用jQuery.Mobile).我们尝试了jqMobi(不是很成熟,但很快).

  • 与其他应用程序或cdevice功能交互的能力非常有限,而且这不会是跨平台的,因为HTML5中没有任何标准,除了一些标准,如地理位置,相机和本地数据库.

作者:Karl Waclawek

Appcelerator Titanium

Titanium Mobile 的目标是为移动开发提供高水平的跨平台JavaScript运行时和API(今天我们支持iOS,Android和Windows Phone.Titanium实际上与MacRuby/Hot Cocoa,PHP或节点有更多共同之处. JS比它的PhoneGap,Adobe AIR中,电晕,或Rhomobile的钛是建立在两个断言关于移动开发的功能: -还有就是它可以跨平台进行标准化的移动开发API的核心,这些领域应针对代码重用. - 开发人员在开发该平台时应该包含特定于平台的API,UI约定和功能.这些用例应该存在特定于平台的代码,以提供最佳体验.

因此,出于这些原因,Titanium并不是"一次编写,随处运行"的尝试.与Xamarin相同.

钛将朝着类似于Xamarin的方向迈出一步.在实践中,他们将做两层不同的深度:钛层(在JS中),它为您提供了一个蜜蜂JS-of-Titanium.如果你想更低级别,已经创建了一个额外的层(称为Hyperloop),其中(总是用JS)直接调用你的SO原生API

Xamarin(+ MVVMCross)

AZDevelop.net

Xamarin(最初是Novell的一个部门)在过去18个月中推出了自己的IDE和Visual Studio管理单元.Mono的下划线前提是使用C#创建不同的移动应用程序,同时维护本机UI开发策略.

除了创建用于开发本机应用程序的可视化设计平台之外,它们还集成了测试套件,包含本机库支持和Nuget样式组件存储.最近他们通过他们的IDE提供iOS视觉设计,让开发人员免于打开XCode.在Visual Studio中,现在支持所有三个平台,并且即将推出云测试套件.

从开始,Xamarin提供了丰富的Android视觉设计体验.除了Xamarin,我还没有下载或打开Eclipse或任何其他IDE.真正令人惊奇的是,我能够使用LINQ来处理集合,以及创建自定义委托和事件,使我免受Objective-C和Java限制.我被宠坏的许多库,如Newtonsoft JSON.Net,在所有三种环境中都能完美运行.

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

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

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

结论

在了解了所有这些框架后,我的选择是根据产品需求选择开发工具.一般情况下,如果你开始使用一个你觉得舒服的工具(即使它需要更高的初始开销),你将永远使用它.

我选择了Xamarin + MVVMCross,我必须说对这个选择感到满意.我不害怕接受Native SDK进行软件更新或者看到系统的有限功能或者功能图形最简单的东西.相当结构编写代码(DDD + SOA)是非常有用的有一个核心项目与本地的C#实现意见共享.

参考和链接

  • 爆炸新闻.最新的Xamarin版本(3.0)包括Xamarin.Forms,它提供了跨UI解决方案.这允许创建标准控件,如文本框和按钮,这些控件将映射到特定于平台的等效项.您可以选择使用它的页面,以便您能够快速原型化,然后在以后优化到平台特定版本,或者您可以选择在Xamarin.Forms中执行简单的标准页面(例如注册和登录),但随后使用特定于平台的应用程序其余部分的页面. (13认同)
  • 我想在此添加并非所有平台都支持所有功能.作为一个"谦虚"的例子,虽然PhoneGap确实支持蓝牙,但Titanium已经计划四年支持它,直到他们放弃了市场上昂贵的第三方库(iOS LE为350美元,Android为相同) ). (6认同)
  • 截至2014年5月27日,Titanium不支持蓝牙作为其平台的一部分; 这一直是一个巨大的烦恼,特别是自物联网问世以来.您可以通过在其市场上购买图书馆桥来获得对蓝牙的支持,该桥现在的售价为350美元.尽管他们的社区对此表示强烈支持,但到目前为止还不清楚何时甚至是否有任何计划支持它 (2认同)

Jam*_*rke 103

我对Appcelerator Titanium的工作并不多,但最后我会理解它.

我可以更多地谈谈PhoneGap和Xamarin之间的差异,因为我每周工作这两天(或更多).

如果您已经熟悉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#的awesomeness,这可以让你的业务逻辑编写更少痛苦.这里的缺点是Xamarin希望您希望让您的应用程序在设备上真正感觉自然,这意味着在将其与业务逻辑连接在一起之前,您可能最终会为每个平台重写UI.我听说过MvvmCross,它旨在让您更轻松,但我还没有机会调查它.如果您熟悉C#中的MVVM系统,可能需要查看一下.当涉及到本地库时,MonoTouch变得有趣.MonoTouch需要一个Binding来告诉您的C#代码如何链接到底层的Objective-C和Java代码.其中一些库已经有了绑定,但如果你没有,那么创建一个可能很有趣.Xamarin已经制作了一个名为Objective Sharpie的工具来帮助完成这个过程,而且在大多数情况下,它会让你获得95%的成功.剩余的5%可能需要80%的时间来尝试绑定库.

更新

如下面的评论中所述,Xamarin发布了Xamarin Forms,它是围绕平台特定UI组件的跨平台抽象.绝对值得一看.

PhoneGap/Xamarin Hybrid

现在因为我说我会接受它,上面的PhoneGap中提到的警告是混合方法,你可以使用PhoneGap作为部分,而Xamarin作为部分.我对此有很多经验,我会提醒你不要这样做.很高兴.这里的问题是它是这样一个无芒的土地,如果你曾经遇到的问题,几乎没有人会已经逐渐接近你在做什么,并会质疑你要大大地做什么.这是可行的,但绝对不好玩.

Appcelerator Titanium

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

  • 您链接到的Titanium和PhoneGap之间的比较非常过时.更新的当前比较发布在http://kevinwhinnery.com/post/22764624253/comparing-titanium-and-phonegap(编辑链接到原始文章来源,而不是我链接到的重新发布的博客) (14认同)
  • "我对此有很多经验,我会提醒你不要这样做.高度." <=很棒的报价. (4认同)
  • Xamarin现在已经引入了Xamarin.Forms,它抽象了UI创建,并且可以使用相同的代码库(http://xamarin.com/forms)为Android,iOS和WinPhone创建UI.因此,不需要为每个平台重写UI. (4认同)

小智 38

我和Xamarin一起工作过.以下是我发现的积极和消极因素:

阳性

  1. 易于编码,C#使工作更轻松
  2. 性能不会受到关注
  3. 原生UI
  4. 好的IDE,很像Xcode和Visual Studio.
  5. Xamarin调试器
  6. Xamarin SDK是免费的开源软件.维基

否定

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

  • 实际上你必须知道一些Objective-C来创建iOS应用程序,因为你不时会被迫阅读iOS示例代码.这是基于我的经验. (10认同)
  • 更多开发人员熟悉JS而不是C#?"ve"代表什么? (7认同)
  • 你忘了提及(缺点)你必须知道C#,当JS大多数开发人员已经熟悉时 (4认同)

Eli*_*iss 11

Phonegap非常慢:单击按钮最多可能需要3秒才能显示下一个屏幕.iscroll是缓慢和跳跃的.

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

编辑:Per Grumpy评论,它不是Phonegap实际上很慢,它是JS/Browser本机引擎

  • 电话故意插入点击延迟.有js库可以删除它们.检查https://github.com/ftlabs/fastclick (11认同)
  • 如果您正在考虑使用PhoneGap,我建议使用单页应用程序样式系统. (9认同)

小智 8

还有AppGyver类固醇团结的PhoneGap和原生UI很好.

使用类固醇,您可以添加本地标签,本机导航栏,本机动画和过渡,本机模式窗口,本机抽屉/面板(脸书侧面菜单)等内容到您的PhoneGap应用程序.

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