对一般人而言,苹果和其构筑的iOS帝国,给人的印象是一个围墙花园(Wall Garden),如果你不在其中,就无法领略里面的胜景。对于开发者而言也同样是这样,无论你用什么平台工具开发出来的iOS App,***总是要用OS X上面的Xcode进行编译打包,并上传到苹果的开发者中心,通过官方审核后才能最终与世人见面。在这之前,甚至没有人知道你付出的心血。
这个围墙花园也是开源支持者对苹果颇有微词的地方,不过,现在这种情况已经有所改变,在iOS开发者的自发努力下,开源意识和行动慢慢深入人心。
苹果的开源
在讨论iOS开源之前,我们有必要先了解一下苹果对开源软件的态度。
和一般人所想象的不同,苹果对开源软件非常支持,它称自己为***个将开源软件作为关键战略的大型个人计算机公司,同时它也是开源的重要参与者,对开源的贡献在众多科技公司中是排名靠前的。
苹果有专门的源码官网:opensource.apple.com,有自己的开源协议APPLE PUBLIC SOURCE LICENSE(APSL),这是一个相对宽松的协议,已获得了自由软件基金会FSF的认可。在源码网站上标注为APSL的软件基本上都是苹果贡献的。在这里也有一个苹果开源软件的具体列表。
其中,苹果最为著名的开源项目有下面两个:
Darwin:这是苹果最重要的开源项目,驱动着苹果OS X系统,直到现在的Yosemite。它是一种类Unix的混合操作系统,其内核包括Mach、FreeBSD等。从2001年苹果基于它开发出Mac OS X 10.0时开始就将它开源,一直到现在。
WebKit:WebKit是浏览器引擎,它是KDE开源项目旗下的KHTML和KJS的一个分支,但目前它的流行程度已经远远超过后者,尤其在移动互联网领域几乎统治了移动浏览器。
苹果的其它知名开源项目还有为异构计算打造的OpenCL,以及服务发现协议实现Bonjour,以及作为主要赞助者的LLVM。
这些开源项目任何一个拿出来都可以羞煞国内的互联网公司,并成为任何重视技术的公司的镇山之宝。这些足以说明,苹果是开源的积极参与者。
那么,既然是这样,为什么它还被认为封闭呢?
如果继续深入了解一下我们会发现,苹果对开源的态度是让其为我所用,它的开源目的是为了让自己的产品更好,对于构成自己产品核心的开源项目苹果是严 格控制的,因此可能和社区的贡献者产生分歧。比如WebKit,2013年Google宣布推出它的分支,其中的原因之一就是苹果的控制过严,无法满足满 足搜索巨人的需求。
这种态度还可以在iOS系统中的开源软件看出,相较于OS X庞大的开源软件列表,iOS不仅开源的系统版本严重滞后(截止发稿时才公布至iOS 6.1.3版),而且里面的软件很少,大部分还是因为开源协议的要求不得不公布(如一些GPL、LGPL协议下的开源项目)。
但是,虽然苹果对于iOS上的开源非常谨慎,iOS开发的生态圈却呈现出乐于分享的形态,这是为什么呢?首先需要归功于CocoaPods的崛起。
CocoaPods的崛起
CocoaPods是Objective-C编程语言的一个应用程序级别的依赖管理器,作用是帮助开发者管理程序中用到的第三方库。在没有 CocoaPods之前,我们需要手工的添加和配置和更新第三方库,由于第三方库之间可能存在错综复杂的依赖关系,因此这是一个繁琐而令人头疼的问题。
CocoaPods自项目的发起者Eloy Durán从2011年9月发布***个正式版以来,迅速受到广大Objective-C开发者的喜爱,到本月它的总下载次数超过100万次,连Facebook发布的iOS第三方库也支持CocoaPods,可见它的影响力。
CocoaPods的宗旨是提高第三方开源库的可见性和参与度,创建一个更中心化的生态系统。当用户使用它时,需要获取第三方库的源码进行编译,所 以,这是一个只有开源参与者才能进入的游乐场。CocoaPods本身托管在Github上,它所维护的第三方库列表的主仓库也托管在Github上,它 的开发社区非常活跃,贡献者高达200多人,曾获得Github 2013年度最活跃的开源项目前十名。
iOS开源闭环
但是,光有CocoaPods并不能解决第三方库的发现问题,这时Github和一些代码库就派上用场了。大多数支持CocoaPods的第三方库都托管在Github上,我们可以通过Github趋势中的Objective-C语言分类进行查看,而如CocoaControls或CocoaChina代码库这样的第三方代码库,则更专注于OS X/iOS领域的代码,并且分类更细致,开发者可以更顺利的找到喜欢的第三方库。
iOS开源闭环
就这样,CocoaPods – Github – 第三方代码库 – 开发者,这四者形成了一个iOS开源的闭环,随着参与者的增多,变得越来越强大。
目前CocoaPods上的第三方库已经超过6000个,越来越多的iOS开发者将自己的代码开源并分享到CocoaPods里,这股鲜活的力量已经潜移默化的改变了iOS开发的生态。
值得一提的是,许多国人iOS开发者也参与到这场开源运动当中,如Kevin、Lex、Onevcat、gavinkwoe、qfish、xhzengAIB等,并且其中不少人的项目在Github取得了不错的成绩——当国内开源界还在感叹,国人对开源的态度是如何只索取不贡献的时候,国人iOS开发者已经参与到开源中来并且结出硕果。
开源运动对iOS开发的影响
对iOS开发有所了解的人会知道,iOS应用开发的难点在于数据存储、网络、UI动画等方面,如果没有第三方库,自己写起来很费劲,整个iOS App开发的时间和成本也会水涨船高。有了第三方库,就能提高效率,让开发者专注于开发核心逻辑和优化上面,简化了iOS开发的流程。
在Github上有超过2500 star的iOS图表库PNChart的作者Kevin表示,iOS的开源项目就像积木块,使用开源项目进行iOS开发,就像搭积木。毫无疑问,这会大大 降低iOS开发的门槛,虽然这样一来可能会造成iOS开发者队伍的良莠不齐,最终影响iOS应用的质量,但有着苹果的把关,相信问题不会太大。而门槛降低 带来的好处相比它的负面影响更大,一些好的应用idea能够更轻易的实现,我们将拥有更多让人眼前一亮的App。
目前,已经有很多知名公司开发的App都使用了第三方的iOS开源库,比如FacebookPaper、Instagram、LinkedIn、 Skype等都大量使用了第三方库,国内的互联网公司也有不少使用的。这些公司都有能力开发出自己的第三方库,但仍然选择了“不重复造轮子”,说明了这些 iOS第三方库有存在的必要,并且已经发挥了价值。
而另外还有一个现象是,Github上iOS相关的UI界面和动效的开源项目,它们多半都配有动态图片,形成Github上一道亮丽的风景。这些项 目已经半只脚踏进了设计的层面,和苹果对于设计严格保护不一样,这些项目的贡献者乐于分享他们所创造和发现的美妙效果,即使是设计师,甚至其它平台的开发 者也可以在它们身上汲取灵感。
就这样,iOS开发者自发的开源行动不仅渐渐改变了iOS开发的方式,而且影响力将超出苹果所设置的藩篱,成为开源、开放与自由精神的成功典范。就像墙内的红杏,不甘寂寞,勇敢攀上墙头绽放,从此点亮了整个世界。