本文是《PastryKit》一文的延续,说的是苹果的网页框架,借助它可以开发非常接近原生 iPhone 程序的网页程序。这篇文章让我想起 2 年前本站作者黄继新写的《iPhone 的互联网野心》,当时 SDK 还未发布,使用网页程序开发 iPhone 应用成为了一种流行的说法。
恕我孤陋寡闻,在 Palm Pre 发布时,我曾觉得 WebOS 独到,原来苹果早已有类似的准备。
苹果公司的各种 JavaScript 框架
乔纳森·「豺狼」·雷恩兹(Jonathan “Wolf” Rentzsch,「豺狼」是他的外号)写了一篇非常棒的概述,介绍了苹果公司内不同团队使用的 JavaScript 框架。有些是公开的,有些则不为人知,例如 PastryKit。它们之间有所重叠。特别是其中的一些框架对 Cocoa 的模仿惟妙惟肖,不仅在 MVC,也深及内里,例如类的名称。(我没有听说过「Gianduia」,但它似乎被藏得很深。苹果的在线零售团队把它用于「天才吧预约系统」之类的事务上。)
但 PastryKit 是唯一针对构建原生风格 iPhone 用户界面的框架。其他框架中类似 PastryKit 的是 TuneKit,这款目前公开的框架用于制作 iTunes LP 和 iTunes Extras 内容包。PastryKit 和 TuneKit 有 40% 的代码相同。(如果不计类名称的前缀:「PK」和「TK」的不同)本站读者格雷格·萨蒂特思盖(Greg Sadetsky)通过电子邮件传来了下面的对比,他通过美化器将代码去最小化。首先是 PastryKit:
const PKTransitionDefaults = {
duration: 0.5, delay: 0,
removesTargetUponCompletion: false,
revertsToOriginalValues: false
};
const PKTransitionStyles = [
"-webkit-transition-property",
"-webkit-transition-duration",
"-webkit-transition-timing-function",
"-webkit-transition-delay",
"-webkit-transition"
];
然后是相似但前缀不同的代码,来自 TunesKit:
const TKTransitionDefaults = {
duration: 0.5, delay: 0,
removesTargetUponCompletion: false,
revertsToOriginalValues: false
};
const TKTransitionStyles = [
"-webkit-transition-property",
"-webkit-transition-duration",
"-webkit-transition-timing-function",
"-webkit-transition-delay",
"-webkit-transition"
];
诸如此类。PastryKit 和 TuneKit 若不是兄弟项目,就是出自同一个人的作品。(另外,丹尼尔·狄杰(Daniel Dilger)九月份在《Wall-E》的 iTunes Extras 包中发现了「PastryKit」的字眼。
iDisk 帮助
一些读者来信指出,iDisk 软件的帮助页面也采用了 PastryKit。如果你通过软件商店安装了 iDisk 程序,可以通过点击「Setting」→「iDisk Help」查看。这个界面看起来同程序的其他部分相似,但一些明显的迹象表明这是一个运行在全屏幕网页模式下的 PastryKit 框架。(例如点击状态栏不会滚动到顶部)
PasrtyKit 是 SDK 还未发布以前的遗迹吗?
我所看到的一个常见问题是(例如,在黑客新闻的这个主题中):PastryKit 是否是「网页程序是创建 iPhone 软件的绝佳解决方案」时代的遗迹?
首先,iPhone 一直有一个用户指引。而我记得,虽然这份指引的操作体验基本上类似原生程序,但是在 iPhone OS 3 上的版本要好得多。事实上,如果你将 Safari 中的浏览器版本(User Agent)设置为 MobileSafari 2(而不是 3),接着载入这份用户指引,就能体验到在 iPhone OS 2.0 上的效果,感觉要差得多。没有滚动魔法、在选中内容后不会出现 iPhone 特有的蓝色渐变,等等。此外,PastryKit 还利用了 mobile WebKit 在 iPhone OS 3.0 中才增加的功能。PastryKit是新的。
苹果意在使网页程序同软件商店竞争
最后,有一个问题,苹果在战略上是否会担忧网页程序 API 和相关市场的完善会影响到 软件商店。如果是的话,他们是否担心钱的问题?我想大概不会。我认为不应过于关注苹果从 30% 分成中得到的收益,并且它还在快速增长。但毫无疑问,软件商店的存在是为了销售更多的 iPhone 和 iPod touch,而不是相反。
更大的忧虑可能会是:网页程序是跨平台的。苹果目前使用用户代理检测技术防止在 MobileSafari 之外的浏览器上运行 PastryKit 用户指引程序。但我不认为在技术上有任何的理由使这些程序不能在 Android 或 WebOS 上同样运作良好并看起来相似。字体也许会略有差别,因为这两个平台都没有包含 Helvetica,但其他看上去就和 iPhone 程序差不多。
尖端网页技术的发展从来不会在不同的浏览器出现「仅能工作」的情况,而且 iPhone、Android、WebOS 都是基于相同的 WebKit 渲染核心。而即使需要对每个平台进行微调,工作量肯定远远少于使用 Cocoa Touch、Android 和 Mojo API 开发各自的原生软件。
我希望苹果不去关注这个问题。首先,桌面级网页程序并未影响到麦金塔的需求。如果有的话,随着 Web 取代 Windows 成为最广泛的软件平台,麦金塔已经获得蓬勃发展。我认为,苹果应该好好鼓励跨平台移动网络程序的发展,而这样做不会减少原生 Cocoa Touch 的吸引力,因为网页框架无法开发高性能(特别是游戏)或访问硬件(例如摄像头)的程序。我也认为这对 iPhone 用户和苹果自身都有益处,在严格控制的软件商店[1]之外另设一个无验证要求的网页程序。虽然是人的本性强调了冲突和刺激,但为什么原生 iPhone 程序和 iPhone 网页程序不