無論對手機應用程序開發員來說,還是對普通iPhone用戶來說,3月6日都是非常特殊的一天。因為今年的這一天,是iPhone軟件開發工具包(即Software Development Kit,以下簡稱SDK)問世的十周年紀念日。我個人認為,說它切實改變了許多人的生活也一點都不為過。不僅如此,它還給蘋果公司的業務發展帶來了很大影響。所以,今天我們就來回顧一下十年前iPhone SDK的開發過程。(為了方便各位讀者理解,本文將盡量不使用專業的科技術語。)
觸摸未來
對于我們當中的大多數人來說,2007年6月底能夠用上第一款iPhone,就相當于是觸摸到未來了。畢竟我們都很想知道在那塊玻璃屏幕后面和金屬機身里面,到底隱藏著什么樣神奇的功能。
雖然蘋果公司已經向我們介紹了這款新產品的各項功能,但卻沒有告訴我們它是如何研發出這些功能的。也就是說,對于它的處理器、運行速度、儲存空間、應用程序開發,我們是一無所知。唯一能夠確定的,就是這款新設備像一個黑銀色的盒子。
作為開發人員,我們很想知道這款設備到底有些什么功能,想知道軟件設計將會發生什么樣的改變。總之,我們很好奇,也很想學習那些尚未接觸過的新知識。隨即了解之后,我們便知道了,那叫越獄。
越獄
沒過多久,我們就有了新發現。全新的文件系統,在短短幾個星期的時間內就問世了。又過了幾個月,我們解鎖了全部的本地應用程序設計和使用體驗,形成了完整的開發工具鏈,大家也都紛紛開始為本地應用程序編寫安裝程序。
當然,所有這些成果之所以能夠順利取得,還是要感謝iPhone的研發工具。蘋果依靠的是與Mac操作系統一樣的基礎設施,他們選擇了一個類似的環境來不斷推進開發流程,不斷嘗試新的方法。正是這種相似性,使得我們這些“外人”能夠在最短時間內大致掌握蘋果內部的產品和程序研發流程。
舉個例子,iPhone中的大多數軟件,都是利用Objective-C語言開發出來的。而Mac開發人員一直使用的是一款名為class-dump的逆向工程工具,主要用來展示一款應用程序的不同組成部分,并且了解這些不同部分都是如何相互聯系、相互溝通的。在體驗過首款iPhone中的應用程序和基本框架之后,這款軟件就帶我們走進了蘋果內部編寫代碼語言的世界。
其中,最為重要的一個組成部分就是UIKit。它包含了所有的用戶界面部件,比如說按鈕和表視圖等等。由于它們與我們在Mac上使用的部件較為類似,因而開發一些點擊和滾動項目也就不怎么費事。
另外,還有一個較為重要的組成部分,那就是操作系統Unix。蘋果選擇這一操作系統就意味著我們很快就能夠在iPhone上使用大量開源軟件。我們可以用這些開源軟件來開發屬于自己的應用程序,接著將它們放到其他手機上去。而且,或許還可以查看程序中最新崩潰列表的內容。
我還清楚地記得第一次使用當前操作系統名稱查看系統信息時的情形。
早期應用程序開發
其實,除了我還有很多其他開發人員也認為,蘋果公司新產品背后的開發流程,與它顛覆性的外觀設計一樣神奇。所以,當時出現針對iPhone的應用程序開發熱潮,也并不是一件稀奇事。
對于新興技術開發人員來說,最為重要的事件,無疑就是獨立開發者大會C4。當時,那場大會的舉辦時間是2007年8月。不少參會者都拿著新款iPhone,認真探索它的各種功能。而我們當中的大多數人,都是有過Mac開發經驗的研究員。但即便如此,我們還是認為參加蘋果的全球開發者大會,聽公司介紹新產品的研發和功能,是一件非常“幸福”的事。
此外,公司還針對iPhone應用程序編程接口舉辦了一場編碼比賽。用大會組織者Jonathan Rentzsch的話說,他希望我們能夠充分發揮自己的想象力和創造力,拿出新穎的想法和令人信服的產品。所幸,我們做到了。
我自己是開發了一款在JavaScript中應用圖形計算器的網頁應用程序,當時主要也是為了表達自己對于蘋果幾個月前所拿方案不太滿意。因為在當時那個方案中,用戶界面比較過時、比較難用,而且運行速度非常緩慢,并沒有達到我們當中大多數人所期望的那種效果。
另外,那些本地應用程序也是讓我們大吃一驚。當時比賽的冠軍得主,是開發了一款視頻會議應用程序的Glen Aspeslagh和Ken Aspeslagh二人。他們早蘋果三年就研發出了帶有前置攝像頭的硬件設備,還自行編寫了一些類似FaceTime的程序代碼。要知道,首款iPhone問世時是沒有攝影機的,所以他們的研發成果著實讓人佩服。
對于我個人而言,在比賽中拿到第二名的作品,才更好地代表了未來的發展方向。首先,那是一款游戲;其次,在移動設備上的運行效果非常好。而且,更為重要的是,它告訴我們,優秀的設計和編程確實能夠將現實生活中的具體事物融入電子設備當中,在觸摸屏上實現流暢操作,并且在較大程度上優化整體使用效果。
在C4大會召開的前幾天,Lucas Newman和Adam Betts二人開發出了一款名為Lights Off的應用程序。在那之后,Lucas就開始幫我開發越獄工具。到后期階段,他還給了我源代碼,讓我能夠評估這些工具的使用效果。所幸的是,我還算比較擅長備份和維護軟件。說不定讀者現在手中使用的新款iPhone X,仍然用的是我們十年前就非常喜歡的代碼。
如果你是一位使用Xcode的開發員,那是可以在GitHub上看到這一項目的。而且,Lucas當時發給我的所有內容和資料,也全都保存在了該項目的“越獄”文件夾中。Xcode項目適用于那套代碼,所以可以直接進行開發和運行。除非必要,否則我們不會進行任何改變。與原來的項目相比,Xcode運行起來要更加容易一些。不過,對分辨率的要求,就不要太高了。
在所有代碼中,你將會看到所謂的根視圖控制器。要記住,當時我們都在學習如何從零做起自主編寫應用程序。所以,對于故事板和資產目錄這類現在看來理所當然的工具,當時是完全缺乏的。
當然,如果你不用Xcode的話,那還有其他選擇。iPhone鐵粉Steve Troughton-Smith有一款加強版,在蘋果應用商店中有售。我到現在還非常喜歡這款游戲,也經常玩,它對iMore的Hall of Fame的入門介紹還是非常好的。說到這里,工具有了,開發志向也有了,接下來應該做什么呢?
Iconfactory的首批應用程序
2007年6月,我們剛剛針對Twitter發布了Mac應用程序的2.1版本。按理說,有了它之后,將Cocoa代碼從一個平臺移到另一平臺,就會變得容易許多,但其實不然。
然而,在那一過程中,我還是學到了不少知識,享受到了編碼和開發的樂趣。iPhone的問世吸引了各種各樣的程序員,其中就包括我們的軟件工程師Sean Heber。2007年,Sean主要負責的是網頁開發,對于Objective-C語言或Mac編程,可以說是一無所知。但這些都沒有妨礙他了解和學習,最后成功寫出了自己的第一款應用程序。
后來到了同年11月,受到妻子的影響,他又立志每天都寫出一款應用程序,并且為之取名為iApp-a-Day,當時在越獄社區中引起了不少關注。正是這股熱情和堅持,讓他拿到了在Tapulous工作的機會,從而能夠與那些負責Tap Tap Revenge游戲開發的優秀人才一同工作。
在一個月中,Sean通過自己的探索發現,只有你想不到的,沒有iPhone做不到的。當然,它可以用來玩游戲,但同時也可以用來追蹤記錄自己的賬單,就連演奏一曲或者幫你掛畫也完全沒問題。
至于當時的開發記錄和成果,我和Sean到現在都還保存著。雖然到最后編寫出來的代碼比較糟糕,但對于我們來說,探索的過程遠比簡單的代碼要有意義得多。看著那些記錄,能夠讓我們回想起當初那段渴望學習新知識、努力探索新未來的美好青春時光。
其實,UIKit的早期版本中,還是有很多驚喜之處的。不過,想要找出XML語法分析程序,需要耗費大量時間。甚至可能永遠無法找到,因為它被埋在了OfficeImport基礎框架下面。另外,還一些很重要的東西也遺失了。比如說,我們可能無法找到可行的方式來用Objective-C語言恢復浮點數。
而且,過程中還出現了一些讓人想不通的工程決策。舉個例子,原本你可以隨意將HTML放進文本視圖中,即便是只用這類簡單標簽也完全沒問題。但沒想到,卻用了一些更加復雜的標簽。視圖拼合的時候,則使用的是LKLayer。雖然它與Mac OS Leopard全新Core Animation有些類似,但并非一模一樣。在表格方面,也是引入了一個全新的“cell reuse”概念。雖然可以實現快速滾動,但卻比較復雜、難以操作。最后,如果視圖控制器能夠選擇針對AppKit發布的那些,那產生的效果應該會更為驚艷。
雖然所有這些都沒有阻止我們不斷嘗試和不斷學習的腳步,但沒過多久我們還是停下來了。
真正的SDK
首款iPhone問世后,我們當中一些編寫越獄應用程序發現,這款產品存在一些不足之處,但當時大家都沒有在意。
對于新產品,大家都非常興奮。但很快,興奮勁兒過去之后,不禁開始思考接下來應該做些什么呢?或許是受越獄愛好者的影響,又或許是蘋果自己原本的計劃,總之當喬布斯在iPhone問世5個月之后正式對外宣布SDK的時候,我們全都高興壞了。
按照計劃,iPhone SDK應該是要在2008年2月問世的。但考慮到任務量比較大,所以當蘋果宣布推遲幾天的時候,大家也都沒有表示失望。當時,發布會是在市政廳和另一場活動一同舉辦的。
十年前的3月6日,我們第一次知道什么叫做模擬器,第一次知道Xcode中還有其他一些變化,第一次接觸到Core Location和OpenGL這些新鮮有趣的框架,以及前所未見、聞所未聞的應用商店,能夠直接把我們開發出來的產品送到消費者手中。Jason Snell還轉錄了當時的Macworld活動,到現在也還保存有視頻資料。
成為真正的應用程序開發王者
興奮過后,我們開始考慮一些比較實際的問題。雖然并不清楚還剩多少時間,但總歸還是要加快速度的。
最后,我們花了大概四個月的時間把應用程序完全準備好。好在還有當時在Iconfactory的越獄工作經驗,所以我們在弄清楚設計和開發問題之后,就有了一個順利的開頭。不過,當時開發Twitter的應用程序還是花了不少時間的。
就在蘋果應用商店正式上線之前,公司還在一年一度的設計大賽儀式上增加了一些全新的應用程序種類。而我們很榮幸拿到了大獎,從而成為了應用商店中的第一批應用程序,并且排名還算比較靠前。
當時,Iconfactory首款移動應用程序進駐應用商店的時候,應用程序總數也就不過幾百個。而現在,都已經超過200萬了。我們不僅開發面向消費者的移動應用程序,也開發面向設計師和開發員的工具。
十年可以發生很多事情,但有一點沒有改變,那就是我們整個團隊都很自豪能夠成為整個系統中的一個組成部門,并且為之做出自己的貢獻。相信接下來的十年,我們還會取得更好的成績。