无论对手机应用程序开发员来说,还是对普通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 万了。我们不仅开发面向消费者的移动应用程序,也开发面向设计师和开发员的工具。

  十年可以发生很多事情,但有一点没有改变,那就是我们整个团队都很自豪能够成为整个系统中的一个组成部门,并且为之做出自己的贡献。相信接下来的十年,我们还会取得更好的成绩。

iPhone十年越狱史相关推荐

  1. iPhone十二年了,多希望这是苹果的一个新轮回!

    [惊奇科技]见证传奇:88秒速览iPhone十二年经典发布瞬间 出品 | 网易手机频道 (油管&B站:惊奇科技 抖音:JQ163) iPhone十二年了,多希望这是苹果的一个新轮回! 十二,在 ...

  2. iPhone 14或成史上销量最差机型;腾讯首次发布《全真互联白皮书》;GNOME 43发布|极客头条...

    「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews ...

  3. 大卸iphone十八块..iphone 3GS 拆机..有图有真相...附拆机步骤!

    以上文章来源于:http://bbs.weiphone.com/read-htm-tid-690196.html 若要更详细的拆机教程....请转跳 !!!大卸iphone十八件...高清重制版... ...

  4. 阿里云算力的十年更迭史,重点都在这了!

    3 月 29 日,在阿里云计算峰会上,阿里云弹性计算负责人张献涛博士,作为开场嘉宾,做了<高效稳定,助力云上企业敏捷创新>的主题分享,回顾阿里云算力的十年更迭史,讲解阿里云强劲.稳定.安全 ...

  5. IPHONE 4完美越狱(转)

    IPHONE 4完美越狱(转) 今天帮同事的iphone 4(IOS5.0.1)完美越狱,呵呵,参考以下文档.(2012-03-02) iPhone4完美越狱,需要使用最新发布的RedSn0w越狱工具 ...

  6. 绿地五里桥 设计原型_【新时代文明实践】世博十年,满满回忆!一张地图回顾五里桥的十年变迁史!...

    原标题:[新时代文明实践]世博十年,满满回忆!一张地图回顾五里桥的十年变迁史! 2010年-2020年, 十年的时间,五里桥街道发生了翻天覆地的变化,时代进步的春风吹遍了五里桥的每个角落. ♬..♩~ ...

  7. 库克跟乔布斯差几代iPhone? 解读iPhone十年变与不变

    新iPhone在昨天发布之后,引发了舆论对产品和价格的吐槽大会,仅仅一天时间朋友圈已经发酵成为iPhone段子的欢乐海洋.有一个活动是找到你十年前的手机,这个H5的制作方竟然是网易严选.总之,iPho ...

  8. iPhone十年的历程变化,你对未来的苹果手机抱有期待吗?

    苹果近期发布的活动告诉我们,iPhone是十年来人们所喜爱的.今年是iPhone的十周年.iPhone如何吸引我们,改变我们一步一步处理智能手机的方式?让我们回头看看   2007年:第一款iPhon ...

  9. 回顾iPhone十年:它是如何颠覆行业并改变世界的?

    国外媒体今日发表文章,回顾了苹果iPhone手机在过去的10年间是如何颠覆各行各业并改变世界的.展望未来,苹果面临的最大的挑战可能是:iPhone无法再像过去10年那样热卖. 内容摘要: 在过去的10 ...

  10. 从词袋到Transfomer,NLP十年突破史

    作者 | Zelros AI 译者 | 夕颜 出品 | AI科技大本营(ID:rgznai100) [导读]通过 Kaggle 竞赛视角,观察 NLP 十年发展简史. 根据上下文(这里指句子的最后一个 ...

最新文章

  1. shell脚本编程之使用结构化命令
  2. pandas判断日期是否是闰年(is_leap_year)实战: 数据列转化为日期(时间)格式、判断pandas的日期数据列是否是闰年
  3. jquery ajax 与 flask 传输 json 并且 提取ajax数据作为全局变量
  4. 【Linux 内核】编译 Linux 内核 ⑤ ( 查看 .config 编译配置文件 | 正式编译内核 )
  5. Oracle 约束 Constraint
  6. Javascript数字前补零的功能
  7. 使用码云git的webhook实现生产环境代码的自动pull
  8. 通用分页存储过程(sqlserver)
  9. matplotlib - 3D scatter plot
  10. 仿豆丁百度文库网页版阅读器完整解决方案
  11. [JavaWeb-HTTP]HTTP概念
  12. java 大数 list_Java后台通过Collections获取list集合中最大数,最小数代码
  13. spark application 同时运行 实行数据共享
  14. 微型计算机的现状历史未来,微型计算机的发展历史、现状和未来
  15. Pytorch测试模型的GFLOPs和Param大小
  16. 06-13最新Xcode7 beta版迅雷离线下载
  17. 通过 Amazon EFS 对 NFS 文件系统权限进行细粒度控制
  18. 柳传志:选人要看“后脑勺”
  19. 【开发日常】【Java】Java小程序汽车租赁
  20. 【笔记】玩转CSS3新特性_from_JSPang

热门文章

  1. 获取基金数据python库_PYTHON爬取基金数据及基金筛选
  2. ps文件太大无法保存?
  3. android studio 底部工具栏,教大家android studio工具栏不见了如何找回
  4. 计算机内存条如何区分频率,什么是内存条的频率? 怎么看内存条频率?
  5. 知识蒸馏(Knowledge Distillation)
  6. 对接腾讯广告平台系统开发(半自动化广告投放系统)
  7. Firefox无法打开VMWare console的解决方案
  8. 顶级域名 一级域名 二级域名 三级域名什么区别?
  9. 人工智能--不确定性推理概述
  10. 你摸透英语的16种时态了嘛