我是一名网络开发人员,我想把我的网络产品搬到iPhone上。其中一个产品就像谷歌Maps:在手机屏幕上显示地图,您可以拖动或调整地图的大小,并查看我们添加到地图的一些信息。
我知道有一些技术可以让你使用HTML、CSS和Javascript来开发原生iPhone应用。我列举了一些:
Ansca移动 PhoneGap Appcelerator
还有其他类似的产品吗?它们之间有什么区别?我该选哪一个呢?
我是一名网络开发人员,我想把我的网络产品搬到iPhone上。其中一个产品就像谷歌Maps:在手机屏幕上显示地图,您可以拖动或调整地图的大小,并查看我们添加到地图的一些信息。
我知道有一些技术可以让你使用HTML、CSS和Javascript来开发原生iPhone应用。我列举了一些:
Ansca移动 PhoneGap Appcelerator
还有其他类似的产品吗?它们之间有什么区别?我该选哪一个呢?
当前回答
我已经使用Titanium一个多星期了,我觉得我对它的弱点有一个很好的感觉。
1)如果你希望在多个平台上使用相同的代码,祝你好运!你会看到一些类似backgroundGradient的东西,直到你发现android版本不支持它。然后不得不恢复使用渐变图像,不妨使用它的两个版本,使代码更容易对吗?
2)很多奇怪的行为,在Titanium android sdk上,你需要理解什么是“沉重”的窗口,只是为了让后退按钮工作,甚至更好的定向事件跟踪。这并不是真正的android平台,这只是Titanium试图让他们的API工作的方式。
3)你被扔在黑暗中,事情会崩溃,你必须开始注释代码,然后当你找到它时,永远不要使用它。有一些明显的错误,比如android上的方向和百分比,已经存在了六个多月了。
4) bug ....有很多bug,它们会被报告,等待几个月,几天就能修复。我很惊讶,在android存在这么多其他问题的情况下,他们竟然还计划发布一个黑莓手机sdk。
5) Titanium Iphone和Titanium Android的javascript引擎完全不同。在android版本,你可以下载远程javascript文件,包括和使用库,如mootools, jquery等。当我发现这一点时,我在天堂,因为我不需要继续编译我的android应用程序。android apk安装过程需要很长时间!Iphone都不可能,而且Iphone版本的javascript引擎更快。
如果你远离很多原生UI部分,例如使用setInterval来检测方向变化,坚持使用渐变图像,忘记后退按钮,创建自己的动画,忘记窗口标题,工具栏和仪表板。你真的可以做一个api,在这两个工作,而不需要大量的重写。但在这一点上,它就像一个网络应用程序一样缓慢。
那么这值得吗?痛苦过后,每一分钟都是值得的。你可以抽象逻辑,只是为每个人构建不同的UI,而不是到处都是。钛合金可以让你的应用变得流畅,感觉非常快。你失去了每个平台强大的布局能力,但如果你想得简单,事情可以在单一语言下完成。
为什么不开发网页应用呢?在入门级市场的android手机上,它生成web视图的速度非常慢,并且消耗了大量的内存,你可以用它来做更复杂的逻辑。
其他回答
我对PhoneGap的理解是他们为很多iPhone api提供Javascript api。
对于有web开发背景的人来说,Titanium似乎更容易一些。它是一个简单的XML文件,用于创建一个基本的TabView应用程序,然后内容区域中的所有内容都由HTML / JS控制。我也知道Titanium确实为一些框架提供了一些javascript访问(特别是访问位置信息、电话ID等)。
更新:Titanium在0.8版本的框架中添加了Maps API。
以下是对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
我在stackoverflow上注册只是为了评论上面投票最多的答案。糟糕的是,stackoverflow不允许新成员发表评论。所以我必须让这个评论看起来更像一个答案。
Rory Blyth的回答包含了关于这两个javascript移动框架的一些有效观点。然而,他的关键点是不正确的。事实是,Titanium和PhoneGap大同小异。它们都通过一组javascript api公开手机功能,应用程序的逻辑(html, css, javascript)在原生WebView控件中运行。
PhoneGap is not just a native wrapper of a web app. Through the PhoneGap javascript APIs, the "web app" has access to the mobile phone functions such as Geolocation, Accelerometer Camera, Contacts, Database, File system, etc. Basically any function that the mobile phone SDK provides can be "bridged" to the javascript world. On the other hand, a normal web app that runs on the mobile web browser does not have access to most of these functions (security being the primary reason). Therefore, a PhoneGap app is more of a mobile app than a web app. You can certainly use PhoneGap to wrap a web app that does not use any PhoneGap APIs at all, but that is not what PhoneGap was created for. Titanium does NOT compile your html, css or javascript code into "native bits". They are packaged as resources to the executable bundle, much like an embedded image file. When the application runs, these resources are loaded into a UIWebView control and run there (as javascript, not native bits, of course). There is no such thing as a javascript-to-native-code (or to-objective-c) compiler. This is done the same way in PhoneGap as well. From architectural standpoint, these two frameworks are very similar.
Now, are they any different? Yes. First, Titanium appears to be more feature rich than PhoneGap by bridging more mobile phone functions to javascript. Most noticeably, PhoneGap does not expose many (if any) native UI components to javascript. Titanium, on the other hand, has a comprehensive UI APIs that can be called in javascript to create and control all kinds of native UI controls. Utilizaing these UI APIs, a Titanium app can look more "native" than a PhoneGap app. Second, PhoneGap supports more mobile phone platforms than Titanium does. PhoneGap APIs are more generic and can be used on different platforms such as iPhone, Android, Blackberry, Symbian, etc. Titanium is primarily targeting iPhone and Android at least for now. Some of its APIs are platform specific (like the iPhone UI APIs). The use of these APIs will reduce the cross-platform capability of your application.
所以,如果你想让你的应用看起来更“原生”,Titanium是一个更好的选择。如果你想更容易地将你的应用“移植”到另一个平台,PhoneGap会更好。
更新8/13/2010: 链接到一名钛员工对米奇问题的回答。
更新12/04/2010: 我决定给这篇文章一个年度审查,以保持其信息的最新。许多事情在一年中发生了变化,使得最初的帖子中的一些信息过时了。
最大的变化来自钛金属。今年早些时候,Appcelerator发布了Titanium 1.0,从架构的角度来看,它与之前的版本有很大的不同。在1.0中,UIWebView控件不再使用。相反,您可以为任何UI函数调用Titanium api。这一变化意味着以下几点:
Your app UI becomes completely native. There is no more web UI in your app since the native Titanium APIs take over control of all your UI needs. Titanium deserves a lot of credit by pioneering on the "Cross-Platform Native UI" frontier. It gives programmers who prefer the look and feel of native UI but dislike the official programming language an alternative. You won't be able to use HTML or CSS in your app, as the web view is gone. (Note: you can still create web view in Titanium. But there are few Titanium features that you can take advantage of in the web view.)Titanium Q&A: What happened to HTML & CSS? You won't be able to use popular JS libraries such as JQuery that assume the existence of an DOM object. You continue to use JavaScript as your coding language. But that is pretty much the only web technology you can utilize if you come to Titanium 1.0 as a web programmer.
钛视频:钛1.0有什么新功能。
现在,Titanium 1.0会把你的JavaScript编译成“原生位”吗?不。Appcelerator终于在这个开发者博客上澄清了这个问题:Titanium Guides Project: JS Environment。我们程序员比市场部的人更真诚,不是吗?:-)
接下来是PhoneGap。关于PhoneGap没有太多新东西可说。我的看法是,PhoneGap的开发在IBM今年晚些时候加入之前并不活跃。有些人甚至认为IBM为PhoneGap贡献的代码比Nitobi还多。不管这是不是真的,PhoneGap正在积极开发中,这是很好的。
PhoneGap继续以网页技术为基础,即HTML, CSS和JavaScript。PhoneGap似乎不打算像Titanium那样将原生UI功能与JavaScript连接起来。虽然Web UI在性能和原生外观上仍落后于原生UI,但这种差距正在迅速缩小。在web技术中,有两个趋势可以确保移动web UI在性能方面的亮点:
JavaScript引擎从解释器转移到虚拟机。JavaScript是JIT编译成本地代码,以便更快地执行。Safari JS引擎:SquirrelFish Extreme 网页渲染从依赖CPU转向使用GPU加速。在硬件加速的帮助下,页面转换和3D动画等图形密集型任务变得更加流畅。GPU加速合成Chrome
Such improvements that are originated from desktop browsers are being delivered to mobile browsers quickly. In fact, since iOS 3.2 and Android 2.0, the mobile web view control has become much more performing and HTML5 friendly. The future of mobile web is so promising that it has attracted a big kid to town: JQuery has recently announced its mobile web framework. With JQuery Mobile providing UI gadgets, and PhoneGap providing phone features, they two combined creates a perfect mobile web platform in my opinion.
我还应该提到Sencha Touch作为另一个移动web UI小工具框架。Sencha Touch 1.0版本最近发布,采用了包括GPLv3在内的双重授权模式。Sencha Touch可以很好地与PhoneGap合作,就像JQuery Mobile一样。
如果你是一个GWT程序员(像我一样),你可能想看看GWT Mobile,这是一个使用GWT创建移动web应用程序的开源项目。它包括一个PhoneGap GWT包装器,允许在GWT中使用PhoneGap。
Corona SDK (Ansca Mobile)使用Lua作为其编码语言。有关Lua的更多信息,请参见lua.org。
虽然我们计划进一步增加网页集成和本地ui元素,但我们的重点将倾向于图形密集型应用程序,如游戏开发,而不是基于web的技术。换句话说,我们并不认为人们会完全用Javascript/HTML/CSS来编写Corona应用。
Titanium支持native mapkit