Cocoapods系列教程一 - 入門

開場

對于這個東西估計絕大多數(shù)的童鞋應(yīng)該都不陌生了,不過這里還是稍微對大家嘮嘮嗑,可能對于那些沒用過的童鞋也有可能是一種幫助呢,我們要一視同仁對吧。 對于Cocoapods是個什么東西估計大家多少聽過了,可能有些童鞋沒有用過,但是多少也聽過了。如果沒聽過的童鞋就聽我嘮一句嗑:

Cocoapods是一個框架依賴管理的一個管理工具,主要是用來管理框架一些開源庫在項目中的引用。簡而言之就是用來管理你的項目中對開源框架或自己公司子模塊的依賴。

當(dāng)然作為使用者來說,入門教程簡單的要死。但是作為一個開發(fā)人員不能只滿足于當(dāng)前的步伐,而應(yīng)該不斷進(jìn)取,要做到能想Cocoapods提交項目,并且在自己項目中熟練應(yīng)用該工具的程度。特別是如果一個大的公司來說的話,就有可能進(jìn)行模塊化開發(fā)了。對于國內(nèi)很多公司還是在用OC來說的話,Cocoapods應(yīng)該還是一個不錯的模塊管理的工具。

當(dāng)然第一篇文章來點簡單的,主要是正對使用者來進(jìn)行講解的。

安裝

當(dāng)然,剛開始說這說那也沒什么卵用,不如直接開始。要使用這個工具,首先當(dāng)然應(yīng)該是安裝這個工具啦。其實安裝這個就一句話的事情:

$ sudo gem install cocoapods

但是在Mac OS X EL Capitan(10.11)中就會出現(xiàn)Operation not permitted - /usr/bin/pod的錯誤,當(dāng)我遇到這個錯誤的時候我整個人是拒絕的,可是遇到問題還是得解決嘛。后來發(fā)現(xiàn)了兩個解決方案。

方案一

$ mkdir -p $HOME/Software/ruby
$ export GEM_HOME=$HOME/Software/ruby
$ gem install cocoapods
[...]
1 gem installed cocoapods  
$ export PATH=$PATH:$HOME/Sofware/ruby/bin
****

方案一中主要是將GEM的安裝路徑進(jìn)行修改,將GEM的默認(rèn)安裝路徑修改成了$HOME/Software/ruby這個目錄,然后再進(jìn)行安裝,最后將安裝路徑添加到PATH下,這樣可以不用帶完整的路徑進(jìn)行運(yùn)行命令。

方案二

$ gem install cocoapods -n ~/Software/ruby

方案二中使用了gem的自帶參數(shù)-n—–即指明安裝的路徑,如果要使用這種的話,也需要將該路徑加入PATH下才可以不用帶完整的路徑進(jìn)行運(yùn)行命令。

個人建議是使用第一種,將GEM的安裝路徑進(jìn)行修改。這樣不需要每次都用-n命令進(jìn)行指定路徑。

就此,關(guān)于安裝Cocoapods暫時應(yīng)該就沒有什么問題了。如果還有什么問題的童鞋可以留言。

初次使用

關(guān)于使用我這里主要分為兩個部分,一個部分是關(guān)于命令的層次來說的,一部分是關(guān)于Podfile的層次來說的。當(dāng)然對于簡單的使用用起來也非常簡單。不過剛開始就來一個簡單的吧。

就比如我們最常用的AFNetworkingSDwebImage以及iOS-Echarts來說的話,只需在項目名.xcodeproj的目錄下創(chuàng)建一個Podfile的文件,然后打開文件,填入一下內(nèi)容:

platform:ios,'7.1'  
pod 'SDWebImage', '~>3.7'  
pod 'AFNetworking'  
pod 'iOS-Echarts'  

然后保存,并且打開一個命令行,跳轉(zhuǎn)到Podfile的目錄直接運(yùn)行pod install即可。 當(dāng)然,你會看到你的目錄下回多了目錄Pods, 文件Podfile.lock以及文件項目名.xcworkspace。當(dāng)然以后你打開項目就再也不是xcodeproj的文件了,而是wxcworkspcace的文件。然后你打開項目就會看到除了你的項目外,下面多了一個Pods的一個項目。就此,對于你項目需要依賴的AFNetworkingSDwebImage的依賴了。非常簡單對吧? 當(dāng)然如果你只是想簡單的使用Cocoapods,估計到這一步就完全夠了。

對于一個進(jìn)步青年或者是對于一個使用復(fù)雜的場景來說的話,對于Podfile的深入了解還是有一定幫助的。

深入至Podfile

比如在你使用AFNetworking是在是2.6.3的版本情況下封好API,但是在你Podfile中對于AFNetworking的定義還是為pod 'AFNetworking',突然有一天AFNetworking升級為3.0+了。那時候估計你的心里就是:當(dāng)時我就懵逼了。因為在3.0中移除了AFHTTPRequestOperationManager等一些類,一旦你重新執(zhí)行的pod update的話,你的程序估計就再也怎么編譯不過了。如果你不熟悉Cocoapods的話,估計你就真的的懵逼了。

在第一次pod install后,會生成Podfile.lock文件,這個文件會把所有第三方庫的當(dāng)前版本給lock住,意思就是只要不修改Podfile,那所有第三方庫的版本都會停留在當(dāng)前版本。不管某個庫是否升級,自己或是同伴執(zhí)行pod install都只會下載被lock住的版本。使用pod update 才會更新到最新版。

不過有了這篇教程的一些講解,媽媽再也不用擔(dān)心你的作業(yè)了。 這部分主要講解一下Podfile
的一些參數(shù)和使用的講解,對于一些使用場景會非常有幫助的。

pod

首先先來講講最核心的pod關(guān)鍵字吧。關(guān)于pod的使用在上面可以看得出來是pod '框架名' 參數(shù)。 當(dāng)然對于前面兩個pod '框架名'是固定的,沒上面好說,參數(shù)的話,這里主要講參數(shù)。 參數(shù)一: 版本號 從上面可以看得出SDWebImage就接了版本號。不過版本號可以是大于、小于、等于等。當(dāng)然具體的可以是'> 3.7', '>= 3.7', '< 3.7', '3.7'以及'~> 3.7'。關(guān)于普通的就沒什么好說了,最后一個~>指的是正對最后一位來說。如使用'~> 3.7.4',意味著'>= 3.7.4'并且'< 3.8.0'的意思。 參數(shù)二:地址Cocoapods可以指定某一個git的目錄或者是本地的目錄。有的時候我們希望一直用某一個版本最新的版本,即使沒有打版本的話,我們可以直接后面接上:git => 'https://github.com/gowalla/AFNetworking.git'

當(dāng)然除了這種情況外,還有可能是如果是我們自己開發(fā)的私有庫,并且在開發(fā)階段的情況下,可能就希望開發(fā)模式進(jìn)行引用,則可以使用path參數(shù)::path => '~/Documents/AFNetworking'參數(shù)三:tag、branche、commit 有的時候我們希望引用有一個tag,branch或者是comit的內(nèi)容的話可以使用這個參數(shù),分別用 :branch => 'branch名':tag => 'tag名':commit => '提交號'。 參數(shù)四:inhibit*all*warnings!對于博主來說,一個項目中很多warnings是非常難以忍受的。不知道小伙伴們會不會有這種感覺,自然這個參數(shù)是用來避免那些第三方框架中帶來的warnings。博主很喜歡他。

platform這個參數(shù)是只依賴的庫希望在哪個平臺被編譯。 一句話帶過吧,直接使用platform :ios, '7.0'。說希望采用iOS7.0的進(jìn)行編譯。之前有個同事沒有指定只寫了platform后面都沒有了,然后一直怎么編譯都編譯不通過。當(dāng)時我不知道,一直以為他在某個環(huán)節(jié)出錯了。后來才知道,如果在platform后面沒有跟東西的話,默認(rèn)是在iOS4.3,OSX 10.6,tvOS 9.0以及watchOS 2.0的情況下編譯的。很多庫都是從6.0或者7.0才開始支持的,自然編譯不通過。所以小伙伴們記得要注意這點,后面要跟上具體的platform的參數(shù)。

target這個是指定具體的配置是適配在哪個target,這里的target值得就是Xcode中的target。如果對于一些項目中你的不同target引用的框架不同的話,可以采用這個進(jìn)行區(qū)分。

target "ShowsApp" do  
  pod 'ShowsKit'
  target "ShowsTV" do
    pod "ShowTVAuth"
  end
end  

use_frameworks!

這個指明編譯成動態(tài)庫,而不是靜態(tài)庫,特別是在使用Swift庫的過程中,特別需要使用這句。不過他會把所有項目的編譯動態(tài)庫,這一點有點不好。不過在使用Swift庫的過程中就沒辦法了。

source

這個參數(shù)是指Cocoapods從哪些倉庫(Spec)中獲得框架的源代碼,如果在結(jié)合使用開源庫以及自己私有庫的情況下,這個參數(shù)還是非常有意義的。博主之前在用到自己私有庫的情況下就不懂這點,最后查了好久資料才知道的。只需要在Podfile文件開頭列出你需要引用庫的所有倉庫地址即可。

source 'https://github.com/artsy/Specs.git'  
source 'https://192.168.0.90:8888/MySepcs/Specs.git'  

好了對于Podfile常用幾個稍微拿出來說了一下,如果還有更深入不懂的情況下,可以查看Cocoapods Guide。 最后給一個官方的Demo吧.

# open source
source 'https://github.com/CocoaPods/Specs.git'

# my work
source 'https://github.com/Artsy/Specs.git'

target 'App' do

  pod 'Artsy+UIColors'
  pod 'Artsy+UIButtons'

  pod 'FLKAutoLayout'
  pod 'ISO8601DateFormatter', '0.7'
  pod 'AFNetworking', '~> 2.0'

  target 'AppTests' do
    pod 'FBSnapshotTestCase'
    pod 'Quick'
    pod 'Nimble'
  end
end  

命令行pod install 和 pod update

在使用·Cocoapods·的過程中,我們可能要更新或者是安裝一個新的第三方框架。自然這里就避免不了要用這兩個命令了。對于這兩個命令來說,一個是在有新的第三方框架引入是運(yùn)行,另一個是純粹為了更新本地的第三框架。 對于二者的命令來說其參數(shù)都是大同小異的,這里大概講解一下。

參數(shù)--no-repo-update

這個參數(shù)應(yīng)該是大家最常用的參數(shù)之一,其主要的作用是用于在執(zhí)行pod installpod update兩條命令是而執(zhí)行的pod repo update的操作。而pod repo update則是跟新本地已有的第三框框架。對于大多數(shù)情況下,我們只希望跟新當(dāng)前項目的,并且這個操作執(zhí)行的時間都是相對比較長,所以在執(zhí)行這兩條命令是,大多數(shù)人都添加了這個參數(shù)。

參數(shù)--verbose 和 --silent

這兩個參數(shù)是用來控制pod命令的,而有些人不希望看到輸出的情況下可以選擇--silent。而對于在執(zhí)行這兩條命令的情況下如果出錯了,則可能添加--verbose的參數(shù)能看到具體的出錯信息。--verbose則是用來輸出這兩條命令執(zhí)行過程中所包含的所有信息。對于大多數(shù)的Cocoapods的命令行來說都帶有著兩個參數(shù)。

其他的細(xì)節(jié)就不具體說了,大家可以通過help命令來進(jìn)行查看詳情。

結(jié)論

簡單來說要使用Cocoapods只需通過三個步驟:安裝、寫Podfilepod install命令即可。

到此關(guān)于Cocoapods
作為使用者來說的大體內(nèi)容就差不多這么多了。關(guān)于細(xì)節(jié)方面大家可以通過Cocoapods官網(wǎng)來進(jìn)行查閱。在下一篇中,我將對Cocoapods作為一個貢獻(xiàn)者或者制作一個私有庫進(jìn)行講解。而可能在第三篇中會對在Cocoapods在項目進(jìn)行模塊化管理過程中的使用進(jìn)行講解,其中應(yīng)該包含了在一個項目做同時使用私有庫以及開源庫之間引用以及如何進(jìn)行管理各個模塊進(jìn)行大致描述。

tips

使用Cocoapods時卡在Setting up CocoaPods master repo
所有項目的Podspec文件都托管在https://github.com/CocoaPods/Specs,,第一次執(zhí)行pod setup時, CocoaPods會將這些podspec索引文件更新到本地的~/.cocoapods目錄下,這個索引文件比較大,所以第一次更新時非常慢.友好人士在國內(nèi)的服務(wù)器建立了Cocoapods索引庫的鏡像,所以執(zhí)行索引跟新操作時候會快很多.具體操作方法如下:

$ pod repo remove master
$ pod repo add master [https://gitcafe.com/akuandev/Specs.git](https://gitcafe.com/akuandev/Specs.git)
$ pod repo update

這是使用gitcafe上的鏡像,將以上代碼中的 https://gitcafe.com/akuandev/Specs.git 替換成 http://git.oschina.net/akuandev/Specs.git 即可使用oschina上的鏡像。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,836評論 6 540
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,275評論 3 428
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,904評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,633評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 72,368評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,736評論 1 328
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,740評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,919評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,481評論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 41,235評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,427評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,968評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,656評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,055評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,348評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,160評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 48,380評論 2 379

推薦閱讀更多精彩內(nèi)容

  • 項目組件化、平臺化是技術(shù)公司的共同目標(biāo),越來越多的技術(shù)公司推崇使用pod管理第三方庫以及私有組件,一方面使項目架構(gòu)...
    swu_luo閱讀 22,093評論 0 39
  • CocoaPods 是什么? CocoaPods 是一個負(fù)責(zé)管理 iOS 項目中第三方開源庫的工具。CocoaPo...
    朝洋閱讀 25,735評論 3 51
  • Ruby 安裝 要安裝cocospods 首先需要安裝ruby,可以先安裝xcode,再安裝macport ,最后...
    山天大畜閱讀 1,882評論 0 1
  • 一. CocoaPods的介紹 什么是CocoaPods?CocoaPods是一個負(fù)責(zé)管理iOS項目中第三方開源庫...
    輝712閱讀 3,969評論 0 7
  • 剛開完會,物業(yè)打電話說是我家暖氣管線破了,樓下遭水淹了!怎么會,上周五才回家看了,一切都好著呀!沒辦法,家里沒人不...
    籬落悠悠閱讀 230評論 2 4