CocoaPods 的介紹嵌言、安裝、使用和原理

CocoaPods 私有庫教程已更新辣苏,如有需要請(qǐng)移駕 CocoaPods 私有庫 step by step - 簡書查看

目錄

更新記錄

CocoaPods簡介

常用命令一覽

一肝箱、CocoaPods 的安裝

1、更換 Gem 的源
2稀蟋、更新升級(jí) Gem 版本
3煌张、安裝CocoaPods
4、更換repo鏡像為國內(nèi)服務(wù)器

二退客、CocoaPods 的使用(圖和文字有細(xì)微的出入)

1骏融、新建 Podfile 文件
2链嘀、編輯 Podfile 文件
3、執(zhí)行導(dǎo)入命令
4档玻、第三方庫更新
5怀泊、文件和指令說明
6、pod install 和 pod update 的區(qū)別

三误趴、遭遇到的問題

四霹琼、原理和說明

五、更多

1凉当、pod install提速
2枣申、關(guān)于Podfile文件編輯時(shí),第三方庫版本號(hào)的各種寫法


更新記錄:

2017.12更新: pod installpod update 的區(qū)別纤怒。
2016.08更新:Podfile 格式更新

在1.0.0的 CocoaPods 版本升級(jí)后糯而,Podfile 文件的使用方法官方已經(jīng)更新,格式如下

platform :ios, "9.0"

target 'BSBDJ' do
    pod "AFNetworking"
    pod "SDWebImage"
    pod "MJExtension"
end

CocoaPods簡介

每種語言發(fā)展到一個(gè)階段泊窘,就會(huì)出現(xiàn)相應(yīng)的依賴管理工具熄驼,例如Java語言的Maven,nodejs的npm烘豹。隨著iOS開發(fā)者的增多瓜贾,業(yè)界也出現(xiàn)了為iOS程序提供依賴管理的工具,它的名字叫做:CocoaPods携悯。
CocoaPods項(xiàng)目的源碼在Github上管理祭芦。該項(xiàng)目開始于2011年8月12日,經(jīng)過多年發(fā)展憔鬼,現(xiàn)在已經(jīng)成為iOS開發(fā)事實(shí)上的依賴管理標(biāo)準(zhǔn)工具龟劲。開發(fā)iOS項(xiàng)目不可避免地要使用第三方開源庫,CocoaPods的出現(xiàn)使得我們可以節(jié)省設(shè)置和更新第三方開源庫的時(shí)間轴或。
在我開發(fā)猿題庫客戶端時(shí)昌跌,其使用了24個(gè)第三方開源庫。在沒有使用CocoaPods以前照雁,我需要:
把這些第三方開源庫的源代碼文件復(fù)制到項(xiàng)目中蚕愤,或者設(shè)置成git的submodule。
對(duì)于這些開源庫通常需要依賴系統(tǒng)的一些framework饺蚊,我需要手工地將這些framework一一增加到項(xiàng)目依賴中萍诱,比如通常情況下,一個(gè)網(wǎng)絡(luò)庫就需要增加以下framework: CFNetwork, SystemConfiguration, MobileCoreServices, CoreGraphics, zlib污呼。
對(duì)于某些開源庫裕坊,我還需要設(shè)置-licucore或者 -fno-objc-arc等編譯參數(shù)管理這些依賴包的更新。
這些體力活雖然簡單燕酷,但毫無技術(shù)含量并且浪費(fèi)時(shí)間碍庵。在使用CocoaPods之后映企,我只需要將用到的第三方開源庫放到一個(gè)名為Podfile的文件中悟狱,然后執(zhí)行pod install静浴。CocoaPods就會(huì)自動(dòng)將這些第三方開源庫的源碼下載下來,并且為我的工程設(shè)置好相應(yīng)的系統(tǒng)依賴和編譯參數(shù)挤渐。

常用命令一覽
# 1.先升級(jí)Gem
    sudo gem update --system
# 2.切換cocoapods的數(shù)據(jù)源
    【先刪除苹享,再添加,查看】
    gem sources --remove https://rubygems.org/
    gem sources -a http://ruby.taobao.org/
    gem sources -l
3.安裝cocoapods
    sudo gem install cocoapods
4.將Podspec文件托管地址從github切換到國內(nèi)的oschina
    【先刪除浴麻,再添加得问,再更新】
    pod repo remove master
    pod repo add master http://git.oschina.net/akuandev/Specs.git
    pod repo add master https://gitcafe.com/akuandev/Specs.git
    pod repo update
5.設(shè)置pod倉庫
    pod setup
6.測試
    【如果有版本號(hào),則說明已經(jīng)安裝成功】
    pod --version
7.利用cocoapods來安裝第三方框架
    01 進(jìn)入要安裝框架的項(xiàng)目的.xcodeproj同級(jí)文件夾
    02 在該文件夾中新建一個(gè)文件Podfile
    03 在文件中告訴cocoapods需要安裝的框架信息
        a.該框架支持的平臺(tái)
        b.適用的iOS版本
        c.框架的名稱
        d.框架的版本
8.安裝
pod install --no-repo-update
pod update --no-repo-update


一软免、CocoaPods 的安裝

CocoaPods是用Ruby實(shí)現(xiàn)的宫纬,要想使用它首先需要有Ruby的環(huán)境。幸運(yùn)的是OS X系統(tǒng)默認(rèn)的已經(jīng)可以運(yùn)行Ruby了膏萧,因此我們只需要執(zhí)行以下命令漓骚。

1、更換 Gem 的源

Gem是一個(gè)管理Ruby庫和程序的標(biāo)準(zhǔn)包榛泛,它通過Ruby Gem(如 http://rubygems.org/ )源來查找蝌蹂、安裝、升級(jí)和卸載軟件包

// 1.移除掉原有的源(服務(wù)器在國外曹锨,速度較慢)
- gem sources --remove https://rubygems.org/
// 2.等有反應(yīng)之后再敲入以下命令(添加國內(nèi)的源孤个,原先是 http://ruby.taobao.org/ ,現(xiàn)在淘寶上的ruby鏡像換成https了)
- gem sources -a https://ruby.taobao.org/
// 3.驗(yàn)證是否替換成功
- gem sources -l  
1-更換 Gem 的源為國內(nèi)源.png
2沛简、更新升級(jí) Gem 版本

Gem是管理Ruby庫和程序的標(biāo)準(zhǔn)包齐鲤,如果它的版本過低也可能導(dǎo)致安裝失敗,解決方案自然是升級(jí)Gem椒楣,執(zhí)行下述命令即可:

// 更新升級(jí)gem
- sudo gem update --system  
2.1-更新升級(jí) Gem 版本.png

2.2-更新升級(jí) Gem 版本結(jié)果.png
3给郊、安裝CocoaPods
// 安裝CocoaPods(OS X 10.11以前)
- sudo gem install cocoapods
// 安裝CocoaPods(10.11后蘋果升級(jí)了安全策略)
- sudo gem install -n /usr/local/bin cocoapods
3.1-安裝 CocoaPods.png

3.2-安裝 CocoaPods 結(jié)果.png
4、更換repo鏡像為國內(nèi)服務(wù)器

所有的項(xiàng)目的Podspec文件都托管在https://github.com/CocoaPods/Specs撒顿。第一次執(zhí)行pod setup時(shí)丑罪,CocoaPods會(huì)將這些podspec索引文件更新到本地的 ~/.cocoapods/目錄下,這個(gè)索引文件比較大凤壁,有80M左右吩屹。所以第一次更新時(shí)非常慢,筆者(唐巧)就更新了將近1個(gè)小時(shí)才完成拧抖。
一個(gè)叫akinliu的朋友在gitcafe和oschina上建立了CocoaPods索引庫的鏡像煤搜,因?yàn)間itcafe和oschina都是國內(nèi)的服務(wù)器,所以在執(zhí)行索引更新操作時(shí)唧席,會(huì)快很多擦盾。如下操作可以將CocoaPods設(shè)置成使用gitcafe鏡像:

// 1.移除原有服務(wù)器
- pod repo remove master
// 2.添加境內(nèi)服務(wù)器(建議使用第一個(gè))
- pod repo add master https://gitcafe.com/akuandev/Specs.git
- pod repo add master http://git.oschina.net/akuandev/Specs.git(開源中國較慢)
4.1-移除原有的 repo 鏡像服務(wù)器.png

4.2-添加 repo 鏡像國內(nèi)服務(wù)器.png

4.3-更換repo鏡像為國內(nèi)服務(wù)器結(jié)果.png

二嘲驾、CocoaPods 的使用(圖和文字有細(xì)微的出入)

1、新建 Podfile 文件

使用時(shí)需要在你的項(xiàng)目根目錄下新建一個(gè)名為Podfile的文件迹卢,將依賴的庫名字依次列在文件中即可

//進(jìn)入你的工程目錄
$ cd /Users/peikua/Desktop/CocoaPodsDemo  
//創(chuàng)建Pods文件
$ touch Podfile
5.1-在項(xiàng)目根目錄新建 Podfile 文件.png
2辽故、編輯 Podfile 文件

假設(shè)我們想導(dǎo)入 AFNetworking ,進(jìn)入http://cocoapods.org腐碱,搜索AFNetworking

5.2-查詢網(wǎng)站上的信息.png

5.3-根據(jù)信息編輯 Podfile 文件.png

3誊垢、執(zhí)行導(dǎo)入命令
$ cd /Users/peikua/Desktop/CocoaPodsDemo  
$ pod install

5.4-打開 Podfile 目錄執(zhí)行導(dǎo)入命令.png

5.5-成功導(dǎo)入第三方庫的信息和一個(gè) Warning.png

pod install命令執(zhí)行成功后,會(huì)看到工程目錄下多出CocoaPodsTest.xcworkspace症见、Podfile.lock文件和Pods目錄喂走。再看看剛才執(zhí)行完pod install命令打印出來的內(nèi)容的最后一行:From now on use CocoaPodsDemo.xcworkspace.提示我們從現(xiàn)在起,我們需要使用CocoaPodsTest.xcworkspace文件來開發(fā)谋作。

4芋肠、第三方庫更新

只需要在Podfile文件中添加相應(yīng)的第三方庫信息,執(zhí)行pod update命令即可遵蚜。


6.1-假設(shè)已有兩個(gè)庫帖池,新增一個(gè)庫.png

6.2-執(zhí)行 pod update 命令進(jìn)行更新.png
pod outdated:

當(dāng)你運(yùn)行pod outdated命令,CocoaPods會(huì)列出那些所有較Podfile.lock里面有新版本的庫(那些當(dāng)前被安裝著的庫的版本)谬晕。這個(gè)意思就是碘裕,如果你運(yùn)行pod update PODNAME,如果這個(gè)庫有新的版本攒钳,并且新版本仍然符合在Podfile里的限制(pod 'MyPod', '~>x.y')帮孔,它就會(huì)被更新。

Podfile 文件的使用方法官方已經(jīng)更新不撑,格式如下

platform :ios, "9.0"

target 'BSBDJ' do
    pod "AFNetworking"
    pod "SDWebImage"
    pod "MJExtension"
end
5文兢、文件和指令說明
  • Podfile.lock文件
- 最后一次更新Pods時(shí), 所有第三方框架的版本號(hào)
  • 常用指令的區(qū)別
    • pod install
      • 會(huì)根據(jù)Podfile.lock文件中列舉的版本號(hào)來安裝第三方框架
      • 如果一開始Podfile.lock文件不存在, 就會(huì)按照Podfile文件列舉的版本號(hào)來安裝第三方框架
      • 安裝框架之前, 默認(rèn)會(huì)執(zhí)行pod repo update指令
    • pod update
      • 將所有第三方框架更新到最新版本, 并且創(chuàng)建一個(gè)新的Podfile.lock文件
      • 安裝框架之前, 默認(rèn)會(huì)執(zhí)行pod repo update指令
    • pod install --no-repo-update
    • pod update --no-repo-update
      • 安裝框架之前, 不會(huì)執(zhí)行pod repo update指令
6、pod installpod update 的區(qū)別焕檬。

首先 podfile.lockpodfile 必須加入版本控制姆坚。
install 并不是第一次創(chuàng)建 podfile 時(shí)運(yùn)行一次,后面就不再使用了实愚。install 命令不僅在初始時(shí)使用兼呵,在新增或刪除 repo 時(shí)也需要運(yùn)行。每次添加或刪除 repo 后應(yīng)該執(zhí)行 install 命令腊敲,這樣其它的 repo 不會(huì)更新击喂。
update 僅僅在只需更新某一個(gè) repo 或所有時(shí)才使用。

每次執(zhí)行 install 時(shí)碰辅,會(huì)將每個(gè) repo 的版本信息寫入到 podfile.lock懂昂,已存在于 podfile.lockrepo 不會(huì)被更新只會(huì)下載指定版本,不在 podfile.lock 中的 repo 將會(huì)搜索與 podfile 里面對(duì)應(yīng) repo 匹配的版本没宾。

即使某個(gè) repo 指定了版本凌彬,如 pod 'A', '1.0.0'沸柔,最好也是不要使用 update,因?yàn)?repo A 可能有依賴铲敛,如果此時(shí)使用 update 會(huì)更新其依賴褐澎。


三、遭遇到的問題

**出現(xiàn)錯(cuò)誤提示**.png

**錯(cuò)誤解決方法**.png
//以后使用CocoaPods過程中出現(xiàn)了莫名其妙的問題原探,執(zhí)行下面命令  
- sudo gem update --system
- sudo gem install cocoapods
- pod setup

四乱凿、原理和說明

1、第三方庫會(huì)被編譯成.a靜態(tài)庫供我們真正的工程使用咽弦。

CocoaPods會(huì)將所有的第三方庫以target的方式組成一個(gè)名為Pods的工程,該工程就放在剛才新生成的Pods目錄下胁出。整個(gè)第三方庫工程會(huì)生成一個(gè)名稱為libPods.a的靜態(tài)庫提供給我們自己的CocoaPodsTest工程使用型型。
對(duì)于資源文件,CocoaPods提供了一個(gè)名為Pods-resources.sh的bash腳本全蝶,該腳本在每次項(xiàng)目編譯的時(shí)候都會(huì)執(zhí)行闹蒜,將第三方庫的各種資源文件復(fù)制到目標(biāo)目錄中。

2抑淫、我們的工程和第三方庫所在的工程會(huì)由一個(gè)新生成的workspace管理

為了方便我們直觀的管理工程和第三方庫绷落,CocoaPodsTest工程和Pods工程會(huì)被以workspace的形式組織和管理,也就是我們剛才看到的CocoaPodsTest.xcworkspace文件始苇。

3砌烁、原來的工程設(shè)置已經(jīng)被更改了,這時(shí)候我們直接打開原來的工程文件去編譯就會(huì)報(bào)錯(cuò)催式,只能使用新生成的workspace來進(jìn)行項(xiàng)目管理函喉。
4、CocoaPods通過一個(gè)名為Pods.xcconfig的文件來在編譯時(shí)設(shè)置所有的依賴和參數(shù)荣月。

五管呵、更多

1、pod install提速

每次執(zhí)行pod installpod update的時(shí)候哺窄,cocoapods都會(huì)默認(rèn)更新一次spec倉庫捐下。這是一個(gè)比較耗時(shí)的操作。在確認(rèn)spec版本庫不需要更新時(shí)萌业,給這兩個(gè)命令加一個(gè)參數(shù)跳過spec版本庫更新,可以明顯提高這兩個(gè)命令的執(zhí)行速度坷襟。

pod install --verbose --no-repo-update
pod update --verbose --no-repo-update
2、關(guān)于Podfile文件編輯時(shí)咽白,第三方庫版本號(hào)的各種寫法
#pod 'AFNetworking' //不顯式指定依賴庫版本啤握,表示每次都獲取最新版本
#pod 'AFNetworking', '2.0' //只使用2.0版本
#pod 'AFNetworking', '>2.0′ //使用高于2.0的版本
#pod 'AFNetworking', '>=2.0′ //使用大于或等于2.0的版本
#pod 'AFNetworking', '<2.0′ //使用小于2.0的版本
#pod 'AFNetworking', '<=2.0′ //使用小于或等于2.0的版本
#pod 'AFNetworking', '~>0.1.2′ //使用大于等于0.1.2但小于0.2的版本,相當(dāng)于>=0.1.2并且<0.2.0
#pod 'AFNetworking', '~>0.1′ //使用大于等于0.1但小于1.0的版本
#pod 'AFNetworking', '~>0′ //高于0的版本晶框,寫這個(gè)限制和什么都不寫是一個(gè)效果排抬,都表示使用最新版本

在學(xué)習(xí)CocoaPods和書寫這篇博文的過程我大量參考了唐巧的博客這篇博文懂从,大家也可以在唐巧的博客中學(xué)習(xí)到更多的內(nèi)容,也可以去往官方學(xué)習(xí)
深入理解 CocoaPodsCocoaPods最佳實(shí)踐探討

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蹲蒲,一起剝皮案震驚了整個(gè)濱河市番甩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌届搁,老刑警劉巖缘薛,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異卡睦,居然都是意外死亡宴胧,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門表锻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來恕齐,“玉大人,你說我怎么就攤上這事瞬逊∠云纾” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵确镊,是天一觀的道長士骤。 經(jīng)常有香客問我,道長蕾域,這世上最難降的妖魔是什么拷肌? 我笑而不...
    開封第一講書人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮束铭,結(jié)果婚禮上廓块,老公的妹妹穿的比我還像新娘。我一直安慰自己契沫,他們只是感情好带猴,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著懈万,像睡著了一般拴清。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上会通,一...
    開封第一講書人閱讀 51,541評(píng)論 1 305
  • 那天口予,我揣著相機(jī)與錄音,去河邊找鬼涕侈。 笑死沪停,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播木张,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼众辨,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了舷礼?” 一聲冷哼從身側(cè)響起鹃彻,我...
    開封第一講書人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎妻献,沒想到半個(gè)月后蛛株,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡育拨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年谨履,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片至朗。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡屉符,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出锹引,到底是詐尸還是另有隱情,我是刑警寧澤唆香,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布嫌变,位于F島的核電站,受9級(jí)特大地震影響躬它,放射性物質(zhì)發(fā)生泄漏腾啥。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一冯吓、第九天 我趴在偏房一處隱蔽的房頂上張望倘待。 院中可真熱鬧,春花似錦组贺、人聲如沸凸舵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽啊奄。三九已至,卻和暖如春掀潮,著一層夾襖步出監(jiān)牢的瞬間菇夸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來泰國打工仪吧, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留庄新,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像择诈,于是被迫代替她去往敵國和親械蹋。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

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

  • 一. CocoaPods的介紹 什么是CocoaPods吭从?CocoaPods是一個(gè)負(fù)責(zé)管理iOS項(xiàng)目中第三方開源庫...
    輝712閱讀 3,926評(píng)論 0 7
  • CocoaPods 是什么朝蜘? CocoaPods 是一個(gè)負(fù)責(zé)管理 iOS 項(xiàng)目中第三方開源庫的工具。CocoaPo...
    朝洋閱讀 25,679評(píng)論 3 51
  • #華為隱喻100則#第十七則 歪瓜裂棗的字面意思 歪瓜:臍是歪的或長得不圓的西瓜涩金;裂棗:就是棗子表面平滑有裂痕的大...
    Y先生說閱讀 974評(píng)論 0 1
  • 2017.7.12正在睡夢的自己被叫醒谱醇,明白過后方知,鬧鐘不會(huì)響步做,睡過頭了副渴。急急忙忙,一路狂奔全度,最后還是錯(cuò)過了提前...
    些幾閱讀 309評(píng)論 0 0
  • 遇見天使的指紋閱讀 431評(píng)論 0 0