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

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

目錄

更新記錄

CocoaPods簡(jiǎn)介

常用命令一覽

一、CocoaPods 的安裝

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

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

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

三、遭遇到的問題

四、原理和說明

五、更多

1、pod install提速
2、關(guān)于Podfile文件編輯時(shí),第三方庫(kù)版本號(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簡(jiǎn)介

每種語(yǔ)言發(fā)展到一個(gè)階段,就會(huì)出現(xiàn)相應(yīng)的依賴管理工具,例如Java語(yǔ)言的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)目不可避免地要使用第三方開源庫(kù),CocoaPods的出現(xiàn)使得我們可以節(jié)省設(shè)置和更新第三方開源庫(kù)的時(shí)間。
在我開發(fā)猿題庫(kù)客戶端時(shí),其使用了24個(gè)第三方開源庫(kù)。在沒有使用CocoaPods以前,我需要:
把這些第三方開源庫(kù)的源代碼文件復(fù)制到項(xiàng)目中,或者設(shè)置成git的submodule。
對(duì)于這些開源庫(kù)通常需要依賴系統(tǒng)的一些framework,我需要手工地將這些framework一一增加到項(xiàng)目依賴中,比如通常情況下,一個(gè)網(wǎng)絡(luò)庫(kù)就需要增加以下framework: CFNetwork, SystemConfiguration, MobileCoreServices, CoreGraphics, zlib。
對(duì)于某些開源庫(kù),我還需要設(shè)置-licucore或者 -fno-objc-arc等編譯參數(shù)管理這些依賴包的更新。
這些體力活雖然簡(jiǎn)單,但毫無技術(shù)含量并且浪費(fèi)時(shí)間。在使用CocoaPods之后,我只需要將用到的第三方開源庫(kù)放到一個(gè)名為Podfile的文件中,然后執(zhí)行pod install。CocoaPods就會(huì)自動(dòng)將這些第三方開源庫(kù)的源碼下載下來,并且為我的工程設(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切換到國(guó)內(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倉(cāng)庫(kù)
    pod setup
6.測(cè)試
    【如果有版本號(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庫(kù)和程序的標(biāo)準(zhǔn)包,它通過Ruby Gem(如 http://rubygems.org/ )源來查找、安裝、升級(jí)和卸載軟件包

// 1.移除掉原有的源(服務(wù)器在國(guó)外,速度較慢)
- gem sources --remove https://rubygems.org/
// 2.等有反應(yīng)之后再敲入以下命令(添加國(guó)內(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 的源為國(guó)內(nèi)源.png
2、更新升級(jí) Gem 版本

Gem是管理Ruby庫(kù)和程序的標(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鏡像為國(guó)內(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索引庫(kù)的鏡像,因?yàn)間itcafe和oschina都是國(guó)內(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(開源中國(guó)較慢)
4.1-移除原有的 repo 鏡像服務(wù)器.png

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

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

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

1、新建 Podfile 文件

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

//進(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)入第三方庫(kù)的信息和一個(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、第三方庫(kù)更新

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


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

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

當(dāng)你運(yùn)行pod outdated命令,CocoaPods會(huì)列出那些所有較Podfile.lock里面有新版本的庫(kù)(那些當(dāng)前被安裝著的庫(kù)的版本)。這個(gè)意思就是,如果你運(yùn)行pod update PODNAME,如果這個(gè)庫(kù)有新的版本,并且新版本仍然符合在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、第三方庫(kù)會(huì)被編譯成.a靜態(tài)庫(kù)供我們真正的工程使用。

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

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

為了方便我們直觀的管理工程和第三方庫(kù),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倉(cāng)庫(kù)。這是一個(gè)比較耗時(shí)的操作。在確認(rèn)spec版本庫(kù)不需要更新時(shí),給這兩個(gè)命令加一個(gè)參數(shù)跳過spec版本庫(kù)更新,可以明顯提高這兩個(gè)命令的執(zhí)行速度。

pod install --verbose --no-repo-update
pod update --verbose --no-repo-update
2、關(guān)于Podfile文件編輯時(shí),第三方庫(kù)版本號(hào)的各種寫法
#pod 'AFNetworking' //不顯式指定依賴庫(kù)版本,表示每次都獲取最新版本
#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)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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

友情鏈接更多精彩內(nèi)容