iPhone开发工具的工作方式

你不需要掌握Cocoa和Objective C来创建杀手级的iPhone应用。Rhomobile、PhoneGap、Appcelerator和Ansca工具利用了标准的Web技术,同时也利用了本地特性

当苹果公司向开发者开放iPhone时,O'Reilly books注意到其长期被忽视的Cocoa和Objective c上的书籍销量猛增。这些优雅的方言从未在苹果公司之外流行开来,但当iPhone SDK出现时,全世界又开始研究起来。如果你想在罗马工作,就学拉丁文。

不过,随着新的工具包和开发平台的出现,程序员有可能不用学习Objective C来创建iPhone应用程序,这种要求也开始消退。这些框架采用诸如优秀的老式JavaScript或新奇的Ruby等语言编写的代码,并让用户完全控制屏幕,就像本地应用程序一样。如果你正在编写一款快速移动的3-D游戏,或者想要利用这款以电池为动力的神奇游戏的每一盎司性能,那么学习Objective C还是有意义的,但其他人现在都可以不用再去上学了。

工具包还提供了跨设备开发的承诺,这一过程既惊人地高效,又带来无尽的小失望。理论上,你的软件可以在iPhone、黑莓、安卓手机上运行,在某些情况下甚至可以在塞班手机或Java ME手机上运行。在实际操作中,字体从来都不可能完全相同,而且时不时会出现小故障。如果你用大量的笔划来编写代码,图片看起来会是一样的,但是那些纠结于细节的人会发现这是很困难的。

我拿了四个工具包——Rhomobile Rhodes、Nitobi PhoneGap、Appcelerator Titanium和Ansca Corona——出去玩了玩,编写了一些代码,并确信使用其中任何一个都可以很容易地创建菜单驱动机制来浏览数据。如果您想为用户提供一个经过良好调优的数据库接口,那么立即创建一个应用程序是非常简单的。

[如果您无法查看本文中的表格和屏幕图像,请点击这里。]

Rhodes、PhoneGap、Titanium和Corona都是不错的工具。尽管在功能上存在差异,但您的选择可能取决于支持您最喜欢的语言的语言。这就是使用这些框架的全部意义。如果你知道JavaScript、Lua或Ruby,你可以在iPhone上快速创建一些东西。

Rhomobile罗兹如果您喜欢Ruby或者需要移植Ruby代码,那么Rhomobile的Rhodes框架是将您的代码移植到移动平台的一个很好的途径。Rhomobile将代码的字节码版本与一个小型Ruby解释器(版本1.9)捆绑在一起,以生成“本地应用程序”。Rhodes supports all of the major platforms, including iPhone, BlackBerry, Windows Mobile, Symbian, and Android, although I only looked at the iPhone result.

字节码解释器是否是真正的本地应用程序可能不值得争论;这个争论最好留给计算机科学理论家去解决。它们当然比在本地浏览器上运行的Web应用程序更本机。它们通常与真正的本机包一样使用snap,所以实际的人不需要太担心这个争论。

Rhomobile的开发过程就像构建一个Ruby on Rails Web应用程序。电话既是服务器又是客户端。它有分裂的人格,总是自言自语。

Ruby on Rails开发人员会感到如获如归。您可以使用.rb和.erb文件中嵌入的命令在HTML中创建用户界面,然后通过输入来启动它们在命令行中。在为其他平台开发时,还可以在Mac和Eclipse上使用Xcode。Rhomobile脚本编译Ruby代码,将所有内容打包到应用程序中,对其进行签名,并为您启动模拟器。交互和调试周期非常快。

该数据库不是MySQL或嵌入式数据库,而是Rhom,一种具有一些基本查询的对象映射工具。这和一些精简的数据库,比如CouchDB这种现象越来越普遍。Rhom运行在电话本身上,但是它使用AJAX调用与RhoSync服务器交互,AJAX调用是一种允许本地数据库与远程服务器进行备份和更新的技术。这个RhoSync工具也是一个可以安装在服务器上的Ruby on Rails应用程序。它可以为Rhodes应用程序提供数据。

我在Mac上遇到了几个基本的故障。这个应用程序对行末字符非常敏感,当我迫使编辑器使用Unix结尾时,这个问题就解决了。也没有处理404错误的简单机制。只要找不到页面,应用程序就会崩溃。如果你继续使用Xcode,它会工作得更好。但我找到了解决所有故障的办法,并构建了一些没有问题的简单应用程序。

虽然我们的目标是构建一个Ruby on Rails程序员非常熟悉的home,但Rhomobile的世界与Rails并不相同。如果你喜欢使用eval指令进行聪明的元编程,你会经常受挫,因为Rhomobile为了阻止开发人员添加新特性或函数而向后弯曲。苹果希望在每个应用程序启动前都能彻底检查它,而eval这样的函数让我们不可能事先评估代码。因此,Rhomobile将eval排除在Rhodes框架之外。

Rhodes还比许多传统的Ruby on Rails框架要轻一些。例如,为了节省空间,Rhomobile省略了XML和Web服务。毕竟,您创建的应用程序会不断地自言自语,因此不应该同样需要使用外部标准。如果客户端层没有XML解析器,那么就不要在服务器层使用XML。标签相当于动脉硬化。

Rhomobile还增加了一些新特性,让Ruby/HTML程序员可以与iPhone的功能进行交互。它构建了指向地理位置信息、联系人管理器和摄像头的链接。日期/时间经理和电话铃声经理来了。

您可以使用rake从命令行构建Rhodes应用程序,但我发现Xcode集成更容易使用。

在资源紧张的环境中,保持客户机尽可能轻便是有意义的,因为每个解析都会消耗宝贵的电池寿命,但它破坏了其中一个特性。如果您已经有使用XML的Ruby代码,那么将其移植到iPhone上就需要付出一些努力。事情并不总是那么简单。您可能需要集成XML解析器或删除XML格式化代码。

菱形移动工具只是个开始。Rhomobile还在构建RhoHub,一个托管开发环境,允许您在Web上创建智能手机应用程序。

对于Ruby程序员来说,Rhodes框架是一个很好的工具,对于不熟悉Ruby的人来说,它甚至可能是一个不错的选择。虽然我遇到了许多困难,但集成的服务器机制足以吸引人去学习Ruby。尽管跨平台承诺只是为了方便移植到各种智能手机,但您应该能够轻松地将应用程序转移到通用Web上。

菱形车正逐渐走出beta-like阶段,并开始定价。随着1.2版本的发布,该公司将为使用Rhodes创建应用程序以及将其链接到RhoSync服务器设定一个固定的价格。

Nitobi PhoneGapPhoneGap开源项目一开始是由Nitobi的一些程序员做的,但它很快吸引了足够的关注,使其成为一个真正的竞争对手。Nitobi的工作人员正在努力增强开源版本,并寻找增加商业特性的方法。

PhoneGap是一个准备运行的项目,它会弹出一个UIWebView对象并将其指向你创建的index.html文件。你所有的编程都是用HTML和JavaScript完成的。隐藏在UIWebView中的iPhone版本的WebKit允许你浏览文件。

这个解决方案没有Rhomobile提供的Ruby客户机-服务器包那么强大。没有放置“服务器端”代码的地方,操作系统就像一个非常笨拙的Web服务器。如果您可以用JavaScript编写所有的业务逻辑,那么这并不像看起来那样有限制,但是要将结果转换回经典的Web应用程序是很困难的。通常在服务器上单独运行的受保护代码现在用JavaScript与客户端代码混合在一起。如果没有什么安全和欺诈问题,你就会对你的iPhone应用程序感到满意。但是同时为网络和iPhone写东西并不简单。

PhoneGap项目是用Objective C编写的,但是它会将你的HTML和JavaScript加载到一个UIWebView对象。

PhoneGap项目确实传递了一些通常在iPhone 2.0浏览器中无法获得的数据。最新版本的Safari内置了与地理位置数据的连接,而PhoneGap在推出之前就已经包含了这些数据。PhoneGap还与iPhone API的所有主要部分挂钩,包括短信、联系人、原始文件、摄像头和加速度计。

该项目的跨平台成功很大程度上依赖于WebKit实现。Android和iPhone都依赖于相同的开源工具包来呈现HTML。早期版本的黑莓不使用WebKit,所以如果你的目标是这些黑莓,你需要重写你的JavaScript来处理跨浏览器的问题。把你的应用程序限制在黑莓OS 4.6上可能更容易。

PhoneGap项目聚集了大量具有广泛才能的程序员。大多数活动都是针对iPhone的,不过也有一些针对Android和黑莓的。

使用PhoneGap最大的问题是苹果会拒绝一些但不是所有用它开发的应用程序。(查看我的经验)。许多程序员认为苹果几乎是自动拒绝PhoneGap代码的,并指责PhoneGap应用程序链接到一些私有api或滥用了UIWebView。许多人推测,苹果可能只是试图削弱跨领域开发。没有人能确定,但有一个长长的清单从PhoneGap启动项目开始的被接受的iPhone应用程序

Appcelerator钛如果您喜欢用HTML和JavaScript开发应用程序,那么没有理由将乐趣限制在智能手机上。Appcelerator的Titanium平台有两种类型:用于手持设备的移动版本和用于Windows、Mac和Linux的桌面版本。但是,这两个平台并不完全相同,因为桌面版本允许使用Python和Ruby编写代码,而移动版本只接受JavaScript。

Appcelerator还声称,在它的演示应用程序中“大约200行代码,0 Objective-C”可以生成“1个本地iPhone应用程序”。This claim to produce iPhone-native apps may be a bit truer than with the others because the system is meant to be more than a mirror of Web development. While PhoneGap is designed for Web browser developers, Titanium includes a number of exclusive packages. You may be writing JavaScript, but much of what you're doing is stringing together objects from the Titanium namespace. The application I built with PhoneGap could run in most modern Web browsers, but the one I built with Titanium needed the Titanium libraries.

这些库比其他框架中的库要广泛得多。如果您想添加iPhone上常见的任何标准菜单或窗口交换工具,您需要Titanium库中的特性。有用于创建窗口、菜单和所有常见小部件的工具。这些例程的行为也应该像iPhone小部件一样。当您打开一个新窗口时,旧窗口会滚动到左边,返回按钮就会出现。它非常专业,在我查看示例应用程序时只花了几秒钟——这与我以前开发HTML、CSS和JavaScript同等级别的改进所花费的时间相比简直是荒谬的。(对于Titanium,您将严重依赖示例应用程序。文档有点简单,没有包含太多参数的描述。)

Titanium可以用JavaScript将原生iPhone组件串在一起。

HTML和CSS在这里的作用有所减弱。虽然您当然可以用HTML标记页面并对页面使用所有AJAX技巧,但最简单的解决方案是避免这样做。Appcelerator中的许多示例都以HTML文件开头,这些文件只包含启动执行实际工作的JavaScript的几行代码。如果您编写CSS,它将影响您添加的HTML,但不会影响Titanium创建的控件。他们将遵循苹果的用户界面指导原则。如果您的项目中的CSS文件是完全空的,而HTML只有几行调用JavaScript,我不会感到惊讶。

这种情况在不久的将来可能会改变,因为移动平台仍处于封闭的测试阶段。该公司正在频繁推出新功能;它在几天前刚刚发布的0.5版本中添加了许多新的小部件。最新版本包括对加速计、摄像头和地理位置数据的访问,所有这些都可以用JavaScript实现。

12 第1页
第1页共2页
工资调查:结果在