(五)pod install vs. pod update

1晋渺、背景:

許多人似乎認(rèn)為 pod install 只在第一次使用 CocoaPods 設(shè)置項(xiàng)目時(shí)使用窄驹,之后才使用 pod update 。但事實(shí)并非如此博烂。


2香椎、事實(shí)上:

  • pod install :即使你已經(jīng)有 Podfile 文件并曾經(jīng)執(zhí)行過 pod install ,只要當(dāng)你在 Podfile 文件中 add/remoe/update pods 的時(shí)候禽篱,都需要通過執(zhí)行 pod install 來 install new pods 畜伐。
  • pod update [PODNAME] :只有當(dāng)你希望將 pods 更新到一個(gè)更新的版本的時(shí)候,才執(zhí)行此命令谆级。
  • pod update [PODNAME] :將 [PODNAME] 更新到可能的最新版本(只要它匹配您的 Podfile 中的版本限制)烤礁;
  • pod update :能夠?qū)⑺?pods 更新到可能的最新版本(只要它匹配您的 Podfile 中的版本限制)讼积。

3、命令的詳細(xì)說明:

(1)pod install :

  • 每次執(zhí)行 pod install 脚仔,都會(huì)將 add/remove/update 的 pods 的版本號(hào)寫入 Podfile.lock 文件中勤众,該文件跟蹤每個(gè)pod的安裝版本并鎖定這些版本。
  • 運(yùn)行 pod install 時(shí)鲤脏,它只解決 Podfile.lock 中沒有列出的 pod 的依賴關(guān)系们颜。
  • 對(duì)于 Podfile.lock 中列出的 pod ,它下載 Podfile.lock 中列出的顯式版本猎醇,而不嘗試檢查是否有更新的版本可用窥突。
  • 對(duì)于 Podfile.lock 中沒有列出的 pod ,它會(huì)搜索匹配 Podfile 中描述的版本(比如 pod 'MyPod'硫嘶, '~>1.2')

(2)pod outdated:

當(dāng)您運(yùn)行 pod outdated 時(shí)阻问, CocoaPods 將列出所有比 Podfile.lock 中記錄的 pod 版本更新的版本。這意味著如果您在這些 pod 上運(yùn)行 pod update [PODNAME] 沦疾,它們將被更新——只要新版本仍然符合這些限制称近。
比如在 Podfile 文件中設(shè)置 pod 'MyPod', '~>0.1.2'

  • 執(zhí)行 pod outdated [PODNAME] 哮塞,檢測出更新版本 0.1.4 刨秆;
    再執(zhí)行 pod update [PODNAME] ,會(huì)將 [PODNAME] 更新至 0.1.4 版本忆畅。
  • 執(zhí)行 pod outdated [PODNAME] 衡未,檢測出更新版本 0.3.1
    再執(zhí)行 pod update [PODNAME] 家凯,則不會(huì)將 [PODNAME] 更新至 0.3.1 版本缓醋,而是更新至最靠近 0.2 的版本。

(3)pod update:

運(yùn)行 pod update [PODNAME]時(shí)绊诲, CocoaPods 將嘗試找到 pod [PODNAME] 的更新版本改衩,而不考慮 Podfile.lock 中列出的版本。它將把 pod 更新到可能的最新版本(只要它匹配您的 Podfile 中的版本限制)驯镊。
如果運(yùn)行沒有 pod 名稱的 pod update , CocoaPods 會(huì)將 Podfile 中列出的每個(gè) pod 更新到可能的最新版本。


4竭鞍、場景示例:

Stage 1: User1 creates the project :

user1 創(chuàng)建一個(gè)項(xiàng)目板惑,并希望使用 pods A、B偎快、C 冯乘。他們用這些 pod 創(chuàng)建一個(gè) Podfile ,并運(yùn)行 pod install晒夹。

這將安裝 pods A裆馒、B姊氓、C ,我們將說它們都在 1.0.0 版本中喷好。
Podfile.lock 將跟蹤這一點(diǎn)翔横,并注意 A、B梗搅、C 都安裝為 1.0.0 版本禾唁。

  • 順便說一句,因?yàn)檫@是他們第一次運(yùn)行 pod install , pod.xcodeproj 項(xiàng)目還不存在无切,該命令還將創(chuàng)建 Pods.xcodeproj 和 .xcworkspace 荡短,但這是命令的副作用,而不是它的主要作用哆键。

Stage 2: User1 adds a new pod :

稍后掘托, user1 希望將 pod D 添加到他們的 Podfile 中。
他們應(yīng)該執(zhí)行 pod install 命令籍嘹,這樣即使 pod B 發(fā)布了一個(gè)版本 1.1.0 闪盔, 命令運(yùn)行以后,pod B 也將繼續(xù)使用之前已經(jīng)安裝的版本 1.0.0 —— 因?yàn)?user1 只想添加 pod D ,也不用擔(dān)心意外更新 pod B噩峦。

  • 這就是有些人錯(cuò)誤的地方锭沟,因?yàn)樗麄冊谶@里使用 pod update ,他們可能認(rèn)為這是“我想用新的pods 更新我的項(xiàng)目” 识补;而不是使用 pod install 族淮,在項(xiàng)目中安裝新的 pods 。

Stage 3: User2 joins the project :

然后從未參與過該項(xiàng)目的 user2 加入了團(tuán)隊(duì)凭涂。他們克隆存儲(chǔ)庫祝辣,然后使用 pod install
Podfile.lock 的內(nèi)容(應(yīng)該提交到 git repo )將確保它們得到完全相同的 pods 切油,具有與 user1 使用的完全相同的版本蝙斜。
即使 pod C1.2.0 版本現(xiàn)在可用,user2 也將在 1.0.0 版本中獲得 pod C澎胡。因?yàn)檫@是在podfile.lock 中注冊的孕荠。 pod CPodfile.lock鎖定到 1.0.0版本。

Stage 4: Checking for new versions of a pod :

稍后攻谁, user1 想要檢查這些 pods 是否有可用的更新稚伍。他們運(yùn)行 pod outdated ,這將告訴他們 pod B 有一個(gè)新的版本 1.1.0 戚宦,而 pod C 有一個(gè)新的版本 1.2.0 个曙。
user1 決定更新 pod B ,但不更新 pod C ; 因此受楼,他們將運(yùn)行 pod update B 垦搬,它將把 B 從版本 1.0.0 更新到版本 1.1.0 (并更新 Podfile.lock )呼寸,但是將保持 pod C1.0.0 版本中(并且不會(huì)更新到 1.2.0 )。


5猴贰、在 Podfile 中使用精確的版本就夠了嗎对雪?

有些人可能認(rèn)為,通過在 Podfile 中指定 pods 的確切版本糟趾,比如 pod 'A'慌植、'1.0.0' ,就足以確保每個(gè)用戶都擁有與團(tuán)隊(duì)中其他人相同的版本义郑。

然后他們甚至可能使用 pod update 蝶柿,即使只是添加一個(gè)新的 pod ,他們也會(huì)認(rèn)為更新其他 pod 永遠(yuǎn)不會(huì)有風(fēng)險(xiǎn)非驮,因?yàn)樗鼈児潭ㄔ?Podfile 中的特定版本上交汤。

但實(shí)際上,這并不足以保證上面場景中的 user1 和 user2 將始終獲得所有 pod 的完全相同版本劫笙。

一個(gè)典型的例子是芙扎,如果 pod A 依賴于在 A.podspec 中聲明的 pod 'A2', '~> 3.0' 填大。在這種情況下戒洼,在您的 Podfile 中使用 pod 'A', '1.0.0' 確實(shí)會(huì)迫使 user1 和 user2 同時(shí)使用 pod A1.0.0 版本允华,但是:

user1 可能最終在 3.4 版本中使用 pod A2 (因?yàn)槟鞘钱?dāng)時(shí) A2 的最新版本)
當(dāng) user2 稍后在加入項(xiàng)目時(shí)運(yùn)行 pod install 時(shí)圈浇,他們可能在 3.5 版本中獲得 pod A2 (因?yàn)?A2 的維護(hù)人員可能同時(shí)發(fā)布了一個(gè)新版本)。


小結(jié):

\color{red}{確保每個(gè)團(tuán)隊(duì)成員使用每個(gè)計(jì)算機(jī)上所有pod的相同版本的惟一方法?}

是使用 Podfile.lock 并正確使用 pod install vs. pod update 靴寂。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末磷蜀,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子百炬,更是在濱河造成了極大的恐慌褐隆,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,000評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件剖踊,死亡現(xiàn)場離奇詭異庶弃,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)德澈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門虫埂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人圃验,你說我怎么就攤上這事》炫唬” “怎么了澳窑?”我有些...
    開封第一講書人閱讀 168,561評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵斧散,是天一觀的道長。 經(jīng)常有香客問我摊聋,道長鸡捐,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,782評(píng)論 1 298
  • 正文 為了忘掉前任麻裁,我火速辦了婚禮箍镜,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘煎源。我一直安慰自己色迂,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評(píng)論 6 397
  • 文/花漫 我一把揭開白布手销。 她就那樣靜靜地躺著歇僧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪锋拖。 梳的紋絲不亂的頭發(fā)上诈悍,一...
    開封第一講書人閱讀 52,394評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音兽埃,去河邊找鬼侥钳。 笑死,一個(gè)胖子當(dāng)著我的面吹牛柄错,可吹牛的內(nèi)容都是我干的舷夺。 我是一名探鬼主播,決...
    沈念sama閱讀 40,952評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼鄙陡,長吁一口氣:“原來是場噩夢啊……” “哼冕房!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起趁矾,我...
    開封第一講書人閱讀 39,852評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤耙册,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后毫捣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體详拙,經(jīng)...
    沈念sama閱讀 46,409評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評(píng)論 3 341
  • 正文 我和宋清朗相戀三年蔓同,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片斑粱。...
    茶點(diǎn)故事閱讀 40,615評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡弃揽,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情矿微,我是刑警寧澤痕慢,帶...
    沈念sama閱讀 36,303評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站涌矢,受9級(jí)特大地震影響掖举,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜娜庇,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評(píng)論 3 334
  • 文/蒙蒙 一塔次、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧名秀,春花似錦励负、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至耗跛,卻和暖如春裕照,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背调塌。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評(píng)論 1 272
  • 我被黑心中介騙來泰國打工晋南, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人羔砾。 一個(gè)月前我還...
    沈念sama閱讀 49,041評(píng)論 3 377
  • 正文 我出身青樓负间,卻偏偏與公主長得像,于是被迫代替她去往敵國和親姜凄。 傳聞我的和親對(duì)象是個(gè)殘疾皇子政溃,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評(píng)論 2 359

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