參考文章:
http://www.reibang.com/p/f23f46befbce
http://www.reibang.com/p/da635f885172
http://www.reibang.com/p/1d058d224cad
http://www.reibang.com/p/101d4915dd34
https://blog.csdn.net/ShorewB/article/details/52207569
cocoapods現(xiàn)在幾乎成了iOS開(kāi)發(fā)的標(biāo)配工具之一吴侦,可以統(tǒng)一屋休、高效的引入和管理第三方庫(kù),下面記錄一下cocoapods使用時(shí)對(duì)我來(lái)說(shuō)比較模糊的幾個(gè)點(diǎn),首先從安裝開(kāi)始,安裝的過(guò)程沒(méi)有什么好講的,網(wǎng)上的資料一抓好多巴.
1. spec資源所有庫(kù)的配置信息
-
在cocoapods安裝完成以后,在用戶(hù)根目錄下有個(gè)隱藏文件夾,
/Users/<user>/.cocoapods
.
.cocoapods文件夾 -
而
/Users/<user>/.cocoapods/repos/master/Specs/
里面是cocoapods收錄的所有庫(kù)的配置信息.Specs目錄下备韧,并不是直接是以庫(kù)的名稱(chēng)命名的文件夾劫樟,而是分了3層目錄,分別以0-f來(lái)命名,比如SDWebImage的配置文件位置就是/Users/<user>/.cocoapods/repos/master/Specs/1/1/7/SDWebImage
织堂,
SDWebImage位置.png 這里為什么會(huì)分為三層目錄,是根據(jù)什么劃分的呢?其實(shí)這里是把某個(gè)庫(kù)的名稱(chēng)做了md5叠艳,md5前三位是其所對(duì)應(yīng)的三層目錄,比如SDWebImage的md5是
1173B6117A2CF4A6756F761AEDAE9D2C
,那么其目錄結(jié)構(gòu)就是1/1/7.-
Spec內(nèi)的框架每一個(gè)版本內(nèi)并不是具體的代碼,而是一個(gè)json文件,里面記錄這該框架當(dāng)前選中的版本的詳細(xì)信息,包括作者捧挺、github位置....等等.
json文件
2.關(guān)于版本指定約束
- 一般我們?cè)谑褂胏ocoapods導(dǎo)入第三方庫(kù)前都會(huì)生成一個(gè)podfile文件,文件中記錄著我們要導(dǎo)入的第三方庫(kù)以及對(duì)應(yīng)的版本信息,比如:
pod 'SDWebImage', '~> 4.3.2'
這里的意思是指:讓cocoapods導(dǎo)入SDWbImage框架,版本號(hào)4.3.2和版本號(hào)處于4.3.2-4.4之間的,不包括4.4和更高版本.
所以要想cocoapods導(dǎo)入的框架是我們想要的,必須了解一下版本制定的約束
-
pod ‘ SDWebImage’
--- 不指定版本虑绵,表示希望使用最新版本 -
pod 'SDWebImage', '4.3.2'
--- 指定明確版本,表示只想要這個(gè)版本 - 邏輯關(guān)系
'> 0.1'
--- 版本號(hào)大于0.1的
‘>= 0.1’
--- 版本0.1和版本號(hào)大于0.1的
'< 0.1'
--- 版本號(hào)小于0.1的
‘<= 0.1'
--- 版本號(hào)0.1和版本號(hào)小于0.1的 - 最優(yōu)匹配
‘~> 0.1.2'
--- 版本0.1.2和版本號(hào)處于0.1.2-0.2之間的,不包括0.2和更高版本
‘~> 0.1'
--- 版本0.1和版本號(hào)處于0.1-1.0之間的,不包括1.0和更高版本
‘~> 0'
--- 版本0和更高闽烙,和沒(méi)設(shè)沒(méi)啥區(qū)別
3.pod install翅睛、pod update
pod install
:執(zhí)行該命令時(shí),如果Podfile.lock
文件存在, 則直接從此文件中讀取框架信息并且它會(huì)只下載Podfile.lock
文件中指定的版本安裝黑竞。對(duì)于不在Podfile.lock
文件中的pod庫(kù)捕发,pod install
命令會(huì)搜索這個(gè)pod庫(kù)在Podfile文件中指定的版本來(lái)安裝,安裝完畢更新Podfile.lock
文件;如果Podfile.lock不存在, 則會(huì)讀取Podfile文件內(nèi)的框架信息很魂,然后執(zhí)行下載并且根據(jù)下載好的框架信息, 生成Podfile.lock文件.
pod update
:只有當(dāng)你想要更新pod庫(kù)的版本時(shí)才使用pod update
扎酷;它不管Podfile.lock
是否存在, 都會(huì)讀取Podfile文件的的框架信息去下載安裝,下載好之后, 再根據(jù)下載好的框架信息, 生成Podfile.lock
文件.
總結(jié):
不管是否是第一次向項(xiàng)目中導(dǎo)入pod庫(kù),只要項(xiàng)目中添加或移除pod庫(kù),都要調(diào)用pod install
,只有當(dāng)你想要更新pod庫(kù)的版本時(shí)才使用pod update
.
4.pod repo update 遏匆、 pod install --no-repo-update
還記得上面的spec資源配置文件嘛,這兩個(gè)指令是與資源配置文件相關(guān)的,而且它們是作用是相對(duì)
的.
pod repo update
: 更新整個(gè).cocoapods下的所有庫(kù)的配置文件,挨個(gè)檢查對(duì)應(yīng)的框架有沒(méi)有新版本發(fā)布,有的話(huà)更新本地的資源配置文件.
--no-repo-update
:跳過(guò)檢查框架有沒(méi)有新版本發(fā)布的環(huán)節(jié),一般配合pod install
使用.
pod install --no-repo-update
:根據(jù)podfile
文件或者podfile.lock
下載并導(dǎo)入對(duì)應(yīng)的第三方庫(kù),跳過(guò)檢查資源配置文件是否需要更新的環(huán)節(jié).