Xamarin 2.0与Appcelerator Titanium相比PhoneGap
这个问题在这里已经有了答案:
概观
正如Tim Anderson所报道的那样
跨平台开发是一件大事,并且将持续如此,直到每个人都使用相同的平台。 Android的? HTML? WebKit的? iOS版? 视窗? Xamarin? Titanum? PhoneGap的? 电晕? ECC。
有时我听到它说, 基本上有两种跨平台移动应用程序的方法。 您可以使用嵌入式浏览器控件并编写一个作为本地应用程序打包的Web应用程序 ,如Adobe PhoneGap / Cordova或Sencha采用的类似方法,也可以使用 创建本机应用程序的跨平台工具 ,如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应用程序被封装在本机应用程序外壳中,并且可以通过本地应用程序商店安装用于多个平台。 此外,PhoneGap还致力于提供一种通用的本地API集,这对于Web应用程序来说通常是不可用的,例如基本的摄像头访问,设备联系人以及尚未在浏览器中公开的传感器。
为了开发PhoneGap应用程序,开发人员将在本地目录中创建HTML,CSS和JavaScript文件,就像开发静态网站一样。 在浏览器中接近本机质量的UI性能是一项非常重要的任务 - Sencha雇佣了一大批全职专业的网络编程专家来解决这个问题。 即便如此,在大多数平台上,在今天的大多数浏览器中,即使使用像Sencha Touch这样先进的框架,也无法实现本机品质的UI性能和响应能力。 浏览器已经“足够好”了吗? 这取决于您的要求和敏感度,但毫无疑问,它不如本地用户界面好。 有时更糟,取决于浏览器。
PhoneGap并不像人们所认为的那样是真正的跨平台,并非所有平台都支持所有功能。
Javascript不是一种应用程序规模的编程语言,全球范围的交互作用太多,不同的库通常不会很好地共存。 我们花了很多时间试图让knockout.js和jQuery.mobile一起玩,并且我们仍然有问题。
框架和图书馆的碎片化景观。 选择太多,太多还不够成熟。
奇怪的是,为了我们的应用程序的需要,体面的表现可以实现(不是与jQuery.Mobile,但)。 我们试过jqMobi(不是很成熟,但速度很快)。
与其他应用程序或cdevice功能交互的能力非常有限,无论如何,这不会是跨平台的,因为除了少数几个像地理位置,相机和本地数据库之外,HTML5中没有任何标准。
通过Karl Waclawek
Appcelerator钛
Titanium Mobile的目标是为移动开发提供高水平的跨平台JavaScript运行时和API (目前我们支持iOS,Android和Windows Phone),Titanium实际上与MacRuby / Hot Cocoa,PHP或节点有更多共同之处。 js比使用PhoneGap,Adobe AIR,Corona或Rhomobile做得更好Titanium基于关于移动开发的两个断言: - 移动开发API的核心可以跨平台进行规范化,这些领域应该成为代码重用的目标。 - 针对特定平台的API,UI约定和开发人员在为该平台开发时应纳入的功能,针对这些用例提供平台特定的代码以提供最佳体验。
因此,出于这些原因, 钛不是企图“写一次,到处跑” 。 和Xamarin一样。
钛将朝着类似于Xamarin的方向迈出更大的一步。 在实践中,他们会做两层不同的深度:Titanium层(JS中),它为您提供蜜蜂JS-of-Titanium。 如果你想要更低层次,创建了一个额外的层(称为Hyperloop),其中(总是用JS)直接回调到SO的本地API
Xamarin(+ MVVMCross)
AZDevelop.net
在过去的18个月里,Xamarin(最初是Novell的一个部门)已经将自己的IDE和Visual Studio插件推向市场。 Mono强调的前提是在维护原生UI开发策略的同时使用C#创建不同的移动应用程序。
除了创建开发本地应用程序的可视化设计平台之外,它们还集成了测试套件,并入本地库支持和Nuget风格的组件库。 最近,他们通过他们的IDE提供了iOS视觉设计,使开发人员无需打开XCode。 在Visual Studio中,现在支持所有三种平台,云测试套件即将出现。
Xamarin从一开始就提供了丰富的Android视觉设计体验。 我还没有下载或打开Eclipse或Xamarin之外的任何其他IDE。 真正令人惊讶的是,我能够使用LINQ处理集合,并创建自定义的委托和事件,使我免受Objective-C和Java的限制。 许多像我一样被宠坏的图书馆,如Newtonsoft JSON.Net,在所有三种环境中都能很好地工作。
在我看来,有几个巨大的优势,包括
升级我是使用Xamarin和MVVMCross相结合。 它还是一个相当新的框架,但它是由其他几个框架(如MvvmLight和monocross)的经验产生的,现在已经用于几个已发布的跨平台项目。
结论
在了解所有这些工作之后,我的选择是根据产品需求选择开发工具。 但是,一般来说,如果您开始使用一种您感觉舒适的工具(即使它需要较高的初始开销),您将永远使用它。
我选择了Xamarin + MVVMCross,并且我必须说对这个选择感到满意。 我并不害怕使用原生SDK进行软件更新,或者看到系统的有限功能或功能图形中最微不足道的东西。 编写相当结构化的代码 (DDD + SOA) 对于拥有与本地C#视图实现共享的核心项目非常有用 。
参考和链接
我没有和Appcelerator Titanium一起工作太多,但最后我会理解它。
我可以多说一点PhoneGap和Xamarin之间的差异,因为我每周工作在这两个5(或更多)天。
如果您已经熟悉C#和JavaScript,那么我猜想的问题是, 业务逻辑是否位于更适合JavaScript或C#的领域?
PhoneGap的
PhoneGap旨在允许您使用JavaScript和HTML编写您的应用程序,并且它们提供的大部分功能都旨在模拟当前建议的最终将随HTML5提供的功能规范。 在我看来,PhoneGap最大的好处在于,由于您使用HTML进行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需要一个绑定库来告诉你的C#代码如何链接到底层的Objective-C和Java代码 。 其中一些库已经具有绑定功能,但如果你的不具备这些功能,创建一个库可能会很有趣。 Xamarin已经制定了一个名为Objective Sharpie的工具来帮助这个过程,并且在大部分情况下,它将为您带来95%的途径 。 剩下的5%可能会花费你80%的时间试图绑定一个图书馆。
更新
正如下面的评论所指出的,Xamarin已经发布了Xamarin Forms,它是一个跨平台特定UI组件的跨平台抽象 。 绝对值得一看。
PhoneGap / Xamarin Hybrid
现在因为我说过了,所以在上面PhoneGap中提到的警告是一种混合方法 ,您可以在其中使用PhoneGap,而在部分中使用Xamarin。 我对此有相当多的经验,我会告诫你不要这样做 。 高度 。 这里的问题是它是这样一个无芒的土地 ,如果你曾经遇到的问题,几乎没有人会已经逐渐接近你在做什么,并会质疑你要大大地做什么。 这是可行的,但它绝对没有乐趣 。
Appcelerator钛
正如我之前提到的,我没有和Appcelerator Titanium一起工作过多,所以为了区别它们,我会建议你看看比较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合作过。 以下是我找到的积极和消极之处:
阳性
否定