无论对手机应用程序开发员来说,还是对普通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万了。我们不仅开发面向消费者的移动应用程序,也开发面向设计师和开发员的工具。
十年可以发生很多事情,但有一点没有改变,那就是我们整个团队都很自豪能够成为整个系统中的一个组成部门,并且为之做出自己的贡献。相信接下来的十年,我们还会取得更好的成绩。