为 iPhone 开发应用程序 (Part 1)
Apple 确实为 iPhone 应用的开发定了条与众不同的道路--如 Jobs 大嘴巴所说--iPhone 上八成不再有什么第三方 native code 了,唯有 web app 才是 iPhone 第三方应用的正道--不过我猜如果哪个 ISV 面子够硬的话还是能有 SDK 来写 native 应用的
Apple 的开发者网站 Developer Connection 上已经推出了 iPhone 部分。只有一个内容,就是 Web Development for iPhone。按照 Apple 的设想和许诺,开发者能够写出和 iPhone 内置应用在外观和功能上差不多的第三方程序–这是暗示内置程序亦是 web app 呢还是只是夸耀 apple 提供给第三方的开发能力使外人也能写出和内置的 native 程序同样等级的软件?这些第三方程序能与 iPhone 内置应用和服务无缝集成--包括拨打电话,发送 email 和在 Google Maps 上显示位置。
我想这种安排相比暴露一堆 API 的好处是:
- 引导了开发者把重心放到设计有创意的产品上,开发真正创新的有竞争力的应用,而不是继续鸡毛蒜皮的小修补,才是 iPhone 最需要的–大家可对 Windows Mobile 上 500 个第三方日历程序心有余悸?谁让 Microsoft 恨不得把自家牙缝里的东西都写进 MSDN 呢。对易用性大师 Apple 来说,暴露 API 似乎没有太多现实意义–出自这帮这帮家伙之手的 iPhone 内置应用基本没什么余地/缺陷留给第三方开发者填充或者弥补了,所以,你们不需要 OS 或者某种传统 framework 的 API 来再次开发,再所以,你们还是打起精神,为编写真正配得上 iPhone 的 cool app 整装待发吧。
- 再者,web app 开发好歹也算在标准接口上工作,绝大多数相关技术都是开放的,开发 iPhone 需要的参考资料–xml,html,javascript,rfc 里的协议等等等等–差不多全是 ISO,IEEE 等的标准。design house 为一百个手机写他妈的一百个的 phonebook 的黑暗日子总算有个头了– 哦,又忘了,iPhone 根本没打算让你为他重写 phonebook。
ADC 的 iPhone 开发准备内容只有两节:WebKit (或者 Safari,随便你) 和 Development Guidelines。WebKit 的内容不依 iPhone 的开发早就有了,不表。和其他手持系统上的开发不同,iPhone 上没有什么鸟 SDK 和 host 上的模拟器,如果说有的话,那 SDK 就是所有 web 开发相关标准–因为这是和 iPhone 打交道的接口,而模拟器就是 host 上的 Safari 啦,要不 Jobs 费劲地移植个 Safari Windows 版干嘛。
Guideline 是一对一和 iPhone 挂钩的东西,需要编写应用时阅读参考。不过先打个招呼,基于你的视角和观点,你会觉得 iPhone 上开发应用程序“居然沦落到”或者“终于进化到”这样的地步:If you are a seasoned web developer, there are probably just a few refinements you can make to ensure that your site looks great and works best on iPhone。
早先说了,在 Apple 的选择下,没有必要有类似 API 列表的 reference manual 了,因为 html,css 和 javascript 等内容本来就是开放的,所以只需说明应用与 iPhone 时的注意事项。
按 Apple 的表述,iPhone 的 Safari 和桌面系统 Safari 使用一样的 WebKit--这话其实言之不详,似是而非,虽然我们宁愿已是精确表述。换做老式应用开发,我们只需要知道系统底层机制的描述,再有文档可以查阅 API 变化(比如有无增减,参数类型含义有无变更)即可,而所谓使用同一 WebKit 并不明确,因为 WebKit 至少包含 WebCore 和 JavaScriptCore 两部分,细节颇多,随便挑个 DOM 对象比比,都有可能不同。
对开发者甚至一般 iPhone 用户来说,最重要的是,如 guideline 里一句话所说,It’s tempting to think that using an iPhone is like using a computer. But it isn’t. 体现在用户交互上,表现很明显。
通常的网页–其实是我们的电脑了–当然只考虑到最常用的交互设备是鼠标键盘等,iPhone 的输入设备–手指–在精确度,可识别性乃至可产生的 event 上不同于鼠标。guideline 上为此专门提供了 “Know Which Events You Can Handle” 和 “Design for Double Tap.”两节内容。不过当然记住,在 iPhone 那光滑性感的表面上游走的两根手指可没法实现什么复制粘贴,拖放和选中;另外,手指是有宽度的,设计过于密集的交互对象(比如网页上的超链接)会让人吐血的。
既然是些 Web app,那相关标准就要随时能涌上心头了,iPhone 伟大的 WebKit 引擎支持的标准“应该”和桌面 Safari 一样,包括:
* HTML 4.01
* XHTML 1.0
* CSS 2.1,部分 CSS 3.xx
* JavaScript 1.4, 包括 DOM 支持
* AJAX 技术, 包括 XMLHTTPRequest
又因为 Apple 让 iPhone 上的 WebKit 和桌面一样,所以 iPhone 会另类地不支持 WML (Wireless Markup Language),不过支持 XHTML mobile profile。开发适合 iPhone 浏览的页面和开发适用于通常浏览器的页面有很多详细之处,如果感兴趣,ADC 里也列出了相关参考资料。
下面,终于是有点入题的内容了–怎么实用 iPhone 上的服务。
电话:
1-408-555-5555
吐血,也可以理解,一切都是协议。这下好了,你连炫耀一下知道 MO call,MT call 的机会都没了。
Safari 也可以自动把一串数字解释成电话号码。
至于 mail 和 google map,和通常网页也无区别啦:mailto: 协议以及通常的 google map url 就行了。
在编写为 iPhone 优化的页面是,再一个参考是 Safari 发送的 agent 字符串:
Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3
和桌面平台的 Safari 很像,但是多了
platform 描述:(iPhone; U; CPU like Mac OS X; en)
mobile 版本:Version/3.0 Mobile/1A543a Safari/419.3
在使用 CSS 时,要考虑到 iPhone 只支持 screen –你没看错哈–而不支持 print 和 handheld media query–这些都是 CSS3 的特性。所以,编写 iPhone 优化的页面时,可以这样引用 css 文件:
使用 only 关键字。这样也不会影响其他浏览器。>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>