無論對手機應(yīng)用程序開發(fā)員來說,還是對普通iPhone用戶來說,3月6日都是非常特殊的一天。因為今年的這一天,是iPhone軟件開發(fā)工具包(即Software Development Kit,以下簡稱SDK)問世的十周年紀(jì)念日。我個人認為,說它切實改變了許多人的生活也一點都不為過。不僅如此,它還給蘋果公司的業(yè)務(wù)發(fā)展帶來了很大影響。所以,今天我們就來回顧一下十年前iPhone SDK的開發(fā)過程。(為了方便各位讀者理解,本文將盡量不使用專業(yè)的科技術(shù)語。)
觸摸未來
對于我們當(dāng)中的大多數(shù)人來說,2007年6月底能夠用上第一款iPhone,就相當(dāng)于是觸摸到未來了。畢竟我們都很想知道在那塊玻璃屏幕后面和金屬機身里面,到底隱藏著什么樣神奇的功能。
雖然蘋果公司已經(jīng)向我們介紹了這款新產(chǎn)品的各項功能,但卻沒有告訴我們它是如何研發(fā)出這些功能的。也就是說,對于它的處理器、運行速度、儲存空間、應(yīng)用程序開發(fā),我們是一無所知。唯一能夠確定的,就是這款新設(shè)備像一個黑銀色的盒子。

作為開發(fā)人員,我們很想知道這款設(shè)備到底有些什么功能,想知道軟件設(shè)計將會發(fā)生什么樣的改變。總之,我們很好奇,也很想學(xué)習(xí)那些尚未接觸過的新知識。隨即了解之后,我們便知道了,那叫越獄。
越獄
沒過多久,我們就有了新發(fā)現(xiàn)。全新的文件系統(tǒng),在短短幾個星期的時間內(nèi)就問世了。又過了幾個月,我們解鎖了全部的本地應(yīng)用程序設(shè)計和使用體驗,形成了完整的開發(fā)工具鏈,大家也都紛紛開始為本地應(yīng)用程序編寫安裝程序。

當(dāng)然,所有這些成果之所以能夠順利取得,還是要感謝iPhone的研發(fā)工具。蘋果依靠的是與Mac操作系統(tǒng)一樣的基礎(chǔ)設(shè)施,他們選擇了一個類似的環(huán)境來不斷推進開發(fā)流程,不斷嘗試新的方法。正是這種相似性,使得我們這些“外人”能夠在最短時間內(nèi)大致掌握蘋果內(nèi)部的產(chǎn)品和程序研發(fā)流程。
舉個例子,iPhone中的大多數(shù)軟件,都是利用Objective-C語言開發(fā)出來的。而Mac開發(fā)人員一直使用的是一款名為class-dump的逆向工程工具,主要用來展示一款應(yīng)用程序的不同組成部分,并且了解這些不同部分都是如何相互聯(lián)系、相互溝通的。在體驗過首款iPhone中的應(yīng)用程序和基本框架之后,這款軟件就帶我們走進了蘋果內(nèi)部編寫代碼語言的世界。
其中,最為重要的一個組成部分就是UIKit。它包含了所有的用戶界面部件,比如說按鈕和表視圖等等。由于它們與我們在Mac上使用的部件較為類似,因而開發(fā)一些點擊和滾動項目也就不怎么費事。
另外,還有一個較為重要的組成部分,那就是操作系統(tǒng)Unix。蘋果選擇這一操作系統(tǒng)就意味著我們很快就能夠在iPhone上使用大量開源軟件。我們可以用這些開源軟件來開發(fā)屬于自己的應(yīng)用程序,接著將它們放到其他手機上去。而且,或許還可以查看程序中最新崩潰列表的內(nèi)容。
我還清楚地記得第一次使用當(dāng)前操作系統(tǒng)名稱查看系統(tǒng)信息時的情形。
早期應(yīng)用程序開發(fā)
其實,除了我還有很多其他開發(fā)人員也認為,蘋果公司新產(chǎn)品背后的開發(fā)流程,與它顛覆性的外觀設(shè)計一樣神奇。所以,當(dāng)時出現(xiàn)針對iPhone的應(yīng)用程序開發(fā)熱潮,也并不是一件稀奇事。
對于新興技術(shù)開發(fā)人員來說,最為重要的事件,無疑就是獨立開發(fā)者大會C4。當(dāng)時,那場大會的舉辦時間是2007年8月。不少參會者都拿著新款iPhone,認真探索它的各種功能。而我們當(dāng)中的大多數(shù)人,都是有過Mac開發(fā)經(jīng)驗的研究員。但即便如此,我們還是認為參加蘋果的全球開發(fā)者大會,聽公司介紹新產(chǎn)品的研發(fā)和功能,是一件非常“幸福”的事。
此外,公司還針對iPhone應(yīng)用程序編程接口舉辦了一場編碼比賽。用大會組織者Jonathan Rentzsch的話說,他希望我們能夠充分發(fā)揮自己的想象力和創(chuàng)造力,拿出新穎的想法和令人信服的產(chǎn)品。所幸,我們做到了。
我自己是開發(fā)了一款在JavaScript中應(yīng)用圖形計算器的網(wǎng)頁應(yīng)用程序,當(dāng)時主要也是為了表達自己對于蘋果幾個月前所拿方案不太滿意。因為在當(dāng)時那個方案中,用戶界面比較過時、比較難用,而且運行速度非常緩慢,并沒有達到我們當(dāng)中大多數(shù)人所期望的那種效果。
另外,那些本地應(yīng)用程序也是讓我們大吃一驚。當(dāng)時比賽的冠軍得主,是開發(fā)了一款視頻會議應(yīng)用程序的Glen Aspeslagh和Ken Aspeslagh二人。他們早蘋果三年就研發(fā)出了帶有前置攝像頭的硬件設(shè)備,還自行編寫了一些類似FaceTime的程序代碼。要知道,首款iPhone問世時是沒有攝影機的,所以他們的研發(fā)成果著實讓人佩服。
對于我個人而言,在比賽中拿到第二名的作品,才更好地代表了未來的發(fā)展方向。首先,那是一款游戲;其次,在移動設(shè)備上的運行效果非常好。而且,更為重要的是,它告訴我們,優(yōu)秀的設(shè)計和編程確實能夠?qū)F(xiàn)實生活中的具體事物融入電子設(shè)備當(dāng)中,在觸摸屏上實現(xiàn)流暢操作,并且在較大程度上優(yōu)化整體使用效果。
在C4大會召開的前幾天,Lucas Newman和Adam Betts二人開發(fā)出了一款名為Lights Off的應(yīng)用程序。在那之后,Lucas就開始幫我開發(fā)越獄工具。到后期階段,他還給了我源代碼,讓我能夠評估這些工具的使用效果。所幸的是,我還算比較擅長備份和維護軟件。說不定讀者現(xiàn)在手中使用的新款iPhone X,仍然用的是我們十年前就非常喜歡的代碼。

如果你是一位使用Xcode的開發(fā)員,那是可以在GitHub上看到這一項目的。而且,Lucas當(dāng)時發(fā)給我的所有內(nèi)容和資料,也全都保存在了該項目的“越獄”文件夾中。Xcode項目適用于那套代碼,所以可以直接進行開發(fā)和運行。除非必要,否則我們不會進行任何改變。與原來的項目相比,Xcode運行起來要更加容易一些。不過,對分辨率的要求,就不要太高了。
在所有代碼中,你將會看到所謂的根視圖控制器。要記住,當(dāng)時我們都在學(xué)習(xí)如何從零做起自主編寫應(yīng)用程序。所以,對于故事板和資產(chǎn)目錄這類現(xiàn)在看來理所當(dāng)然的工具,當(dāng)時是完全缺乏的。
當(dāng)然,如果你不用Xcode的話,那還有其他選擇。iPhone鐵粉Steve Troughton-Smith有一款加強版,在蘋果應(yīng)用商店中有售。我到現(xiàn)在還非常喜歡這款游戲,也經(jīng)常玩,它對iMore的Hall of Fame的入門介紹還是非常好的。說到這里,工具有了,開發(fā)志向也有了,接下來應(yīng)該做什么呢?
Iconfactory的首批應(yīng)用程序
2007年6月,我們剛剛針對Twitter發(fā)布了Mac應(yīng)用程序的2.1版本。按理說,有了它之后,將Cocoa代碼從一個平臺移到另一平臺,就會變得容易許多,但其實不然。
然而,在那一過程中,我還是學(xué)到了不少知識,享受到了編碼和開發(fā)的樂趣。iPhone的問世吸引了各種各樣的程序員,其中就包括我們的軟件工程師Sean Heber。2007年,Sean主要負責(zé)的是網(wǎng)頁開發(fā),對于Objective-C語言或Mac編程,可以說是一無所知。但這些都沒有妨礙他了解和學(xué)習(xí),最后成功寫出了自己的第一款應(yīng)用程序。
后來到了同年11月,受到妻子的影響,他又立志每天都寫出一款應(yīng)用程序,并且為之取名為iApp-a-Day,當(dāng)時在越獄社區(qū)中引起了不少關(guān)注。正是這股熱情和堅持,讓他拿到了在Tapulous工作的機會,從而能夠與那些負責(zé)Tap Tap Revenge游戲開發(fā)的優(yōu)秀人才一同工作。
在一個月中,Sean通過自己的探索發(fā)現(xiàn),只有你想不到的,沒有iPhone做不到的。當(dāng)然,它可以用來玩游戲,但同時也可以用來追蹤記錄自己的賬單,就連演奏一曲或者幫你掛畫也完全沒問題。

至于當(dāng)時的開發(fā)記錄和成果,我和Sean到現(xiàn)在都還保存著。雖然到最后編寫出來的代碼比較糟糕,但對于我們來說,探索的過程遠比簡單的代碼要有意義得多。看著那些記錄,能夠讓我們回想起當(dāng)初那段渴望學(xué)習(xí)新知識、努力探索新未來的美好青春時光。
其實,UIKit的早期版本中,還是有很多驚喜之處的。不過,想要找出XML語法分析程序,需要耗費大量時間。甚至可能永遠無法找到,因為它被埋在了OfficeImport基礎(chǔ)框架下面。另外,還一些很重要的東西也遺失了。比如說,我們可能無法找到可行的方式來用Objective-C語言恢復(fù)浮點數(shù)。
而且,過程中還出現(xiàn)了一些讓人想不通的工程決策。舉個例子,原本你可以隨意將HTML放進文本視圖中,即便是只用這類簡單標(biāo)簽也完全沒問題。但沒想到,卻用了一些更加復(fù)雜的標(biāo)簽。視圖拼合的時候,則使用的是LKLayer。雖然它與Mac OS Leopard全新Core Animation有些類似,但并非一模一樣。在表格方面,也是引入了一個全新的“cell reuse”概念。雖然可以實現(xiàn)快速滾動,但卻比較復(fù)雜、難以操作。最后,如果視圖控制器能夠選擇針對AppKit發(fā)布的那些,那產(chǎn)生的效果應(yīng)該會更為驚艷。
雖然所有這些都沒有阻止我們不斷嘗試和不斷學(xué)習(xí)的腳步,但沒過多久我們還是停下來了。
真正的SDK
首款iPhone問世后,我們當(dāng)中一些編寫越獄應(yīng)用程序發(fā)現(xiàn),這款產(chǎn)品存在一些不足之處,但當(dāng)時大家都沒有在意。
對于新產(chǎn)品,大家都非常興奮。但很快,興奮勁兒過去之后,不禁開始思考接下來應(yīng)該做些什么呢?或許是受越獄愛好者的影響,又或許是蘋果自己原本的計劃,總之當(dāng)喬布斯在iPhone問世5個月之后正式對外宣布SDK的時候,我們?nèi)几吲d壞了。
按照計劃,iPhone SDK應(yīng)該是要在2008年2月問世的。但考慮到任務(wù)量比較大,所以當(dāng)蘋果宣布推遲幾天的時候,大家也都沒有表示失望。當(dāng)時,發(fā)布會是在市政廳和另一場活動一同舉辦的。
十年前的3月6日,我們第一次知道什么叫做模擬器,第一次知道Xcode中還有其他一些變化,第一次接觸到Core Location和OpenGL這些新鮮有趣的框架,以及前所未見、聞所未聞的應(yīng)用商店,能夠直接把我們開發(fā)出來的產(chǎn)品送到消費者手中。Jason Snell還轉(zhuǎn)錄了當(dāng)時的Macworld活動,到現(xiàn)在也還保存有視頻資料。
成為真正的應(yīng)用程序開發(fā)王者
興奮過后,我們開始考慮一些比較實際的問題。雖然并不清楚還剩多少時間,但總歸還是要加快速度的。

最后,我們花了大概四個月的時間把應(yīng)用程序完全準(zhǔn)備好。好在還有當(dāng)時在Iconfactory的越獄工作經(jīng)驗,所以我們在弄清楚設(shè)計和開發(fā)問題之后,就有了一個順利的開頭。不過,當(dāng)時開發(fā)Twitter的應(yīng)用程序還是花了不少時間的。
就在蘋果應(yīng)用商店正式上線之前,公司還在一年一度的設(shè)計大賽儀式上增加了一些全新的應(yīng)用程序種類。而我們很榮幸拿到了大獎,從而成為了應(yīng)用商店中的第一批應(yīng)用程序,并且排名還算比較靠前。
當(dāng)時,Iconfactory首款移動應(yīng)用程序進駐應(yīng)用商店的時候,應(yīng)用程序總數(shù)也就不過幾百個。而現(xiàn)在,都已經(jīng)超過200萬了。我們不僅開發(fā)面向消費者的移動應(yīng)用程序,也開發(fā)面向設(shè)計師和開發(fā)員的工具。
十年可以發(fā)生很多事情,但有一點沒有改變,那就是我們整個團隊都很自豪能夠成為整個系統(tǒng)中的一個組成部門,并且為之做出自己的貢獻。相信接下來的十年,我們還會取得更好的成績。



