我是一名网络开发人员,我想把我的网络产品搬到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视图的速度非常慢,并且消耗了大量的内存,你可以用它来做更复杂的逻辑。

其他回答

我已经使用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视图的速度非常慢,并且消耗了大量的内存,你可以用它来做更复杂的逻辑。

让HTML5的小部件看起来像iphone的小部件是一回事,但让它们表现得同样出色完全是另一回事。html5动画的性能(甚至是简单的视图转换),滚动长列表,对手势的响应感觉很粘和不稳定。iPhone用户会注意到其中的区别。

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

我想我还是会继续使用原生应用。

以下是对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

你应该学习objective - c和编程原生应用程序。不要依赖这些你以为会让生活更容易的东西。苹果确保最简单的方法就是使用他们的本地工具和语言。对于你的100行javascript,我可以在3行代码中做同样的事情,或者完全不需要代码,这取决于元素。看一些教程——如果你理解javascript,那么objective - c并不难。变通办法很糟糕,苹果可以随时把你的插头拔掉。

我对PhoneGap的理解是他们为很多iPhone api提供Javascript api。

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

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