电晕,Phonegap,钛之间的比较


310

我是一名网络开发人员,我想将我的网络产品移至iPhone。其中一种产品类似于Google Maps:在手机屏幕上显示地图,您可以拖动或调整地图大小并查看我们添加到地图中的一些信息。

我知道有一些技术可以使您使用HTML,CSS和Javascript开发本机iPhone应用程序。我确定了一些:

还有其他类似的产品吗?它们之间有什么区别?我应该选择哪一个?


1
还有Adobe Flex的,它可以生成iPhone应用程序为2011年6月的adobe.com/products/flex
neoneye

1
一探究竟。杜德在这里是一个重点比较。savagelook.com/blog/portfolio/…–
Hikmat Khan

Answers:


368

我在stackoverflow上注册只是为了评论顶部投票最多的答案。不好的是stackoverflow不允许新成员发表评论。因此,我必须使此评论看起来更像是一个答案。

罗里·布莱斯(Rory Blyth)的答案包含有关两个javascript移动框架的一些有效观点。但是,他的要点是不正确的。事实是Titanium和PhoneGap相似之处多于不同。它们都通过一组javascript API公开了手机功能,并且应用程序的逻辑(html,css,javascript)在本机WebView控件中运行。

  1. PhoneGap不仅仅是Web应用程序的本机包装。通过PhoneGap javascript API,“网络应用”可以访问手机功能,例如地理位置,加速度计摄像头,联系人,数据库,文件系统等。基本上,手机SDK提供的任何功能都可以“桥接”到JavaScript世界。另一方面,在移动Web浏览器上运行的普通Web应用程序无法访问其中的大多数功能(安全是主要原因)。因此,PhoneGap应用程序比Web应用程序更像是移动应用程序。您当然可以使用PhoneGap来包装完全不使用任何PhoneGap API的Web应用程序,但这不是为PhoneGap创建的。

  2. Titanium不会将您的html,css或javascript代码编译为“本地位”。它们被打包为可执行包的资源,就像嵌入式图像文件一样。当应用程序运行时,这些资源将加载到UIWebView控件中并在其中运行(当然是JavaScript而不是本机位)。没有像javascript本地代码(或目标c)这样的编译器。这也可以在PhoneGap中完成。从架构的角度来看,这两个框架非常相似。

现在,它们有什么不同吗?是。首先,通过将更多手机功能桥接到javascript,Titanium似乎比PhoneGap拥有更多的功能。最值得注意的是,PhoneGap不会向JavaScript公开许多(如果有)本机UI组件。另一方面,Titanium具有完善的UI API,可以在javascript中调用它来创建和控制各种本机UI控件。利用这些UI API,Titanium应用程序看起来比PhoneGap应用程序更“原生”。其次,PhoneGap比Titanium支持更多的手机平台。PhoneGap API较为通用,可以在不同的平台上使用,例如iPhone,Android,Blackberry,Symbian等。Titanium至少目前主要针对iPhone和Android。它的某些API是特定于平台的(例如iPhone UI API)。

因此,如果您对应用程序的关注是使其更具“本机”外观,那么Titanium是一个更好的选择。如果您希望能够更轻松地将应用“移植”到另一个平台,PhoneGap会更好。

2010年8月13日更新: 链接到Titanium员工对米奇问题的回答。

更新时间:2010年12月4日: 我决定对该帖子进行年度审核,以使其信息保持最新。一年中发生了许多变化,使得最初发布中的某些信息已过时。

最大的变化来自钛。今年早些时候,Appcelerator发布了Titanium 1.0,从体系结构的角度来看,它与以前的版本大不相同。在1.0中,不再使用UIWebView控件。相反,您可以为任何UI函数调用Titanium API。此更改意味着几件事:

  1. 您的应用程序用户界面完全变为本地用户。由于本机Titanium API接管了所有UI需求的控制,因此您的应用程序中不再有Web UI。通过开创“跨平台本机UI”边界,钛值得称赞。它为喜欢本机UI外观但不喜欢官方编程语言的程序员提供了替代方法。

  2. 随着网络视图的消失,您将无法在应用程序中使用HTML或CSS。(注意:您仍然可以在Titanium中创建Web视图。但是您可以在Web视图中利用一些Titanium功能。)Titanium问与答:HTML和CSS发生了什么?

  3. 您将无法使用假定存在DOM对象的流行JS库(例如JQuery)。您继续使用JavaScript作为编码语言。但是,如果您以Titanium 1.0作为Web程序员,那几乎就是您可以使用的唯一Web技术。

钛视频:钛1.0的新功能。

现在,Titanium 1.0会将JavaScript编译为“本地位”吗?否。Appcelerator最终在以下开发人员博客上解决了这个问题:Titanium Guides项目:JS Environment。我们的程序员比行销部门的人更真实,不是吗?:-)

转到PhoneGap。关于PhoneGap没什么新鲜的话要说。我的看法是,直到IBM在今年晚些时候加入之前,PhoneGap的开发才非常活跃。甚至有人争论说,IBM向PhoneGap贡献的代码比Nitobi多。不管是正确与否,很高兴知道PhoneGap正在积极开发中。

PhoneGap继续以Web技术为基础,即HTML,CSS和JavaScript。就像Titanium一样,PhoneGap似乎没有任何计划将本机UI功能桥接到JavaScript。尽管Web UI在性能和本机外观方面仍落后于本机UI,但这种差距正在迅速缩小。Web技术有两种趋势可确保在性能方面为移动Web UI带来鲜明的功能:

  1. JavaScript引擎从解释器移动到虚拟机。JavaScript被JIT编译为本地代码,以加快执行速度。Safari JS引擎:SquirrelFish Extreme

  2. 网页渲染已从依靠CPU转变为使用GPU加速。借助硬件加速,诸如页面过渡和3D动画之类的图形密集型任务变得更加流畅。Chrome中的GPU加速合成

源自桌面浏览器的此类改进正在迅速交付给移动浏览器。实际上,自iOS 3.2和Android 2.0起,移动Web视图控件的性能和HTML5友好性大大提高。移动Web的前景如此广阔,以至吸引了一个大孩子:JQuery最近宣布了其移动Web框架。我认为,借助JQuery Mobile提供的UI小工具,以及PhoneGap提供的电话功能,两者结合起来创建了一个完美的移动Web平台。

我还应该提到Sencha Touch作为另一个移动Web UI小工具框架。Sencha Touch 1.0版最近以包括GPLv3的双重许可模式发布。就像JQuery Mobile一样,Sencha Touch在PhoneGap上也能很好地工作。

如果您是GWT程序员(例如我),则可能需要查看GWT Mobile,这是一个用于使用GWT创建移动Web应用程序的开源项目。它包括一个PhoneGap GWT包装器,该包装器允许在GWT中使用PhoneGap。


10
嗯...您说“ PhoneGap不仅仅是Web应用程序的本机包装”。您将继续讨论它赋予您对本机设备功能的访问权限。我写道:“ PhoneGap所能提供的是在JavaScript和本机设备API之间的桥梁。因此,您针对PhoneGap API编写了JavaScript,然后PhoneGap进行了相应的本机调用。与部署普通的旧Web应用程序不同。” 如果您注册只是为了反驳我的声明,那么您应该完整阅读该声明。我知道我的帖子很长,但是...仍然。
罗里·布莱斯

5
我本来可以更清晰,但其API的细节是复杂的,因为它随时间变化,从设备到设备什么可以做(它提高了很多,但对于不同的平台特征矩阵已经历了不少版本)。我写了一个关键的区别,我写的是正确的-实际上,这与您写的相符。您只是简单地详细了解了可以访问哪些API。
罗里·布莱斯

9
至于Titanium和“原生位”,我想我的错误是在他们的网站上阅读的-恰好在Appcelerator的首页上:“它们运行出色,因为我们将Titanium编译为本地代码以实现最佳性能。” 也许您应该写信给他们,让他们知道他们错了。看看:tinyurl.com/yzlzvk5
罗里·布莱斯

6
有关更多信息,请查看Titanium常见问题解答-第一个主题“这些移动Web应用程序还是本机移动应用程序”简要介绍了此问题。我会在此处重新发布报价,但我想您希望直接从公司获取报价,因为我相信他们是他们产品的权威:tinyurl.com/ya9topg
罗里·布莱斯

4
丹尼斯,谢谢您的出色回答。您还在用Titanium开发吗?现在您可以评论1.7降落了吗?
PaulM 2011年

193

根据我的收集,这是两者之间的一些区别:

  • PhoneGap基本上为仍然是Web应用程序生成本机包装。它吐出一个WhateverYourPlatformIs项目,您进行构建并部署。如果我们谈论的是iPhone(这是我用我的时间),它似乎并没有从创建一个web应用程序启动器(即获取自己的跳板图标快捷方式,这样你就可以启动它像很多不同的()本机应用程序)。“应用”本身仍然是html / js / etc,并在托管的浏览器控件中运行。PhoneGap所提供的不仅是JavaScript和本机设备API之间的桥梁。因此,您针对PhoneGap API编写了JavaScript,然后PhoneGap进行了相应的相应本机调用。在这方面,它从部署一个普通的旧的Web应用程序不同。

  • 钛源被编译为本地位。也就是说,您的html / js / etc。不只是简单地附加到一个项目,然后托管在Web浏览器控件中-它们就变成了本机应用程序。例如,这意味着您的应用程序界面将由本机 UI组件组成。有一些方法可以在没有本地应用程序的情况下获得本地外观,但是……好吧……这通常是一场噩梦。

两者的相似之处在于,您使用典型的Web技术(html / js / css / blah blah)编写了所有内容,并且可以通过自定义JavaScript API访问本机功能。

但是,再说一次,PhoneGap应用程序(PhonGapps?我不知道...这是一个愚蠢的名字吗?说起来容易-我知道很多)开始作为Web应用程序的生命并结束作为Web应用程序的生命。在iPhone上,您的html / js / etc。只需在UIWebView控件中执行,您的js调用的PhoneGap JavaScript API就会路由到本机API。

Titanium应用程序成为本机应用程序-它们只是使用Web开发技术开发的。

这到底是什么意思

  1. Titanium应用程序看起来像“真实”应用程序,因为最终它 “真实”应用程序。

  2. PhoneGap应用程序看起来像是驻留在浏览器控件的Web应用程序,因为最终它驻留在浏览器控件中的Web应用程序。

哪个适合您?

  • 如果您想使用Web开发技能来编写本机应用程序,那么Titanium是您的最佳选择。

  • 如果您想使用Web开发技能编写应用程序,并且可以将其实际部署到多个平台(iPhone,Android,Blackberry以及他们决定包括的任何其他产品),并且希望访问本机平台功能的子集(GPS,加速度计等)通过统一的JavaScript API,PhoneGap可能就是您想要的。

您可能会问:为什么我要编写一个PhoneGapp(我决定使用这个名称)而不是编写一个Web托管的Web应用程序?我仍然不能以这种方式访问​​某些本机设备功能,但还具有真正的Web部署便利,而不是强迫用户下载“本机”应用程序并安装它吗?

答案是:因为您可以将PhoneGapp提交到App Store并为此付费。您还会获得该启动器图标,这使用户更难忘记您的应用程序(我比起应用程序图标更容易忘记书签)。

您当然可以为访问您的Web托管的Web应用程序付费,但是实际上有多少人将经历此过程?在App Store中,我选择一个应用程序,点击“购买”按钮,输入密码,然后完成。它安装。几秒钟后,我正在使用它。如果我必须使用别人的一次性移动Web交易界面,这可能意味着必须敲击我的姓名,地址,电话号码,抄送号码以及其他我不想敲击的东西,我几乎肯定会不要经历它。另外,我相信苹果-我相信史蒂夫·乔布斯不会记录我的信息,然后向我的CC收取一堆顽皮的杂志订阅费用。

无论如何,除了涉及Web开发技术的事实外,PhoneGap和Titanium还是有很大的不同-只是在表面上具有可比性。

我讨厌网站应用程序,如果您读过iTunes App Store的评论,则用户很容易发现它们。我不愿透露任何名字,但是我的手机上有几个看起来像垃圾一样运行的“应用程序”,这是因为它们是UIWebView实例中托管的Web应用程序。如果要使用Web应用程序,请打开Safari,然后导航到一个。我购买iPhone是因为我想要的是iPhone-y。我在Safari中使用时髦的Google Web应用程序没有问题,但是如果Google通过将Web应用程序作为本机应用程序显示在Springboard上而将书签隐藏在Springboard上,我会感到上当受骗。

要离开了。我的女朋友可以让您停止使用计算机三秒钟的表情。


22
答案的问题是,它主要是错误的。请参阅下面的DennisJZH的答案。
jbwiv

9
@jbwiv-您的评论问题是,它主要基于DennisJZH的回答,而这主要是错误的。请在下面查看我的回复。为避免进一步的混乱,建议您既查看产品的官方文档,也请完整阅读我的文章。非常感谢你。
罗里·布莱斯

15
@Matthew-哦,gf绝对有优先权:)至于这些问题基本上是无关紧要的,因为发生了变化(如果我误解了您的意思,我很抱歉),事实是人们确实希望解决当前存在的问题。我们可以争辩说,这无关紧要,因为将来地球将在其燃烧燃料,膨胀,破坏我们的星球的时候被太阳煮熟,但是……这让我们在等待时可以做些事情。
罗里·布莱斯

2
@Matthew -而且,这个人愿意尝试新的东西。它可能不是您喜欢的方式,但它仍然是新的。您仍然必须了解iPhone的开发(请阅读UI指南等文档)。没有正当理由试图使某人放弃尝试完成某项工作,只是因为您没有看到其中的价值。例如,我讨厌蘑菇,但不要试图阻止其他人食用蘑菇。我了解他们像我喜欢藏红花一样喜欢蘑菇,而且我知道我不希望有人因为不喜欢藏红花而把我带走。
罗里·布莱斯

1
是的,但是如果您是一名真正的Web技术向导,那么我敢肯定,没有人能够意识到您的“ Web应用程序”并不是真正的本机应用程序。在一个应用程序显然是包装在UIWebView中的“ Web应用程序”的情况下,这意味着创建者没有花时间或不够在意使其质量足够高。
trusktr 2011年

62

我正在上Android / iPhone开发课程,我们在Titanium上度过了8个星期(不是全日制)(版本为Titanium 1.4.2,时间大约是2010年11月)。这是我的经验。

iPhone Android双定位

即使API指南声称该功能适用​​于Android和iPhone,但事实并非如此。许多东西根本无法在其中一个平台上运行。有些事情的工作方式有所不同。

班上的很多人都做过iPhone应用程序,如果没有大量重写,他们无法使它们在Android上运行。我开发了一个简单的儿童应用程序Animap(请参见android market / Appstore in Sweden),并开始在Windows下进行开发。Android目标正常运行后,我在OS X上打开了该项目。它没有显示任何针对iPhone的构建内容,仅针对Android。您需要在OS X下启动一个双目标项目。(好的,我将相关文件复制到了一个新项目中)。下一个问题-动画无法在iPhone上运行(在Android上可以运行)。滚动事件在iPhone上无法正常工作。(即,在Android上,当用户停止滚动并从屏幕上松开手指时,会收到取消触摸事件,这在iPhone上不会发生)。

由于在某处未提及,因此您基本上需要在第一个平台上然后在另一个平台上进行试错编程。通过反复试验,我的意思是说要获得像Animap这样的简单应用程序在另一个平台上运行大约需要两天。您还需要在整个代码中都包含if(android)then ...或if(iphone)...

下载并设置

您必须按照信件上的说明进行操作。不要尝试使用Java 64位。它不会编译KitchenSink 1.4.0演示应用程序。(1.3可以正常工作!)您必须将文件直接放在C驱动器上,因为长路径名会使外部程序无法接收所有命令行参数(如果它们太长)。(尽管适用于小型程序)1/3的时间,工具链只会停止,您必须再次按“启动”。然后它可能会工作...非常不可靠。启动时将找不到该模拟器,然后您只需使用Ctrl + Alt + Delete杀死adb.exe并重试即可。

网络连接

在wifi网络上,您有时会失去实时连接,并且Titanium会崩溃(编译/部署界面)。如果您没有有效的Internet连接,它将无法启动,因为它无法将您登录到其服务器。

API

与此相比,CSS,HTML和jQuery轻而易举。Titanium类似于任何其他旧的GUI API,并且您需要为每个按钮/字段/等设置一些属性。记住一个需要设置的所有属性,轻松弄错一个字段就很容易。您在正确的位置用大写字母拼写了吗?(因为这不是编译器捕获的,但是如果您幸运地测试了该部分,它将被视为运行时错误)

在Titanium中,当您在控件顶部添加另一个视图或单击GUI中的其他位置时,事情只会中断。

文献资料

几个API页面带有Android符号,但是当您尝试创建控件时只会返回null。尽管有符号,但它们并非仅在Android平台上可用。有时会提到Android不支持特定方法,但是缺少整个API。

厨房水槽

演示应用程序。我是否提到过由于路径太长而无法将其放入Eclipse项目文件夹时无法编译的问题?必须放在您的C驱动器的根文件夹中。我目前使用symbolik链接(mklink / J ...)

未记录的方法

您必须适当地使用诸如label.setText('Hello World')之类的东西来可靠地更改标签,但这完全没有记录。

调试

Titanium.API.info('打印输出是调试的唯一方法');

编辑中

这些API的格式不正确,因此您无法在Eclipse中获得带有帮助等的普通代码完成。Aptana请帮忙!

硬件

似乎编译器/工具不是多线程的,因此必须具有快速硬盘驱动器的快速计算机,因为您必须进行大量的试验和错误。我有提到糟糕的文档吗?您必须尝试那里的一切,因为您无法信任它!

一些积极的事情

  • 开源的
  • 在以前的项目中,我向自己保证,永远不要再使用封闭源代码,因为您不能仅仅通过投入数小时和人力来简单地解决问题。当您在项目中迟到并且需要在艰难的期限内交付时,这一点很重要。这是开源的,我已经能够看到为什么工具链中断了,并且实际上也对其进行了修复。

  • 错误数据库

  • 它也是开放的。您可以简单地看到自己并不孤单,并采取解决方法,而不必花4个小时进行反复试验。

  • 社区

  • 似乎在他们的论坛上很活跃。

虫子

  • Titanium 1.4不是线程安全的。这意味着,如果您使用线程(在createWindow调用中使用url:属性)并且像线程那样运行程序并来回发送带有数据的事件,则会遇到很多非常非常奇怪的事情-丢失处理程序,丢失Windows,太多事件,太少事件等。所有这些都取决于时间,以不同顺序放置代码行可能会崩溃或修复您的应用程序。在另一个file.js中添加窗口会破坏app.js的执行...这也浪费了Titanium中的内部数据结构,因为它们有时可以在paralell中更新内部数据结构,并用其他内容覆盖刚刚更改的值。

我在Titanium上遇到的许多问题都来自于我在实时系统(例如OSE)上的背景,该系统支持数百个线程,事件和消息传递。这应该可以在Titanium 1.4中使用,但不能可靠地完成。

  • Javascript(对我来说是新的)在运行时错误中死掉了。这也意味着,小的和常见的错误(例如,错误拼写变量名或读取空指针)不会在应有的情况下崩溃,因此您可以对其进行调试。相反,程序的某些部分只是停止工作,例如事件处理程序,因为您放错了位置/未键入正确的字符。

  • 然后,我们在Titanium中有一些更简单的错误,例如某些参数在功能中不起作用(至少在Android平台上非常普遍)。

  • 试用和错误调试周期的速度在多台计算机上运行Titnium Developer之后,我注意到瓶颈是硬盘驱动器。笔记本电脑上的SSD驱动器的构建周期比4200 rpm驱动器快3-5倍。在台式机上,具有RAID 1双硬盘(条带化模式)的构建速度比CPU快一点的单驱动器快25%,而且还击败了SSD驱动器笔记本电脑。

摘要

  • 从该线程中的评论看来,此类工具可以为应用程序提供平台的数量之争。API的数量似乎是关键的卖点。

当您开始使用它时,它会非常闪耀。如果查看打开的bugtracker,您会发现bug的数量保持比固定bug的增长更快的速度。通常这表明开发人员会继续添加更多功能,而不是专注于减少错误数量。

作为一名顾问,他试图为客户向多平台交付相当简单的应用程序-我不确定这实际上比在两个平台上进行本机应用程序开发要快。这是由于这样的事实:当您加快速度时,使用Titanium很快,但是突然之间您低下头,发现自己陷入了一个如此深的洞中,因此您不知道要花多少小时来解决。您不能在特定的期限/时间/成本上不承诺特定的功能。

关于我自己:与wxPython一起使用Python已经两年了。(GUI不一致,但永远不会这样中断。可能是我不了解Javascript和Titanium所使用的线程模型,但根据开放讨论论坛,我并不是一个人,GUI对象突然使用了错误的上下文/没有更新。??????)之前,我在移动设备的C和ASM编程方面具有背景知识。

[编辑-添加了带有错误的部分,并且不是线程安全的] [编辑-现在已经使用了一个月以上,主要在PC上,但在OS X上也是如此。添加了iPhone和Android双重定位。增加了“试错”调试周期的速度。]


1
在Titanium 1.4版本中,我现在研究了Titanium提供的.apk文件,它们根本不是很好。它们可以工作,但是完整的构建目录在其中被压缩在一起。这意味着较小的构建缺陷(例如在构建期间将启动屏幕复制到三个不同的位置)会突然消耗,因为我有一个很大的启动屏幕图像,因此手机中的存储空间约为1兆。那只是一个非常简单的hello-world变体。javascript源代码也被复制到内部版本和.apk文件中,从而交付给所有客户。
user288299 '11

1.5版现已发布,据说是Android平台的主要重写。我不会进行测试,因为我现在需要学习本机Android开发。
user288299 '12

1.5版现已发布,据说是Android平台的主要重写。由于我们现在已开始学习本机Android开发,因此我不会对此进行测试。当我们今天了解本地Android的生命周期时,我相信我的某些窗口在第二次显示时丢失可变内容时遇到的问题是由于Titanium没有保存生命周期的onPause()状态之前的状态引起的。developer.android.com/guide/topics/fundamentals.html#lcycles。调用Titanium.Map.MapView.hide()和更高版本的show()可能只会杀死地图的局部变量
user288299 2010年

1
刚玩过1.7,说明很正确。这个平台非常受欢迎,它的性能令人震惊,并且搜索工作量不计其数。如果项目开始时有资源,请为每个平台构建本机资源。
乔纳森·克雷斯纳

25

Corona SDK(Ansca Mobile)使用Lua作为其编码语言。有关lua的更多信息,请参见lua.org。

尽管我们计划添加更多的Web集成和本机UI元素,但与基于Web的技术相反,我们的重点将倾向于于图形密集型应用程序,例如游戏开发。换句话说,我们不希望人们完全用Javascript / HTML / CSS编写Corona应用程序。


您是否有用于本机UI脚本的任何计划或时间表。我在Lua上做了很多工作,我真的很想爱Corona。对于非游戏开发,钛似乎有点领先。
uroc

4
嗨,uroc。我们已经在1.1版(本周晚些时候发布了ETA)中提供了本机UI功能,不久之后还将有更多功能。但是,我对Titanium的感觉是,它们在公开大量本机UI元素方面做得很好,而我们将专注于最关键的UI元素,同时将更多的工程工作投入到动画和渲染功能中。原因是(i)已经有适用于UI的应用程序好的产品;(ii)UI是Cocoa最友好的部分(相对而言!),但是(iii)涉及OpenGL动画的任何事情在iPhone上都是一个痛点。时刻。
埃文·基尔霍夫

看来Corona适合开发游戏而不是应用程序,对吗?
anticafe 2010年

18

我已经与Titanium合作了一个多星期,感觉对它的弱点有很好的感觉。

1)如果您希望在多个平台上使用相同的代码,祝您好运!您会看到诸如backgroundGradient之类的东西,并且会惊讶不已,直到发现android版本不支持它为止。然后必须恢复为使用渐变图像,不妨在两个版本中都使用它来使代码更容易,对吗?

2)很多奇怪的行为,在Titanium android sdk上,您需要了解什么是“重”窗口,只是为了使后退按钮起作用,甚至更好的定向事件跟踪。这并不是android平台真正的样子,而是Titanium试图使它们的API工作的方式。

3)在黑暗中扔东西,事情会崩溃,您必须开始注释代码,然后在找到它时,切勿使用它。有一些明显的错误,例如方向和Android上的百分比已超过六个月的问题。

4)错误..有很多错误,并且会报告它们,等待几个月,几天之内修复。令我惊讶的是,当android有许多其他问题时,他们甚至计划发布黑莓手机SDK。

5)Titanium Iphone与Titanium Android JavaScript引擎完全不同。在android版本上,您可以下载远程javascript文件,包括并使用mootools,jquery等库。当我发现这一点时我就在天堂,因为我不必继续编译我的Android应用程序。android apk安装过程需要很长时间!iPhone无法实现所有功能,iPhone版本具有更快的JavaScript引擎。

如果您远离许多本机UI部分,即使用setInterval检测方向变化,坚持使用渐变图像,忘记后退按钮,构建自己的动画,忘记窗口标题,工具栏和仪表板。您确实可以制作一个不需要大量重写即可使用的api。但是在那一点上,它与webapp一样迟钝。

值得吗?经过所有的痛苦,它值得每一分钟。您可以抽象逻辑,并为每个逻辑构建不同的UI,然后在各处构建其他UI。钛使您可以快速进行流体应用。您会失去每个平台强大的布局功能,但如果您认为简单,则可以使用一种语言完成工作。

为什么不使用网络应用程序?在入门级市场上,Android手机生成网页视图的速度非常慢,并且会占用大量内存,您可能会使用它们来执行更复杂的逻辑。




8

使HTML5小部件看起来像iphone小部件是一回事,但使它们具有同样好的性能则完全是另一回事。html5动画的性能(甚至是普通的View Transitions),滚动的长长的列表,对手势的响应性都感到发粘和生涩。iPhone用户将注意到差异。

不同设备支持的手势种类也存在一些差异,这也导致特定于平台的代码和可用性问题。

我猜现在我将继续使用本机应用程序。


7

Rhomobile Rhodes(http://rhomobile.com/products/rhodes)与PhoneGap的方法非常相似,但它是唯一具有以下功能的框架:

  1. Model View Controller模式(大多数Web框架提供)
  2. 对象关系管理器
  3. 支持所有流行的智能手机(包括Windows Phone 7)
  4. 托管的开发服务(不仅仅是托管的构建):http : //rhohub.com
  5. RhoStudio IDE中的完整调试器和无需SDK的模拟器
  6. 支持同步的离线数据

6

对于任何对Titanium感兴趣的人,我必须说他们没有很好的文档,但缺少某些类,属性和方法。但是在示例应用程序KitchenSink中有很多“记录”,所以还不错。


5

我对PhoneGap的理解是,它们为许多iPhone API提供了Javascript API。

对于Web开发人员而言,钛似乎更容易。它是一个简单的XML文件,用于创建基本的TabView应用程序,然后内容区域中的所有内容均由HTML / JS控制。我也知道Titanium确实提供了对某些框架的javascript访问(特别是访问位置信息,电话ID等)。

更新:Titanium在其框架的版本0.8中添加了Maps API。


根据“对于Web开发人员的背景,钛似乎更容易。” 声明。你的意思是比本地人更容易吗?由于PhoneGap似乎更适合具有Web开发人员背景的人员而不是Titanium ...
Serhiy

4

您应该学习目标c并编写本机应用程序。不要依赖您认为会使生活更轻松的这些事情。Apple已确保最简单的方法是使用其本机工具和语言。对于您的100行javascript,我可以根据元素在3行代码中执行相同的操作,也可以完全不执行任何代码。观看一些教程-如果您了解javascript,那么目标c并不难。解决方法很痛苦,Apple可以随时随地为您服务。


3
苹果可能会拔掉插头...这就是我所关注的
Mickey Shine

6
Quote:“苹果公司确保最简单的方法是使用其本机工具和语言。” 他们真的没有。如果他们想这样做,他们会提供Python支持。会有垃圾收集(仅垃圾收集会减少崩溃的频率-大多数iPhone应用程序编写得很糟糕)。我挖了ObjC,并且像您一样,我宁愿使用它而不是js,但这不是操作员的问题。而且,MonoTouch使开发比这些选项中的任何一个都容易。我可以一行创建一个属性;用一行获得对Document文件夹的引用...等等。苹果的功能可以大大改善。
罗里·布莱斯

6
一个很好的解决方案是让Apple提供自己的ObjC替代产品。不需要控制级别的应用程序,ObjC可以为您提供。特别是对于企业应用程序而言,开发人员应专注于功能而不是引用计数和属性属性。或者至少使用Xcode和编译器自动执行大多数操作。给我一个开关,该开关允许进行某些假设,并且可以在开发人员选择的代码中绕过(例如:默认情况下保留和@synthesize我的对象属性-像“真实的” ObjC 2.0一样,创建我的支持本地对象为了我)。等等
罗里·布莱斯

2
基本上,您要说的是,让我们用C#编写iPhone应用程序。:)
贾斯汀

3

在您提到的解决方案中,似乎没有一个可以直接访问OS 3.0中引入的MapKit框架。

由于Google Maps HTML小部件的性能不如MapKit(示例,请参阅Google Latitude),因此最好开发本机Cocoa touch应用程序,或者选择可以扩展以添加MapKit集成的解决方案。PhoneGap可以通过这种方式进行扩展(它是开源的,因此默认情况下是默认的),并且其他一些解决方案也可以。

编辑:Titanium现在支持MapKit


谢谢。但是PhoneGap和Titanium之间有本质区别吗?
Mickey Shine

1
MapKit已经在Titanium中本地提供很长时间了。
jhaynie,2010年

@jhaynie:谢谢。我修改了这个答案,以反映Titanium现在得到了支持(9月份撰写时没有)
rpetrich 2010年

1

我试过电晕。直到我发现它不支持流mp3音频,一切都很好。所以,我就在那里停了下来。我认为,如果我真的想成为一名iPhone应用程序开发人员,那么我应该学习obj c。我只想制作一个具有广播电台列表的应用程序,然后单击它们即可开始播放。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.