iOS與開源:一枝紅杏出墻來
對(duì)一般人而言,蘋果和其構(gòu)筑的iOS帝國(guó),給人的印象是一個(gè)圍墻花園(Wall Garden),如果你不在其中,就無法領(lǐng)略里面的勝景。對(duì)于開發(fā)者而言也同樣是這樣,無論你用什么平臺(tái)工具開發(fā)出來的iOS App,***總是要用OS X上面的Xcode進(jìn)行編譯打包,并上傳到蘋果的開發(fā)者中心,通過官方審核后才能最終與世人見面。在這之前,甚至沒有人知道你付出的心血。
這個(gè)圍墻花園也是開源支持者對(duì)蘋果頗有微詞的地方,不過,現(xiàn)在這種情況已經(jīng)有所改變,在iOS開發(fā)者的自發(fā)努力下,開源意識(shí)和行動(dòng)慢慢深入人心。
蘋果的開源
在討論iOS開源之前,我們有必要先了解一下蘋果對(duì)開源軟件的態(tài)度。
和一般人所想象的不同,蘋果對(duì)開源軟件非常支持,它稱自己為***個(gè)將開源軟件作為關(guān)鍵戰(zhàn)略的大型個(gè)人計(jì)算機(jī)公司,同時(shí)它也是開源的重要參與者,對(duì)開源的貢獻(xiàn)在眾多科技公司中是排名靠前的。
蘋果有專門的源碼官網(wǎng):opensource.apple.com,有自己的開源協(xié)議APPLE PUBLIC SOURCE LICENSE(APSL),這是一個(gè)相對(duì)寬松的協(xié)議,已獲得了自由軟件基金會(huì)FSF的認(rèn)可。在源碼網(wǎng)站上標(biāo)注為APSL的軟件基本上都是蘋果貢獻(xiàn)的。在這里也有一個(gè)蘋果開源軟件的具體列表。
其中,蘋果最為著名的開源項(xiàng)目有下面兩個(gè):
Darwin:這是蘋果最重要的開源項(xiàng)目,驅(qū)動(dòng)著蘋果OS X系統(tǒng),直到現(xiàn)在的Yosemite。它是一種類Unix的混合操作系統(tǒng),其內(nèi)核包括Mach、FreeBSD等。從2001年蘋果基于它開發(fā)出Mac OS X 10.0時(shí)開始就將它開源,一直到現(xiàn)在。
WebKit:WebKit是瀏覽器引擎,它是KDE開源項(xiàng)目旗下的KHTML和KJS的一個(gè)分支,但目前它的流行程度已經(jīng)遠(yuǎn)遠(yuǎn)超過后者,尤其在移動(dòng)互聯(lián)網(wǎng)領(lǐng)域幾乎統(tǒng)治了移動(dòng)瀏覽器。
蘋果的其它知名開源項(xiàng)目還有為異構(gòu)計(jì)算打造的OpenCL,以及服務(wù)發(fā)現(xiàn)協(xié)議實(shí)現(xiàn)Bonjour,以及作為主要贊助者的LLVM。
這些開源項(xiàng)目任何一個(gè)拿出來都可以羞煞國(guó)內(nèi)的互聯(lián)網(wǎng)公司,并成為任何重視技術(shù)的公司的鎮(zhèn)山之寶。這些足以說明,蘋果是開源的積極參與者。
那么,既然是這樣,為什么它還被認(rèn)為封閉呢?
如果繼續(xù)深入了解一下我們會(huì)發(fā)現(xiàn),蘋果對(duì)開源的態(tài)度是讓其為我所用,它的開源目的是為了讓自己的產(chǎn)品更好,對(duì)于構(gòu)成自己產(chǎn)品核心的開源項(xiàng)目蘋果是嚴(yán) 格控制的,因此可能和社區(qū)的貢獻(xiàn)者產(chǎn)生分歧。比如WebKit,2013年Google宣布推出它的分支,其中的原因之一就是蘋果的控制過嚴(yán),無法滿足滿 足搜索巨人的需求。
這種態(tài)度還可以在iOS系統(tǒng)中的開源軟件看出,相較于OS X龐大的開源軟件列表,iOS不僅開源的系統(tǒng)版本嚴(yán)重滯后(截止發(fā)稿時(shí)才公布至iOS 6.1.3版),而且里面的軟件很少,大部分還是因?yàn)殚_源協(xié)議的要求不得不公布(如一些GPL、LGPL協(xié)議下的開源項(xiàng)目)。
但是,雖然蘋果對(duì)于iOS上的開源非常謹(jǐn)慎,iOS開發(fā)的生態(tài)圈卻呈現(xiàn)出樂于分享的形態(tài),這是為什么呢?首先需要?dú)w功于CocoaPods的崛起。
CocoaPods的崛起
CocoaPods是Objective-C編程語(yǔ)言的一個(gè)應(yīng)用程序級(jí)別的依賴管理器,作用是幫助開發(fā)者管理程序中用到的第三方庫(kù)。在沒有 CocoaPods之前,我們需要手工的添加和配置和更新第三方庫(kù),由于第三方庫(kù)之間可能存在錯(cuò)綜復(fù)雜的依賴關(guān)系,因此這是一個(gè)繁瑣而令人頭疼的問題。
CocoaPods自項(xiàng)目的發(fā)起者Eloy Durán從2011年9月發(fā)布***個(gè)正式版以來,迅速受到廣大Objective-C開發(fā)者的喜愛,到本月它的總下載次數(shù)超過100萬(wàn)次,連Facebook發(fā)布的iOS第三方庫(kù)也支持CocoaPods,可見它的影響力。
CocoaPods的宗旨是提高第三方開源庫(kù)的可見性和參與度,創(chuàng)建一個(gè)更中心化的生態(tài)系統(tǒng)。當(dāng)用戶使用它時(shí),需要獲取第三方庫(kù)的源碼進(jìn)行編譯,所 以,這是一個(gè)只有開源參與者才能進(jìn)入的游樂場(chǎng)。CocoaPods本身托管在Github上,它所維護(hù)的第三方庫(kù)列表的主倉(cāng)庫(kù)也托管在Github上,它 的開發(fā)社區(qū)非?;钴S,貢獻(xiàn)者高達(dá)200多人,曾獲得Github 2013年度最活躍的開源項(xiàng)目前十名。
iOS開源閉環(huán)
但是,光有CocoaPods并不能解決第三方庫(kù)的發(fā)現(xiàn)問題,這時(shí)Github和一些代碼庫(kù)就派上用場(chǎng)了。大多數(shù)支持CocoaPods的第三方庫(kù)都托管在Github上,我們可以通過Github趨勢(shì)中的Objective-C語(yǔ)言分類進(jìn)行查看,而如CocoaControls或CocoaChina代碼庫(kù)這樣的第三方代碼庫(kù),則更專注于OS X/iOS領(lǐng)域的代碼,并且分類更細(xì)致,開發(fā)者可以更順利的找到喜歡的第三方庫(kù)。
iOS開源閉環(huán)
就這樣,CocoaPods – Github – 第三方代碼庫(kù) – 開發(fā)者,這四者形成了一個(gè)iOS開源的閉環(huán),隨著參與者的增多,變得越來越強(qiáng)大。
目前CocoaPods上的第三方庫(kù)已經(jīng)超過6000個(gè),越來越多的iOS開發(fā)者將自己的代碼開源并分享到CocoaPods里,這股鮮活的力量已經(jīng)潛移默化的改變了iOS開發(fā)的生態(tài)。
值得一提的是,許多國(guó)人iOS開發(fā)者也參與到這場(chǎng)開源運(yùn)動(dòng)當(dāng)中,如Kevin、Lex、Onevcat、gavinkwoe、qfish、xhzengAIB等,并且其中不少人的項(xiàng)目在Github取得了不錯(cuò)的成績(jī)——當(dāng)國(guó)內(nèi)開源界還在感嘆,國(guó)人對(duì)開源的態(tài)度是如何只索取不貢獻(xiàn)的時(shí)候,國(guó)人iOS開發(fā)者已經(jīng)參與到開源中來并且結(jié)出碩果。
開源運(yùn)動(dòng)對(duì)iOS開發(fā)的影響
對(duì)iOS開發(fā)有所了解的人會(huì)知道,iOS應(yīng)用開發(fā)的難點(diǎn)在于數(shù)據(jù)存儲(chǔ)、網(wǎng)絡(luò)、UI動(dòng)畫等方面,如果沒有第三方庫(kù),自己寫起來很費(fèi)勁,整個(gè)iOS App開發(fā)的時(shí)間和成本也會(huì)水漲船高。有了第三方庫(kù),就能提高效率,讓開發(fā)者專注于開發(fā)核心邏輯和優(yōu)化上面,簡(jiǎn)化了iOS開發(fā)的流程。
在Github上有超過2500 star的iOS圖表庫(kù)PNChart的作者Kevin表示,iOS的開源項(xiàng)目就像積木塊,使用開源項(xiàng)目進(jìn)行iOS開發(fā),就像搭積木。毫無疑問,這會(huì)大大 降低iOS開發(fā)的門檻,雖然這樣一來可能會(huì)造成iOS開發(fā)者隊(duì)伍的良莠不齊,最終影響iOS應(yīng)用的質(zhì)量,但有著蘋果的把關(guān),相信問題不會(huì)太大。而門檻降低 帶來的好處相比它的負(fù)面影響更大,一些好的應(yīng)用idea能夠更輕易的實(shí)現(xiàn),我們將擁有更多讓人眼前一亮的App。
目前,已經(jīng)有很多知名公司開發(fā)的App都使用了第三方的iOS開源庫(kù),比如FacebookPaper、Instagram、LinkedIn、 Skype等都大量使用了第三方庫(kù),國(guó)內(nèi)的互聯(lián)網(wǎng)公司也有不少使用的。這些公司都有能力開發(fā)出自己的第三方庫(kù),但仍然選擇了“不重復(fù)造輪子”,說明了這些 iOS第三方庫(kù)有存在的必要,并且已經(jīng)發(fā)揮了價(jià)值。
而另外還有一個(gè)現(xiàn)象是,Github上iOS相關(guān)的UI界面和動(dòng)效的開源項(xiàng)目,它們多半都配有動(dòng)態(tài)圖片,形成Github上一道亮麗的風(fēng)景。這些項(xiàng) 目已經(jīng)半只腳踏進(jìn)了設(shè)計(jì)的層面,和蘋果對(duì)于設(shè)計(jì)嚴(yán)格保護(hù)不一樣,這些項(xiàng)目的貢獻(xiàn)者樂于分享他們所創(chuàng)造和發(fā)現(xiàn)的美妙效果,即使是設(shè)計(jì)師,甚至其它平臺(tái)的開發(fā) 者也可以在它們身上汲取靈感。
就這樣,iOS開發(fā)者自發(fā)的開源行動(dòng)不僅漸漸改變了iOS開發(fā)的方式,而且影響力將超出蘋果所設(shè)置的藩籬,成為開源、開放與自由精神的成功典范。就像墻內(nèi)的紅杏,不甘寂寞,勇敢攀上墻頭綻放,從此點(diǎn)亮了整個(gè)世界。