cocoapods 一次升級(jí)操作

背景

pods repo倉(cāng)庫(kù)是同事下載到本地的集惋,有次開(kāi)發(fā)需要升級(jí)阿里云視頻sdk,但是網(wǎng)絡(luò)不太好瓶佳,pod repo update 總失敗芋膘,專(zhuān)門(mén)升級(jí)個(gè)別庫(kù)也有問(wèn)題鳞青,去pods repo 庫(kù) 執(zhí)行g(shù)it pull 也無(wú)用霸饲,所以,重新下載pods repo倉(cāng)庫(kù)到本地

手動(dòng)下載pods repo 庫(kù)的方法

  • 1.訪問(wèn)

https://github.com/CocoaPods/Specs臂拓,然后將Specs項(xiàng)目fork到自己的github賬戶上

  • 2.下載GitHub Desktop, 然后clone Specs項(xiàng)目厚脉。

  • 3.將clone的Specs項(xiàng)目的文件夾改名為master,然后拖到/Users/用戶名/.cocoapods/repos目錄下胶惰。

  • 4.運(yùn)行pod setup

解釋?zhuān)簆od setup的本質(zhì)就是將https://github.com/CocoaPods/Specs上的Specs項(xiàng)目clone到/Users/用戶名/.cocoapods/repos目錄下傻工。若此目錄下已有Specs項(xiàng)目,則會(huì)將項(xiàng)目更新到最新的狀態(tài)孵滞。由于Specs很大中捆,容易導(dǎo)致pod setup失敗。這時(shí)就需要我們手動(dòng)安裝Specs坊饶。若直接從github上下載zip文件泄伪,由于缺少git文件,會(huì)導(dǎo)致cocoa pods不使用匿级。若用git clone蟋滴,由于文件過(guò)大染厅,容易導(dǎo)致失敗。但是使用GitHub Desktop軟件津函,則會(huì)提高clone的成功率肖粮,并且會(huì)給出clone的進(jìn)度。

關(guān)于podfile 和 podfile.lock 中 庫(kù)的版本問(wèn)題

一直使用新的版本

//不用指定版本
pod 'SSZipArchive'

指定版本

pod 'SSZipArchive'

其他版本的原理

'> 0.1' 高于0.1的任何版本
'>= 0.1' 版本0.1或更高版本
'< 0.1' 低于0.1的任何版本
'<= 0.1' 版本0.1或更低的版本
除了邏輯運(yùn)算符尔苦,還有一種運(yùn)算符:

'~> 0.1.2' 版本0.1.2和0.2版本之間的任意版本,不包括0.2和比0.2更高的版本
'~> 0.1' 版本0.1和版本1.0之間的任意版本,不包括1.0和比1.0更高的版本
'~> 0' 版本0或比版本0更高的版本,這基本上和不指定版本號(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的版本  
pod 'AFNetworking', '~>0.1'     //使用大于等于0.1但小于1.0的版本  
pod 'AFNetworking', '~>0'     //高于0的版本蕉堰,寫(xiě)這個(gè)限制和什么都不寫(xiě)是一個(gè)效果凌净,都表示使用最新版本 

使用本地文件夾內(nèi)的一個(gè)庫(kù)

前提是本地的庫(kù)是可供pods管理的,也就是該庫(kù)中要有xxx.podspec

然后執(zhí)行pod install后 本地的庫(kù)會(huì)管理在pods - Development pods 下

關(guān)于pods中相關(guān)文件

Podfile

CocoaPods是用ruby實(shí)現(xiàn)的屋讶,因此Podfile文件的語(yǔ)法就是ruby的語(yǔ)法冰寻。
podfile是一個(gè)說(shuō)明文件,用以描述管理一個(gè)或者多個(gè)Xcode project的target的依賴庫(kù)皿渗。這個(gè)文件應(yīng)該且必須被命名為Podfile

podspec文件

后綴名為podspec(cocoapods specification)的文件是cocoapods的說(shuō)明文件斩芭,該文件為Pods依賴庫(kù)的描述文件,每個(gè)Pods依賴庫(kù)必須有且僅有那么一個(gè)描述文件乐疆。該文件包括依賴庫(kù)的名字划乖、版本、描述挤土、license琴庵、author、source仰美、platform等信息迷殿。

Podfile.lock

這是 CocoaPods 創(chuàng)建的最重要的文件之一。它記錄了需要被安裝的 pod 的每個(gè)已安裝的版本咖杂。如果你想知道已安裝的 pod 是哪個(gè)版本庆寺,可以查看這個(gè)文件。推薦將 Podfile.lock 文件加入到版本控制中诉字,這有助于整個(gè)團(tuán)隊(duì)的一致性懦尝。Objc中國(guó)
Podfile.lock文件最大得用處在于多人開(kāi)發(fā)。當(dāng)團(tuán)隊(duì)中的某個(gè)人執(zhí)行完pod install命令后壤圃,生成的Podfile.lock文件就記錄下了當(dāng)時(shí)最新Pods依賴庫(kù)的版本陵霉,這時(shí)團(tuán)隊(duì)中的其它人check下來(lái)這份包含Podfile.lock文件的工程以后,再去執(zhí)行pod install命令時(shí)伍绳,獲取下來(lái)的Pods依賴庫(kù)的版本就和最開(kāi)始用戶獲取到的版本一致踊挠。如果沒(méi)有Podfile.lock文件,后續(xù)所有用戶執(zhí)行pod install命令都會(huì)獲取最新版本的依賴庫(kù)墨叛,這就有可能造成同一個(gè)團(tuán)隊(duì)使用的依賴庫(kù)版本不一致止毕,這對(duì)團(tuán)隊(duì)協(xié)作來(lái)說(shuō)絕對(duì)是個(gè)災(zāi)難模蜡!在這種情況下,如果團(tuán)隊(duì)想使用當(dāng)前最新版本的依賴庫(kù)扁凛,有兩種方案:

1.更改Podfile忍疾,使其指向最新版本的依賴庫(kù);
2.執(zhí)行pod update命令谨朝;
當(dāng)執(zhí)行pod install 命令時(shí)卤妒,首先會(huì)根據(jù)Podfile文件指定的內(nèi)容,安裝依賴庫(kù)字币,如果有Podfile.lock文件而且對(duì)應(yīng)的Podfile文件未被修改则披,則會(huì)根據(jù)Podfile.lock文件指定的版本安裝。
每次更新了Podfile文件時(shí)洗出,都需要重新執(zhí)行pod install命令士复,以便重新安裝Pods依賴庫(kù)。
當(dāng)執(zhí)行pod update命令時(shí)翩活,如果Podfile中指定的依賴庫(kù)版本不是寫(xiě)死的阱洪,當(dāng)對(duì)應(yīng)的依賴庫(kù)有了更新,無(wú)論有沒(méi)有Podfile.lock文件菠镇,都會(huì)去獲取Podfile文件描述的允許獲取到的最新依賴庫(kù)版本冗荸。

關(guān)于pods一些命令原理

pod repo update

先說(shuō)一下pod官方庫(kù)

終端 cd ~/.cocoapods/repos/

進(jìn)入該文件夾下可以發(fā)現(xiàn)一個(gè)master/文件夾,繼續(xù)進(jìn)Specs/,會(huì)發(fā)現(xiàn)很多很多以數(shù)字命名的文件夾利耍,這里其實(shí)就是官方管理所有pod庫(kù)的一個(gè)資源庫(kù)蚌本,如果一直cd,進(jìn)到最底層隘梨,會(huì)發(fā)現(xiàn)其實(shí)到最后是每一個(gè)庫(kù)的.podspec.json程癌,這里涉及到.podspec是一個(gè)什么東西,以及關(guān)于pod庫(kù)的制作出嘹,可以自行查閱資料席楚。

我們平時(shí)開(kāi)發(fā)pod update或者pod install , 這里其實(shí) pod的工作就是根據(jù)pod庫(kù)名在master/Specs/中找到對(duì)應(yīng)的庫(kù)咬崔,若指定版本則找到指定版本的podspec,否則找最高版本的podspec税稼,找到后根據(jù)podsepc文件中的配置下載指定的庫(kù)資源。

那么pod repo update 的工作就是更新pod資源目錄垮斯,也就是master下的資源郎仆,簡(jiǎn)單說(shuō) 如果有一個(gè)第三方庫(kù)發(fā)布了一個(gè)最新的版本,如果你不執(zhí)行pod repo update兜蠕,那么你的本地是不會(huì)知道有一個(gè)最新版本的扰肌,還會(huì)一直以你本地的資源目錄為準(zhǔn)。那么你永遠(yuǎn)都拿不到這個(gè)庫(kù)的最新版本熊杨。

可能有些人會(huì)問(wèn)了曙旭,我平時(shí)從來(lái)不會(huì)用pod repo update也可以拿到最新的庫(kù)盗舰,那是因?yàn)樵谑褂胮od update是默認(rèn)會(huì)執(zhí)行一遍pod repo update ,所以會(huì)發(fā)現(xiàn)如果你的pod庫(kù)引用多了桂躏,每次pod update都很慢钻趋,網(wǎng)絡(luò)如果不好更是經(jīng)常會(huì)斷掉,就是因?yàn)槟阍诟聀od時(shí)剂习,也更新了資源目錄

pod update 工作流程 :
先拉取遠(yuǎn)程最新目錄蛮位,再根據(jù)目錄中的資源重新更新一遍pod

如果你的podfile中每個(gè)庫(kù)都指定了版本還好,如果沒(méi)有鳞绕,那么每次都是拉一遍最新庫(kù)失仁, 這時(shí)候就要用到命令

pod update --no-repo-update
這條命令表示只根據(jù)本地目錄更新庫(kù),不需要拉取遠(yuǎn)程

再說(shuō)一下有些時(shí)候會(huì)引用一些私有庫(kù) 们何, pod repo update 會(huì)把 ~/.cocoapods/repos/這個(gè)目錄下所有的資源庫(kù)目錄都更新一遍萄焦,有時(shí)候不想更新master,只想更新某個(gè)具體的私有庫(kù)怎么辦冤竹。楷扬。命令。贴见。烘苹。強(qiáng)大而又實(shí)用

pod repo update ~/.cocoapods/repos/***/
需要更新哪個(gè)就指定哪個(gè)文件夾就可以了

關(guān)于pods中的一些問(wèn)題

cocoaPods was not able to update the master repo

先刪除全局的緩存:
sudo rm -fr ~/Library/Caches/CocoaPods/
sudo rm -fr ~/.cocoapods/repos/master/

終極大招
sudo rm -fr Pods/

再執(zhí)行
sudo gem install cocoapods
pod setup

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市片部,隨后出現(xiàn)的幾起案子镣衡,更是在濱河造成了極大的恐慌,老刑警劉巖档悠,帶你破解...
    沈念sama閱讀 221,695評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件廊鸥,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡辖所,警方通過(guò)查閱死者的電腦和手機(jī)惰说,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)缘回,“玉大人吆视,你說(shuō)我怎么就攤上這事∷盅纾” “怎么了啦吧?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,130評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)拙寡。 經(jīng)常有香客問(wèn)我授滓,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,648評(píng)論 1 297
  • 正文 為了忘掉前任般堆,我火速辦了婚禮在孝,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘淮摔。我一直安慰自己浑玛,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布噩咪。 她就那樣靜靜地躺著顾彰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪胃碾。 梳的紋絲不亂的頭發(fā)上涨享,一...
    開(kāi)封第一講書(shū)人閱讀 52,268評(píng)論 1 309
  • 那天,我揣著相機(jī)與錄音仆百,去河邊找鬼厕隧。 笑死,一個(gè)胖子當(dāng)著我的面吹牛俄周,可吹牛的內(nèi)容都是我干的吁讨。 我是一名探鬼主播,決...
    沈念sama閱讀 40,835評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼峦朗,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼建丧!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起波势,我...
    開(kāi)封第一講書(shū)人閱讀 39,740評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤翎朱,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后尺铣,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體拴曲,經(jīng)...
    沈念sama閱讀 46,286評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評(píng)論 3 340
  • 正文 我和宋清朗相戀三年凛忿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了澈灼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,505評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡店溢,死狀恐怖叁熔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情逞怨,我是刑警寧澤者疤,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布福澡,位于F島的核電站叠赦,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜除秀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評(píng)論 3 333
  • 文/蒙蒙 一糯累、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧册踩,春花似錦泳姐、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,357評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至慕的,卻和暖如春阎肝,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背肮街。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,466評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工风题, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人嫉父。 一個(gè)月前我還...
    沈念sama閱讀 48,921評(píng)論 3 376
  • 正文 我出身青樓沛硅,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親绕辖。 傳聞我的和親對(duì)象是個(gè)殘疾皇子摇肌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評(píng)論 2 359

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