我是一名网络开发人员,我想将我的网络产品移至iPhone。其中一种产品类似于Google Maps:在手机屏幕上显示地图,您可以拖动或调整地图大小并查看我们添加到地图中的一些信息。
我知道有一些技术可以使您使用HTML,CSS和Javascript开发本机iPhone应用程序。我确定了一些:
还有其他类似的产品吗?它们之间有什么区别?我应该选择哪一个?
我是一名网络开发人员,我想将我的网络产品移至iPhone。其中一种产品类似于Google Maps:在手机屏幕上显示地图,您可以拖动或调整地图大小并查看我们添加到地图中的一些信息。
我知道有一些技术可以使您使用HTML,CSS和Javascript开发本机iPhone应用程序。我确定了一些:
还有其他类似的产品吗?它们之间有什么区别?我应该选择哪一个?
Answers:
我在stackoverflow上注册只是为了评论顶部投票最多的答案。不好的是stackoverflow不允许新成员发表评论。因此,我必须使此评论看起来更像是一个答案。
罗里·布莱斯(Rory Blyth)的答案包含有关两个javascript移动框架的一些有效观点。但是,他的要点是不正确的。事实是Titanium和PhoneGap相似之处多于不同。它们都通过一组javascript API公开了手机功能,并且应用程序的逻辑(html,css,javascript)在本机WebView控件中运行。
PhoneGap不仅仅是Web应用程序的本机包装。通过PhoneGap javascript API,“网络应用”可以访问手机功能,例如地理位置,加速度计摄像头,联系人,数据库,文件系统等。基本上,手机SDK提供的任何功能都可以“桥接”到JavaScript世界。另一方面,在移动Web浏览器上运行的普通Web应用程序无法访问其中的大多数功能(安全是主要原因)。因此,PhoneGap应用程序比Web应用程序更像是移动应用程序。您当然可以使用PhoneGap来包装完全不使用任何PhoneGap API的Web应用程序,但这不是为PhoneGap创建的。
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。此更改意味着几件事:
您的应用程序用户界面完全变为本地用户。由于本机Titanium API接管了所有UI需求的控制,因此您的应用程序中不再有Web UI。通过开创“跨平台本机UI”边界,钛值得称赞。它为喜欢本机UI外观但不喜欢官方编程语言的程序员提供了替代方法。
随着网络视图的消失,您将无法在应用程序中使用HTML或CSS。(注意:您仍然可以在Titanium中创建Web视图。但是您可以在Web视图中利用一些Titanium功能。)Titanium问与答:HTML和CSS发生了什么?
您将无法使用假定存在DOM对象的流行JS库(例如JQuery)。您继续使用JavaScript作为编码语言。但是,如果您以Titanium 1.0作为Web程序员,那几乎就是您可以使用的唯一Web技术。
现在,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带来鲜明的功能:
JavaScript引擎从解释器移动到虚拟机。JavaScript被JIT编译为本地代码,以加快执行速度。Safari JS引擎:SquirrelFish Extreme
网页渲染已从依靠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。
根据我的收集,这是两者之间的一些区别:
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开发技术开发的。
这到底是什么意思?
Titanium应用程序看起来像“真实”应用程序,因为最终它是 “真实”应用程序。
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上,我会感到上当受骗。
要离开了。我的女朋友可以让您停止使用计算机三秒钟的表情。
我正在上Android / iPhone开发课程,我们在Titanium上度过了8个星期(不是全日制)(版本为Titanium 1.4.2,时间大约是2010年11月)。这是我的经验。
即使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连接,它将无法启动,因为它无法将您登录到其服务器。
与此相比,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上遇到的许多问题都来自于我在实时系统(例如OSE)上的背景,该系统支持数百个线程,事件和消息传递。这应该可以在Titanium 1.4中使用,但不能可靠地完成。
Javascript(对我来说是新的)在运行时错误中死掉了。这也意味着,小的和常见的错误(例如,错误拼写变量名或读取空指针)不会在应有的情况下崩溃,因此您可以对其进行调试。相反,程序的某些部分只是停止工作,例如事件处理程序,因为您放错了位置/未键入正确的字符。
然后,我们在Titanium中有一些更简单的错误,例如某些参数在功能中不起作用(至少在Android平台上非常普遍)。
试用和错误调试周期的速度在多台计算机上运行Titnium Developer之后,我注意到瓶颈是硬盘驱动器。笔记本电脑上的SSD驱动器的构建周期比4200 rpm驱动器快3-5倍。在台式机上,具有RAID 1双硬盘(条带化模式)的构建速度比CPU快一点的单驱动器快25%,而且还击败了SSD驱动器笔记本电脑。
当您开始使用它时,它会非常闪耀。如果查看打开的bugtracker,您会发现bug的数量保持比固定bug的增长更快的速度。通常这表明开发人员会继续添加更多功能,而不是专注于减少错误数量。
作为一名顾问,他试图为客户向多平台交付相当简单的应用程序-我不确定这实际上比在两个平台上进行本机应用程序开发要快。这是由于这样的事实:当您加快速度时,使用Titanium很快,但是突然之间您低下头,发现自己陷入了一个如此深的洞中,因此您不知道要花多少小时来解决。您不能在特定的期限/时间/成本上不承诺特定的功能。
关于我自己:与wxPython一起使用Python已经两年了。(GUI不一致,但永远不会这样中断。可能是我不了解Javascript和Titanium所使用的线程模型,但根据开放讨论论坛,我并不是一个人,GUI对象突然使用了错误的上下文/没有更新。??????)之前,我在移动设备的C和ASM编程方面具有背景知识。
[编辑-添加了带有错误的部分,并且不是线程安全的] [编辑-现在已经使用了一个月以上,主要在PC上,但在OS X上也是如此。添加了iPhone和Android双重定位。增加了“试错”调试周期的速度。]
Corona SDK(Ansca Mobile)使用Lua作为其编码语言。有关lua的更多信息,请参见lua.org。
尽管我们计划添加更多的Web集成和本机UI元素,但与基于Web的技术相反,我们的重点将倾向于于图形密集型应用程序,例如游戏开发。换句话说,我们不希望人们完全用Javascript / HTML / CSS编写Corona应用程序。
我已经与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手机生成网页视图的速度非常慢,并且会占用大量内存,您可能会使用它们来执行更复杂的逻辑。
以下是对Appcelerator和PhoneGap的最新分析和深度分析:http : //savagelook.com/blog/portfolio/a-deeper-look-at-appcelerator-and-phonegap
以下是有关它们在程序上的区别的更多详细信息:http : //savagelook.com/blog/portfolio/phonegap-is-web-based-appcelerator-is-pure-javascript
Rhomobile Rhodes(http://rhomobile.com/products/rhodes)与PhoneGap的方法非常相似,但它是唯一具有以下功能的框架:
我对PhoneGap的理解是,它们为许多iPhone API提供了Javascript API。
对于Web开发人员而言,钛似乎更容易。它是一个简单的XML文件,用于创建基本的TabView应用程序,然后内容区域中的所有内容均由HTML / JS控制。我也知道Titanium确实提供了对某些框架的javascript访问(特别是访问位置信息,电话ID等)。
更新:Titanium在其框架的版本0.8中添加了Maps API。
您应该学习目标c并编写本机应用程序。不要依赖您认为会使生活更轻松的这些事情。Apple已确保最简单的方法是使用其本机工具和语言。对于您的100行javascript,我可以根据元素在3行代码中执行相同的操作,也可以完全不执行任何代码。观看一些教程-如果您了解javascript,那么目标c并不难。解决方法很痛苦,Apple可以随时随地为您服务。
在您提到的解决方案中,似乎没有一个可以直接访问OS 3.0中引入的MapKit框架。
由于Google Maps HTML小部件的性能不如MapKit(示例,请参阅Google Latitude),因此最好开发本机Cocoa touch应用程序,或者选择可以扩展以添加MapKit集成的解决方案。PhoneGap可以通过这种方式进行扩展(它是开源的,因此默认情况下是默认的),并且其他一些解决方案也可以。
编辑:Titanium现在支持MapKit
我试过电晕。直到我发现它不支持流mp3音频,一切都很好。所以,我就在那里停了下来。我认为,如果我真的想成为一名iPhone应用程序开发人员,那么我应该学习obj c。我只想制作一个具有广播电台列表的应用程序,然后单击它们即可开始播放。