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 install 和 pod 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

2、更新升級(jí) Gem 版本
Gem是管理Ruby庫(kù)和程序的標(biāo)準(zhǔn)包,如果它的版本過低也可能導(dǎo)致安裝失敗,解決方案自然是升級(jí)Gem,執(zhí)行下述命令即可:
// 更新升級(jí)gem
- sudo gem update --system


3、安裝CocoaPods
// 安裝CocoaPods(OS X 10.11以前)
- sudo gem install cocoapods
// 安裝CocoaPods(10.11后蘋果升級(jí)了安全策略)
- sudo gem install -n /usr/local/bin cocoapods


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ó)較慢)



二、CocoaPods 的使用(圖和文字有細(xì)微的出入)
1、新建 Podfile 文件
使用時(shí)需要在你的項(xiàng)目根目錄下新建一個(gè)名為Podfile的文件,將依賴的庫(kù)名字依次列在文件中即可
//進(jìn)入你的工程目錄
$ cd /Users/peikua/Desktop/CocoaPodsDemo
//創(chuàng)建Pods文件
$ touch Podfile

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


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指令
- pod install
6、pod install 和 pod update 的區(qū)別。
首先 podfile.lock 和 podfile 必須加入版本控制。
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.lock 的 repo 不會(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ì)更新其依賴。
三、遭遇到的問題


//以后使用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 install和pod 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í)踐探討



