我是网络开发人员,我想将我的网络产品移至iPhone。其中一个产品就像Google地图:在手机屏幕上显示地图,您可以拖动或调整地图大小并查看我们添加到地图中的一些信息。
我知道有一些技术可以让您使用HTML,CSS和Javascript来开发本机iPhone应用程序。我发现了一些:
还有其他同类产品吗?它们之间有什么区别?我应该选择哪个?
答案 0 :(得分:368)
答案 1 :(得分:193)
从我收集的内容来看,这两者之间存在一些差异:
PhoneGap基本上为仍然 web apps 生成本机包装器。它会吐出一个WhateverYourPlatformIs项目,你可以构建它并进行部署。如果我们谈论iPhone(这是我花费时间的地方),它与创建一个Web应用程序启动器(一个获得自己的Springboard图标的快捷方式)似乎没什么不同,所以你可以像(喜欢)原生应用)。 “app”本身仍然是html / js / etc.,并在托管浏览器控件中运行。除此之外,PhoneGap提供的是JavaScript和本机设备API之间的桥梁。因此,您针对PhoneGap API编写JavaScript,然后PhoneGap进行相应的本地调用。在这方面, 与部署普通的旧Web应用程序不同。
Titanium源被编译为本机位。也就是你的html / js / etc.不是简单地附加到项目然后托管在Web浏览器控件中 - 它们变成了本机应用程序。这意味着,例如,您的应用程序界面将由本机 UI组件组成。有一些方法可以在没有原生应用程序的情况下获得原生外观,但是......嗯......通常会发生什么样的噩梦。
两者的相似之处在于您使用典型的Web技术编写所有内容(html / js / css / blah blah blah),并且您可以通过自定义JavaScript API访问本机功能。
但是,再次,PhoneGap应用程序(PhonGapps?我不知道......这是一个愚蠢的名字?更容易说 - 我知道那么多)作为网络应用程序开始他们的生活,并结束他们作为网络应用程序的生活。在iPhone上,你的html / js /等。只是在UIWebView控件中执行,而你的js调用的PhoneGap JavaScript API被路由到本机API。
Titanium应用程序成为原生应用程序 - 它们只是使用Web开发技术开发的。
这实际上意味着什么?
Titanium应用看起来就像一个“真正的”应用程序,因为最终它 是一个“真正的”应用程序。
PhoneGap应用看起来像是一个托管在浏览器控件中的Web应用,因为最终 是一个托管在浏览器控件中的Web应用。
哪个适合你?
如果您想使用网络开发技能编写原生应用,Titanium是您最好的选择。
如果您想使用网络开发技能编写应用程序,您可以实际部署到多个平台(iPhone,Android,Blackberry以及他们决定包含的任何其他平台),并且如果您想要访问其子集通过统一的JavaScript API本机平台功能(GPS,加速度计等),PhoneGap可能就是你想要的。
你可能会问:我为什么要写一个PhoneGapp(我决定使用这个名字)而不是一个在网络上托管的网络应用程序?我是否仍然可以通过这种方式访问某些本机设备功能,还具有真正的Web部署的便利性,而不是强迫用户下载我的“本机”应用程序并安装它?
答案是:因为您可以将您的PhoneGapp提交到App Store并为其收费。您还会获得该启动器图标,这会让用户更难忘记您的应用程序(我更可能忘记书签而不是应用程序图标)。
您当然可以收取访问您的网络托管网络应用的费用,但有多少人真正要完成这个过程呢?通过App Store,我选择一个应用程序,点击“购买”按钮,输入密码,我就完成了。它安装。几秒钟后,我正在使用它。如果我不得不使用其他人的一次性移动网络交易界面,这可能意味着必须点击我的名字,地址,电话号码,CC号码以及其他我不想挖掘的东西,我几乎肯定不会经历它。此外,我相信Apple - 我有信心史蒂夫乔布斯不会记录我的信息,然后向我的CC收取一堆顽皮的杂志订阅。
无论如何,除了涉及web dev技术这一事实外,PhoneGap和Titanium是非常不同的 - 只是表面上具有可比性。
我讨厌网络应用程序,如果您阅读iTunes App Store评论,用户非常擅长发现它们。我不会说出任何名字,但我的手机上有几个“应用程序”看起来像垃圾一样运行,这是因为它们是在UIWebView实例中托管的网络应用程序。如果我想使用网络应用程序,我会打开Safari,你知道,导航到一个。我买了一部iPhone,因为我想要的东西是iPhone-y。我在Safari中使用一个时髦的谷歌网络应用程序没有问题,但是如果谷歌只是通过将一个网络应用程序作为本地应用程序隐藏到Springboard上,我会感到受骗。
现在必须走了。我的女朋友可以让你停止使用那台计算机三秒钟的表情。
答案 2 :(得分:62)
答案 3 :(得分:25)
Corona SDK(Ansca Mobile)使用Lua作为编码语言。有关Lua的更多信息,请访问lua.org。
虽然我们计划进一步添加Web集成和本机UI元素,但我们的重点往往是图形密集型应用程序,例如游戏开发,而不是基于Web的技术。换句话说,我们并不认为人们完全用Javascript / HTML / CSS编写Corona应用程序。
答案 4 :(得分:18)
我已经和Titanium合作了一个多星期了,觉得我对它的弱点感觉很好。
1)如果你希望你在多个平台上使用相同的代码祝你好运!你会看到像backgroundGradient这样的东西,直到你发现android版本不支持它为止。然后必须恢复使用渐变图像,不妨将它用于两个版本,以使代码更容易吗?
2)很多奇怪的行为,在Titanium android sdk上你需要了解什么是“重”窗口只是为了让后退按钮工作,甚至更好的定位事件跟踪。这不是Android平台的真正原因,而是Titanium如何尝试使其API工作。
3)你在黑暗中抛出,事情会崩溃,你必须开始评论代码,然后当你找到它时,永远不要使用它。有一些明显的错误,比如Android上的方向和百分比,已经有六个多月的问题了。
4)虫子......有很多虫子,他们会被报道,坐了好几个月,几天就搞定了。我很惊讶他们甚至计划在安卓有很多其他问题时发布黑莓手机sdk。
5)Titanium Iphone与Titanium Android javascript引擎完全不同。在Android版本上,您可以下载远程javascript文件,包含和使用mootools,jquery等库。当我发现这个时,我在天堂,因为我不必继续编译我的Android应用程序。 android apk安装过程需要这么长时间! Iphone都不可能,iphone版本也有更快的javascript引擎。如果你远离很多本机UI部分,即使用setInterval来检测方向变化,坚持使用渐变图像,忘记后退按钮,构建自己的动画,忘记窗口标题,工具栏和仪表板。你真的可以制作一个适用于不需要大量重写的api。但在那一点上,它就像一个网络应用程序一样迟缓。
值得吗?经过所有的痛苦,它每分钟都值得。您可以抽象逻辑,只为每个构建不同的UI,而不是在任何地方。钛可以让您感觉快速流畅的应用。你失去了每个平台强大的布局能力,但如果你认为简单,就可以用一种语言完成。
为什么不是网络应用?在入门级市场上,Android手机生成webview的速度非常慢,并且消耗了大量内存,可用于执行更复杂的逻辑。
答案 5 :(得分:10)
以下是对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
答案 6 :(得分:9)
native mapkit
答案 7 :(得分:8)
使HTML5小部件看起来像iphone小部件是一回事,但让它们表现得同样完全是另一回事。 html5动画的性能(甚至是普通的视图转换),滚动长列表,对手势的响应感觉粘滞和生涩。 iPhone用户会注意到差异。
不同设备支持的手势种类也存在一些差异,导致平台特定代码和可用性问题。
我现在想继续使用本机应用程序。
答案 8 :(得分:7)
Rhomobile Rhodes(http://rhomobile.com/products/rhodes)与PhoneGap的方法非常相似,但它是唯一具有以下内容的框架:
答案 9 :(得分:6)
对于任何对Titanium感兴趣的人,我必须说他们没有很好的文档,缺少一些类,属性和方法。但是很多东西在他们的示例应用程序中“记录”了KitchenSink,所以它并不是那么糟糕。
答案 10 :(得分:5)
我对PhoneGap的理解是,它们为大多数iPhone API提供了Javascript API。
对于Web开发人员来说,Titanium似乎更容易。它是一个简单的XML文件,用于创建基本的TabView应用程序,然后内容区域中的所有内容都由HTML / JS控制。我也知道Titanium确实提供了对某些框架的一些javascript访问(特别是访问位置信息,电话ID等)。
更新:Titanium在其框架的0.8版本中添加了Maps API。
答案 11 :(得分:4)
您应该学习目标c并编写原生应用程序。不要依赖这些你认为会让生活更轻松的事情。 Apple确保最简单的方法是使用他们的原生工具和语言。对于你的100行javascript,我可以在3行代码中完成相同的操作,或者完全没有代码,具体取决于元素。观看一些教程 - 如果你理解javascript那么客观c并不难。解决方法很糟糕,苹果可以随时随地插上你的插件。
答案 12 :(得分:3)
在您提到的解决方案中,它们似乎都没有让您直接访问OS 3.0中引入的MapKit框架。
由于Google Maps HTML小部件不如MapKit(例如,请参阅谷歌纵横),您可能最好开发本机Cocoa touch应用程序,或者选择可以扩展以添加MapKit集成的解决方案。 PhoneGap可以这种方式扩展(默认情况下它是开源的),其他一些解决方案也可以。
编辑:Titanium现在支持MapKit
答案 13 :(得分:1)