Apple 確實(shí)為 iPhone 應用的開(kāi)發(fā)定了條與眾不同的道路--如 Jobs 大嘴巴所說(shuō)--iPhone 上八成不再有什么第三方 native code 了,唯有 web app 才是 iPhone 第三方應用的正道--不過(guò)我猜如果哪個(gè) ISV 面子夠硬的話(huà)還是能有 SDK 來(lái)寫(xiě) native 應用的

Apple 的開(kāi)發(fā)者網(wǎng)站 Developer Connection 上已經(jīng)推出了 iPhone 部分。只有一個(gè)內容,就是 Web Development for iPhone。按照 Apple 的設想和許諾,開(kāi)發(fā)者能夠寫(xiě)出和 iPhone 內置應用在外觀(guān)和功能上差不多的第三方程序–這是暗示內置程序亦是 web app 呢還是只是夸耀 apple 提供給第三方的開(kāi)發(fā)能力使外人也能寫(xiě)出和內置的 native 程序同樣等級的軟件?這些第三方程序能與 iPhone 內置應用和服務(wù)無(wú)縫集成--包括撥打電話(huà),發(fā)送 email 和在 Google Maps 上顯示位置。
我想這種安排相比暴露一堆 API 的好處是:
- 引導了開(kāi)發(fā)者把重心放到設計有創(chuàng )意的產(chǎn)品上,開(kāi)發(fā)真正創(chuàng )新的有競爭力的應用,而不是繼續雞毛蒜皮的小修補,才是 iPhone 最需要的–大家可對 Windows Mobile 上 500 個(gè)第三方日歷程序心有余悸?誰(shuí)讓 Microsoft 恨不得把自家牙縫里的東西都寫(xiě)進(jìn) MSDN 呢。對易用性大師 Apple 來(lái)說(shuō),暴露 API 似乎沒(méi)有太多現實(shí)意義–出自這幫這幫家伙之手的 iPhone 內置應用基本沒(méi)什么余地/缺陷留給第三方開(kāi)發(fā)者填充或者彌補了,所以,你們不需要 OS 或者某種傳統 framework 的 API 來(lái)再次開(kāi)發(fā),再所以,你們還是打起精神,為編寫(xiě)真正配得上 iPhone 的 cool app 整裝待發(fā)吧。
- 再者,web app 開(kāi)發(fā)好歹也算在標準接口上工作,絕大多數相關(guān)技術(shù)都是開(kāi)放的,開(kāi)發(fā) iPhone 需要的參考資料–xml,html,javascript,rfc 里的協(xié)議等等等等–差不多全是 ISO,IEEE 等的標準。design house 為一百個(gè)手機寫(xiě)他媽的一百個(gè)的 phonebook 的黑暗日子總算有個(gè)頭了– 哦,又忘了,iPhone 根本沒(méi)打算讓你為他重寫(xiě) phonebook。
ADC 的 iPhone 開(kāi)發(fā)準備內容只有兩節:WebKit (或者 Safari,隨便你) 和 Development Guidelines。WebKit 的內容不依 iPhone 的開(kāi)發(fā)早就有了,不表。和其他手持系統上的開(kāi)發(fā)不同,iPhone 上沒(méi)有什么鳥(niǎo) SDK 和 host 上的模擬器,如果說(shuō)有的話(huà),那 SDK 就是所有 web 開(kāi)發(fā)相關(guān)標準–因為這是和 iPhone 打交道的接口,而模擬器就是 host 上的 Safari 啦,要不 Jobs 費勁地移植個(gè) Safari Windows 版干嘛。
Guideline 是一對一和 iPhone 掛鉤的東西,需要編寫(xiě)應用時(shí)閱讀參考。不過(guò)先打個(gè)招呼,基于你的視角和觀(guān)點(diǎn),你會(huì )覺(jué)得 iPhone 上開(kāi)發(fā)應用程序“居然淪落到”或者“終于進(jìn)化到”這樣的地步: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。
早先說(shuō)了,在 Apple 的選擇下,沒(méi)有必要有類(lèi)似 API 列表的 reference manual 了,因為 html,css 和 javascript 等內容本來(lái)就是開(kāi)放的,所以只需說(shuō)明應用與 iPhone 時(shí)的注意事項。
按 Apple 的表述,iPhone 的 Safari 和桌面系統 Safari 使用一樣的 WebKit--這話(huà)其實(shí)言之不詳,似是而非,雖然我們寧愿已是精確表述。換做老式應用開(kāi)發(fā),我們只需要知道系統底層機制的描述,再有文檔可以查閱 API 變化(比如有無(wú)增減,參數類(lèi)型含義有無(wú)變更)即可,而所謂使用同一 WebKit 并不明確,因為 WebKit 至少包含 WebCore 和 JavaScriptCore 兩部分,細節頗多,隨便挑個(gè) DOM 對象比比,都有可能不同。
對開(kāi)發(fā)者甚至一般 iPhone 用戶(hù)來(lái)說(shuō),最重要的是,如 guideline 里一句話(huà)所說(shuō),It’s tempting to think that using an iPhone is like using a computer. But it isn’t. 體現在用戶(hù)交互上,表現很明顯。

通常的網(wǎng)頁(yè)–其實(shí)是我們的電腦了–當然只考慮到最常用的交互設備是鼠標鍵盤(pán)等,iPhone 的輸入設備–手指–在精確度,可識別性乃至可產(chǎn)生的 event 上不同于鼠標。guideline 上為此專(zhuān)門(mén)提供了 “Know Which Events You Can Handle” 和 “Design for Double Tap.”兩節內容。不過(guò)當然記住,在 iPhone 那光滑性感的表面上游走的兩根手指可沒(méi)法實(shí)現什么復制粘貼,拖放和選中;另外,手指是有寬度的,設計過(guò)于密集的交互對象(比如網(wǎng)頁(yè)上的超鏈接)會(huì )讓人吐血的。
既然是些 Web app,那相關(guān)標準就要隨時(shí)能涌上心頭了,iPhone 偉大的 WebKit 引擎支持的標準“應該”和桌面 Safari 一樣,包括:
* HTML 4.01
* XHTML 1.0
* CSS 2.1,部分 CSS 3.xx
* JavaScript 1.4, 包括 DOM 支持
* AJAX 技術(shù), 包括 XMLHTTPRequest
又因為 Apple 讓 iPhone 上的 WebKit 和桌面一樣,所以 iPhone 會(huì )另類(lèi)地不支持 WML (Wireless Markup Language),不過(guò)支持 XHTML mobile profile。開(kāi)發(fā)適合 iPhone 瀏覽的頁(yè)面和開(kāi)發(fā)適用于通常瀏覽器的頁(yè)面有很多詳細之處,如果感興趣,ADC 里也列出了相關(guān)參考資料。
下面,終于是有點(diǎn)入題的內容了–怎么實(shí)用 iPhone 上的服務(wù)。
電話(huà):
1-408-555-5555
吐血,也可以理解,一切都是協(xié)議。這下好了,你連炫耀一下知道 MO call,MT call 的機會(huì )都沒(méi)了。
Safari 也可以自動(dòng)把一串數字解釋成電話(huà)號碼。
至于 mail 和 google map,和通常網(wǎng)頁(yè)也無(wú)區別啦:mailto: 協(xié)議以及通常的 google map url 就行了。
在編寫(xiě)為 iPhone 優(yōu)化的頁(yè)面是,再一個(gè)參考是 Safari 發(fā)送的 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 時(shí),要考慮到 iPhone 只支持 screen –你沒(méi)看錯哈–而不支持 print 和 handheld media query–這些都是 CSS3 的特性。所以,編寫(xiě) iPhone 優(yōu)化的頁(yè)面時(shí),可以這樣引用 css 文件:
使用 only 關(guān)鍵字。這樣也不會(huì )影響其他瀏覽器。
