ChatGPT解决这个技术问题 Extra ChatGPT

Corona、Phonegap、Titanium 的比较

锁定。这个问题及其答案被锁定,因为这个问题离题但具有历史意义。它目前不接受新的答案或交互。

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

我知道有一些技术可以让你使用 HTML、CSS 和 Javascript 来开发原生 iPhone 应用程序。我已经确定了一些:

安斯卡移动

电话间隙

加速器

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

还有 Adobe FLEX,它可以在 2011 年 6 月生成 iPhone 应用程序。adobe.com/products/flex
一探究竟。老兄,这是一个中肯的比较。 savagelook.com/blog/portfolio/…

S
StackOverflowNewbie

我注册 stackoverflow 只是为了评论顶部投票最多的答案。不好的是 stackoverflow 不允许新成员发表评论。所以我必须让这个评论更像一个答案。

Rory Blyth 的回答包含有关这两个 javascript 移动框架的一些有效观点。但是,他的关键点是错误的。事实上,Titanium 和 PhoneGap 的相似之处多于不同之处。它们都通过一组 javascript API 公开手机功能,应用程序的逻辑(html、css、javascript)在原生 WebView 控件中运行。

PhoneGap 不仅仅是 Web 应用程序的原生包装器。通过PhoneGap javascript API,“web 应用”可以访问手机功能,如地理定位、加速度计相机、联系人、数据库、文件系统等。基本上,手机 SDK 提供的任何功能都可以“桥接”到javascript 世界。另一方面,在移动 Web 浏览器上运行的普通 Web 应用程序无法访问大多数这些功能(安全性是主要原因)。因此,PhoneGap 应用程序与其说是 Web 应用程序,不如说是一个移动应用程序。您当然可以使用 PhoneGap 来包装一个根本不使用任何 PhoneGap API 的 Web 应用程序,但这不是创建 PhoneGap 的目的。 Titanium 不会将您的 html、css 或 javascript 代码编译成“本机位”。它们被打包为可执行包的资源,就像嵌入的图像文件一样。当应用程序运行时,这些资源被加载到 UIWebView 控件中并在那里运行(当然,作为 javascript,而不是原生位)。没有 javascript-to-native-code(或 to-objective-c)编译器之类的东西。这在 PhoneGap 中也是如此。从架构的角度来看,这两个框架非常相似。

现在,它们有什么不同吗?是的。首先,Titanium 似乎比 PhoneGap 功能更丰富,因为它将更多手机功能连接到 javascript。最值得注意的是,PhoneGap 不会将许多(如果有的话)原生 UI 组件暴露给 javascript。另一方面,Titanium 具有全面的 UI API,可以在 javascript 中调用以创建和控制各种原生 UI 控件。利用这些 UI API,Titanium 应用程序看起来比 PhoneGap 应用程序更“原生”。其次,PhoneGap 支持的手机平台比 Titanium 多。 PhoneGap API 更加通用,可以在不同的平台上使用,例如 iPhone、Android、Blackberry、Symbian 等。Titanium 至少目前主要针对 iPhone 和 Android。它的一些 API 是特定于平台的(如 iPhone UI API)。使用这些 API 会降低应用程序的跨平台能力。

因此,如果您对应用程序的关注是让它看起来更“原生”,Titanium 是一个更好的选择。如果您希望能够更轻松地将您的应用程序“移植”到另一个平台,PhoneGap 会更好。

2010 年 8 月 13 日更新: Link to a Titanium employee's answer to Mickey's question.

2010 年 4 月 12 日更新:我决定对这篇文章进行年度审查,以使其信息保持最新。许多事情在一年中发生了变化,使得最初帖子中的一些信息已经过时。

最大的变化来自钛。今年早些时候,Appcelerator 发布了 Titanium 1.0,从架构的角度来看,它与之前的版本大相径庭。在 1.0 中,不再使用 UIWebView 控件。相反,您可以为任何 UI 功能调用 Titanium API。这种变化意味着几件事:

您的应用程序 UI 变得完全原生。由于原生 Titanium API 接管了您所有的 UI 需求,因此您的应用程序中不再有 Web UI。 Titanium 在“跨平台原生 UI”前沿领域的开拓值得称赞。它为喜欢原生 UI 的外观和感觉但不喜欢官方编程语言的程序员提供了替代方案。您将无法在应用程序中使用 HTML 或 CSS,因为 Web 视图已消失。 (注意:您仍然可以在 Titanium 中创建 Web 视图。但是您可以在 Web 视图中利用的 Titanium 功能很少。)Titanium 问答:HTML 和 CSS 发生了什么?您将无法使用假设存在 DOM 对象的流行 JS 库,例如 JQuery。您继续使用 JavaScript 作为您的编码语言。但是,如果您以 Web 程序员的身份来到 Titanium 1.0,那么这几乎是您可以使用的唯一 Web 技术。

Titanium video: What is new in Titanium 1.0.

现在,Titanium 1.0 是否将您的 JavaScript 编译成“原生位”?不。Appcelerator 终于在这个开发者博客上澄清了这个问题:Titanium Guides Project: JS Environment.我们程序员比营销部门的人更真诚,不是吗? :-)

转到PhoneGap。关于PhoneGap,没有太多新东西可说。我的看法是,在今年晚些时候 IBM 加入之前,PhoneGap 的开发并不是很活跃。有些人甚至争辩说,IBM 为 PhoneGap 贡献的代码比 Nitobi 还要多。不管这是否属实,很高兴知道 PhoneGap 正在积极开发中。

PhoneGap 继续以 Web 技术为基础,即 HTML、CSS 和 JavaScript。看起来 PhoneGap 没有任何计划将原生 UI 功能连接到 JavaScript,就像 Titanium 正在做的那样。虽然 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 友好。移动网络的未来充满希望,以至于吸引了一个大孩子来到城里:JQuery has recently announced its mobile web framework. 在我看来,JQuery Mobile 提供 UI 小工具,PhoneGap 提供电话功能,这两者结合起来创造了一个完美的移动网络平台。

我还应该提到 Sencha Touch 作为另一个移动网络 UI 小工具框架。 Sencha Touch 1.0 版最近在包含 GPLv3 的双重许可模式下发布。 Sencha Touch 与PhoneGap 配合得很好,就像JQuery Mobile 一样。

如果您是 GWT 程序员(像我一样),您可能需要查看 GWT Mobile,这是一个使用 GWT 创建移动网络应用程序的开源项目。它包括一个PhoneGap GWT 包装器,可以在GWT 中使用PhoneGap。


嗯……你说“PhoneGap 不仅仅是 Web 应用程序的原生包装器”。您继续讨论它为您提供的对本机设备功能的访问。我想我在写道:“PhoneGap 提供的除此之外是 JavaScript 和本机设备 API 之间的桥梁。因此,您针对 PhoneGap API 编写 JavaScript,PhoneGap 然后进行适当的相应本机调用。在这方面,它是不同于部署一个普通的旧网络应用程序。”如果您注册只是为了反驳我的陈述,您应该已经完整阅读了它。我知道我的帖子很长,但是……仍然。
我本来可以更清楚的,但是关于哪些 API 的细节很复杂,因为随着时间的推移,你可以做什么随着设备的变化而变化(它已经改进了很多,但是不同平台的功能矩阵已经经历了很多修改)。我写了一个关键的区别,我写的是正确的——事实上,它与你写的一致。您只是更详细地了解了您可以访问哪些 API。
至于 Titanium 和“本机位”,我想我的错误是在他们的网站上阅读此内容 - 就在 Appcelerator 的首页:“它们运行良好,因为我们将 Titanium 编译为本机代码以获得最佳性能。”也许你应该给他们写信让他们知道他们错了。看看:tinyurl.com/yzlzvk5
有关更多信息,请查看 Titanium 常见问题解答 - 第一个主题“这些移动 Web 应用程序还是原生移动应用程序”简洁地涵盖了该问题。我想在这里重新发布一个报价,但我认为你宁愿直接从公司那里得到它,因为我相信他们是他们产品的权威:tinyurl.com/ya9topg
丹尼斯,感谢您的出色回答。您还在使用 Titanium 进行开发吗?你现在能评论一下 1.7 已经登陆了吗?
R
Rory Blyth

根据我收集的信息,以下是两者之间的一些区别:

PhoneGap 基本上为仍然是 Web 应用程序的内容生成原生包装器。它会生成一个 WhatYourPlatformIs 项目,您构建并部署它。如果我们谈论的是 iPhone(这是我花时间的地方),它似乎与创建 Web 应用程序启动器(一个拥有自己的 Springboard 图标的快捷方式,所以你可以像(喜欢)一样启动它)本机应用程序)。 “应用程序”本身仍然是 html/js/等,并在托管浏览器控件中运行。除此之外,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/etc.只是在 UIWebView 控件内执行,并且您的 js 调用的 PhoneGap JavaScript API 被路由到本机 API。

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

这实际上意味着什么?

Titanium 应用程序看起来像一个“真正的”应用程序,因为最终它是一个“真正的”应用程序。 PhoneGap 应用程序看起来像是托管在浏览器控件中的 Web 应用程序,因为最终它是托管在浏览器控件中的 Web 应用程序。

哪个适合您?

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

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

你可能会问:我为什么要写一个PhoneGapp(我决定使用这个名字)而不是一个托管在网络上的网络应用程序?难道我不能仍然以这种方式访问一些本机设备功能,而且还能方便地进行真正的 Web 部署,而不是强迫用户下载我的“本机”应用程序并安装它吗?

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

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

无论如何,除了涉及网络开发技术这一事实之外,PhoneGap 和 Titanium 是非常不同的 - 以至于只能在表面上进行比较。

顺便说一句,我讨厌网络应用程序,如果你阅读 iTunes App Store 的评论,用户很擅长发现它们。我不会说出任何名字,但我的手机上有几个“应用程序”看起来和运行起来都像垃圾一样,这是因为它们是托管在 UIWebView 实例中的 Web 应用程序。如果我想使用网络应用程序,我会打开 Safari,然后导航到其中一个。我买了一部 iPhone,因为我想要 iPhone-y 的东西。例如,我在 Safari 中使用时髦的谷歌网络应用程序没有问题,但如果谷歌只是通过将网络应用程序呈现为原生应用程序,将书签偷偷带入 Springboard,我会感到受骗。

要离开了。我的女朋友脸上的表情是“请你停止使用那台电脑”三秒钟。


答案的问题在于它大多是错误的。请参阅下面的 DennisJZH 的回答。
@jbwiv - 您的评论的问题在于它主要基于 DennisJZH 的回答,这主要是错误的。请参阅下面的回复。为避免进一步混淆,我建议您既查看产品的官方文档,又完整阅读我的帖子。非常感谢。
@Matthew - 哦,gf 绝对有优先权:) 至于这些问题基本上是不相关的,因为变化发生了(如果我误解了你的意思,我很抱歉),事实是人们确实想要解决现在存在的问题。我们可以争辩说,这些都不重要,因为地球在未来会被太阳煮熟,因为它会燃烧燃料并膨胀,摧毁我们的星球,但是……这让我们在等待的时候有事可做。
@Matthew - 另外,这个人愿意尝试新事物。它可能不是您喜欢的方式,但它仍然是新的。您仍然需要了解 iPhone 开发(阅读有关 UI 指南等的文档)。没有正当理由仅仅因为您没有看到其中的价值而试图让某人放弃尝试完成某事。例如,我讨厌蘑菇,但不要试图阻止其他人吃它们。我知道他们喜欢蘑菇就像我喜欢藏红花一样,而且我知道我不希望任何人因为他们不喜欢藏红花而试图从我身边夺走它。
是的,但是如果您是真正的网络技术向导,我敢肯定没有人能够意识到您的“网络应用程序”并不是真正的本地应用程序。如果应用程序显然是封装在 UIWebView 中的“Web 应用程序”,那么这意味着创建者没有花时间或足够关心以使其具有足够高的质量。
E
ESV

我正在学习 Android/iPhone 开发课程,我们在 Titanium 上花了 8 周时间(不是全日制)(版本是 Titanium 1.4.2,时间大约是 2010 年 11 月)。这是我的经验。

iPhone Android 双目标

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

班上很多人都做过 iPhone 应用程序,如果不进行重大改写,他们就无法让它们在 Android 上运行。我开发了一个名为 Animap 的简单儿童应用程序(参见瑞典的 android market / Appstore)并开始在 Windows 下开发。一旦 Android 目标开始工作,我就在 OS X 上打开了该项目。它没有显示任何针对 iPhone 的构建内容,仅针对 Android。你需要在 OS X 下启动一个双目标项目。(好的,我将相关文件复制到一个新项目中)。下一个问题 - 动画在 iPhone 上不起作用(它们在 Android 上起作用)。滚动事件在 iPhone 上的工作方式不同。 (即在 Android 上,当用户停止滚动并从屏幕上松开手指时,您会收到 untouch 事件,这在 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 会在您身上崩溃(编译/部署界面)如果您没有有效的互联网连接,它将无法启动,因为它无法让您登录到他们的服务器。

API

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

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

文档

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

厨房水槽

演示应用程序。我有没有提到如果你把它放在你的 Eclipse 项目文件夹中它不会编译,因为路径太长了?必须放在你的C盘根目录下。我目前使用符号链接(mklink /J ...)

未记录的方法

您必须适当地使用 label.setText('Hello World') 来更改可靠的标签,但这根本没有记录。

调试

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

编辑

这些 API 没有任何好的格式,因此您无法在 Eclipse 中通过帮助等获得普通的代码完成。阿普塔纳请帮忙!

硬件

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

一些积极的事情

开源

从以前的项目中,我向自己承诺永远不会再使用封闭源代码,因为你不能仅仅通过投入时间和人力来解决问题。当您在项目中迟到并且需要在硬期限内交付时,这一点很重要。这是开源的,我已经能够看到工具链中断的原因并实际修复它。

错误数据库

它也是开放的。您可以简单地看到您并不孤单并做一个解决方法,而不是再花 4 个小时在试错上。

社区

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

错误

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

我在使用 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 双目标。增加了试错调试周期速度。]


随着 Titanium 的 1.4 版本,我现在查看了从 Titanium 提供的 .apk 文件,它们根本不是很好。它们可以工作,但完整的构建目录在其中被压缩在一起。这意味着在构建过程中将启动屏幕复制到三个不同位置等较小的构建缺陷会突然消耗,因为我有一个很大的启动屏幕图像,手机中大约 1 兆的存储空间。这只是一个非常简单的 hello-world 变体。 javascript 源代码也被复制到构建和 .apk 文件中,从而交付给所有客户。
1.5 版现已发布,据说是对 Android 平台的重大改写。我不会对此进行测试,因为我现在需要学习原生 Android 开发。
1.5 版现已发布,据说是对 Android 平台的重大改写。我不会对此进行测试,因为我们现在已经开始学习原生 Android 开发。正如我们今天所了解的原生 Android 的生命周期一样,我相信一些窗口在第二次显示时丢失可变内容的问题是由于 Titanium 没有在生命周期的 onPause() 状态之前保存状态引起的。 developer.android.com/guide/topics/fundamentals.html#lcycles 。调用 Titanium.Map.MapView.hide() 和稍后的 show() 可能会简单地杀死地图的局部变量
刚玩了1.7,你的描述太对了。这个平台非常受欢迎,性能很差,并且围绕搜索进行了无数小时的工作。如果您在项目开始时拥有资源,请为每个平台构建本机。
E
Evan Kirchhoff

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

虽然我们计划添加进一步的 Web 集成和原生 UI 元素,但我们的重点将倾向于图形密集型应用程序,例如游戏开发,而不是基于 Web 的技术。换句话说,我们并不设想人们完全用 Javascript/HTML/CSS 编写 Corona 应用程序。


您是否有任何原生 UI 脚本的计划或时间尺度。我已经用 Lua 做了很多,我真的很想爱 Corona。对于非游戏开发来说,Titanium 似乎有点领先。
嗨,尤洛克。我们已经在 1.1 版中提供了原生 UI 功能(预计本周晚些时候!),不久之后还会有更多功能。然而,我对 Titanium 的感觉是,他们在展示大量原生 UI 元素方面做得很好,而我们将专注于最关键的 UI 元素,同时将更多的工程精力投入到动画和渲染功能中。原因是 (i) 已经有针对纯 UI 应用程序的好产品,(ii) UI 是 Cocoa 中最友好的部分(相对而言!),但是 (iii) 任何涉及 OpenGL 动画的东西都是 iPhone 上的一个痛点片刻。
似乎Corona适合开发游戏而不是应用程序,对吗?
J
Joseph Montanez

我已经使用 Titanium 一个多星期了,我觉得我对它的弱点有很好的感觉。

1) 如果您希望在多个平台上使用相同的代码,祝您好运!你会看到类似 backgroundGradient 的东西,并感到惊讶,直到你发现 android 版本不支持它。然后必须恢复使用渐变图像,不妨将它用于两个版本以使代码更容易对吧?

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

3)你被扔在黑暗中,事情会崩溃,你必须开始评论代码,然后当你找到它时,永远不要使用它。有一些明显的错误,比如 android 上的方向和百分比,这些问题已经存在超过六个月了。

4) Bug .... 有很多 Bug,它们会被报告,等待几个月,几天后得到修复。我很惊讶他们甚至计划在 android 存在许多其他问题时发布一个 black berry mobile sdk。

5) Titanium Iphone 与 Titanium Android javascript 引擎完全不同。在 android 版本上,您可以下载远程 javascript 文件,包含和使用 mootools、jquery 等库。当我发现这一点时,我在天堂,因为我不必继续编译我的 android 应用程序。 android apk安装过程需要这么长时间! Iphone 这一切都不可能,而且 iphone 版本有一个更快的 javascript 引擎。

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

那么值得吗?在所有的痛苦之后,每一分钟都是值得的。您可以抽象逻辑并为每个构建不同的 UI,而不是在任何地方都使用 else。 Titanium 可让您制作流畅的应用程序,感觉很快。你失去了每个平台强大的布局能力,但如果你想简单,事情可以在单一语言下完成。

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


T
Tony Lukasavage

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


j
jhaynie

Titanium 支持原生 mapkit


u
user158678

使 HTML5 小部件看起来像 iphone 小部件是一回事,但让它们表现同样出色则完全是另一回事。 html5 动画的性能(甚至是普通的视图转换)、滚动长列表、对手势的响应感觉粘滞和生涩。 iPhone 用户会注意到差异。

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

我想我现在会继续使用本机应用程序。


A
Adam Blum

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

模型视图控制器模式(大多数 Web 框架都提供) 对象关系管理器支持所有流行的智能手机(包括 Windows Phone 7) 托管开发服务(不仅仅是托管构建):http://rhohub.com 完整的调试器和 SDK RhoStudio IDE 中的 -less 仿真器支持同步离线数据


g
gyozo kudor

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


J
Jackson Miller

我对 PhoneGap 的理解是它们为大部分 iPhone API 提供了 Javascript API。

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

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


根据“对于 Web 开发人员背景而言,Titanium 似乎更容易。”陈述。你的意思是比原生更容易吧?由于 PhoneGap 似乎比 Titanium 更适合具有 Web 开发人员背景的人......
T
TouchGameDev

你应该学习 Objective c 并编写原生应用程序。不要依赖这些你认为会让生活更轻松的东西。 Apple 确保最简单的方法是使用他们的本地工具和语言。对于您的 100 行 javascript,我可以在 3 行代码中执行相同的操作,或者根本不需要代码,具体取决于元素。观看一些教程 - 如果您了解 javascript,那么目标 c 并不难。解决方法很糟糕,苹果可以随时给你拔掉插头。


苹果可能会拔掉插头……这就是我所关心的
引用:“Apple 确保最简单的方法是使用他们的本地工具和语言。”他们真的没有。如果他们想这样做,他们会提供 Python 支持。会有垃圾收集(仅此一项就可以减少崩溃的频率——大多数 iPhone 应用程序都写得很糟糕)。我挖掘 ObjC,和你一样,我宁愿使用它而不是 js,但这不是操作的问题。此外,MonoTouch 比任何这些选项都更容易开发。我可以在一行中创建一个属性;用一行获取对 Document 文件夹的引用......等等。苹果的位可以大大改善。
一个好的解决方案是让 Apple 提供他们自己的 ObjC 替代方案。适用于不需要 ObjC 为您提供的控制级别的应用程序。特别是对于开发人员应该关注功能而不是引用计数和属性属性的企业应用程序。或者至少使用 Xcode 和编译器自动完成大部分工作。给我一个允许做出某些假设的开关,并且可以在开发人员选择的代码中绕过它(例如:默认情况下保留和@synthesize 我的对象属性 - 并且,像“真正的”ObjC 2.0 一样,创建我的支持本地人为了我)。等等。
基本上你要说的是,让我们用 C# 编写 iPhone 应用程序。 :)
r
rpetrich

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

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

编辑:Titanium 现在支持 MapKit


谢谢你。但是PhoneGap和Titanium有什么本质区别吗?
MapKit 已经在 Titanium 中原生提供了很长时间。
@jhaynie:谢谢。我已经修改了这个答案以反映 Titanium 现在有支持(它在 9 月写的时候没有)
n
netmastan

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