CocoaPods 系列(二)—— pod install vs. pod update

介紹

很多人使用 CocoaPods 的時候可能會以為第一次是用 pod install 安裝配置工程,之后都是用pod update ,但其實不是這樣。

這篇文章的目的是為了解釋 pod installpod update正確的使用時機。

TL;DR:

  • 如果你是第一次安裝 pods ,或者你在 Podfile 中新增/移除了 pods, 使用 pod install 命令安裝 pods 。
  • 在更新新版本的 pods 時,使用 pod update [PODNAME]

命令詳情

小提示:使用installupdate 的詞匯并不是 CocoaPods 想出來的。靈感來源于其他語言的依賴管理,比如 bundlerRubyGemscomposer 等,它們跟 CocoaPods 有著很多相似的命令,意圖也相同。

pod install

在第一次安裝 pods 的使用該命令,但也可以在每次往 Podfile中新增,修改 ,移除 pods 的時候使用。

  • 每次執(zhí)行 pod install 命令 —— 下載并安裝新的 pods —— 根據(jù) Podflie.lock 文件的版本來安裝對應(yīng)的 pod。
  • 當執(zhí)行 pod install 時,只解決沒有在 Podfile.lock 里列出的 pods。
    • 如果在 Podfile.lock 列表中,會先下載 Podfile.lock 中顯示指定的版本,而不會試圖安裝新版本。
    • 如果不在 Podfile.lock 列表中,會搜索在 Podfile 文件列表中指定的版本(就像 pod ‘MyPod’, ‘~>1.2’

pod outdated

當執(zhí)行 pod outdated, CocoaPods 會列出 Podfile.lock 中所有新版本的 pods。這意味著如果你執(zhí)行 pod update PODNAME,這些 pods 會被更新到 Podfile 文件里面所指定的能夠升級的最高版本,形如:pod 'MyPod', '~>x.y’

Podfile 版本約束規(guī)則可以參考這里

pod update

當執(zhí)行 pod update PODNAME時,Cocoapods 會查找 PODNAME 新的版本,忽略 Podfile.lock 中鎖定的版本號。將 pods 升級到最高版本,不過仍會受到 Podfile 中指定的版本約束。

如果執(zhí)行 pod update 沒有指定名字, CocoaPods 會更新Podfile 列表中所有的 pods。

根據(jù)意圖使用

pod update PODNAME 會更新指定的 pod,相對的 pod install 不會更新已經(jīng)安裝的 pods 版本。

當新增 pod 到 Podfile,你應(yīng)該使用 pod install, 而不是 pod update 來安裝新版本的 pod ,避免在這個過程中更新已經(jīng)存在的 pods。

如果你想要更新新版本 pods 再使用 pod update 命令。

提交 Podfile.lock 文件

作為提醒,如果你沒有提交 Pods 文件目錄到 git,你必須提交并推送 Podfile.lock 文件。

否則,可能會造成團隊之間執(zhí)行 pod install安裝的 pods 版本不一致。

案例

下面介紹一些在實際工程項目中可能會遇到的問題。

階段一:用戶 1 創(chuàng)建工程

用戶 1 創(chuàng)建了一個新的工程并想要使用 A, B,C三個 pods。他創(chuàng)建Podfile 文件,加入這三個 pods,并執(zhí)行 pod install

這樣就成功安裝了 A, B, C三個 pods,假設(shè)它們的版本都是 1.0.0

Podfile.lock 會跟蹤并記錄 A, B, C 的版本為 1.0.0

因為這是我們第一次執(zhí)行 pod install.xcodeproj 工程將不再存在。取而代之的是 .xcworkspace 以及 Pods.xcodeproj,但這并不會影響主工程的功能。

階段二:添加一個 pod

此后,如果用戶 1 想要新增 pod DPodfile 文件。

他必須執(zhí)行 pod install,即使現(xiàn)在 pod B 發(fā)布了新版本 1.1.0,工程仍然會使用 1.0.0 的版本。因為用戶 1 只是想添加 pod D并不希望更新其它的 pods。

這里有些用戶可能會誤用 pod update,這是不對的。

階段三:用戶 2 加入工程

接著用戶 2 需要參與工程開發(fā),他是新加入的,先克隆了工程并執(zhí)行 pod install

Podfile.lock 文件(已被提交到版本控制)會保證新用戶安裝的 pods 版本,同用戶 1 的一致。

即使 pod C 此時有新版本 1.2.0可用,用戶 2 安裝的仍舊是 1.0.0版本。因為 C 已經(jīng)被 Podfile.lock 文件鎖定在 1.0.0 版本了。

階段四:檢查 pod 新版本

之后,用戶 1 想要檢查一下 pods 是否有新版本可用,他執(zhí)行 pod outdated 這將會告訴他 B 發(fā)布了 1.1.0, C 發(fā)布了 1.2.0 的新版本。

用戶 1 決定更新 pod B,但是不想更新 pod C,所以他執(zhí)行 pod update BB 從 1.0.0 版本更新到 1.1.0 版本(會同時更新 Podfile.lock 文件)并保持 pod C 的版 本還是 1.0.0

為 Podfile 文件指定版本號的缺陷

有人可能會認為只要在 Podfile 文件中指定 pods 的版本,就可以保證團隊之間保持相同版本的 pods,比如 pod ‘A’, ‘1.0.0’

在加入新 pod 的時候,即使執(zhí)行 pod update,也不會有升級其它 pods 的風(fēng)險,因為它們的版本在 Podfile 中指定死了。

但實際上,上述場景并不能保證 用戶1 和 用戶2 所有 pods 的版本都一致

舉個典型的例子,加入 pod AA.podspec (關(guān)于 podspec 的說明請查看 CocoaPods 制作專題)文件中指定依賴為 ’A2’, ‘~> 3.0’,這種情況下,在 Podfile 中使用 pod 'A', ‘1.0.0’ 這的確會保證用戶 1 和 用戶 2 使用的 pod A1.0.0 版本的,但是:

  • 用戶 1 當時安裝的 A2 是 3.4 版本的;
  • 當用戶 2 加入并執(zhí)行 pod install 的時候,A2 可能有了 3.5 版本,就會導(dǎo)致他安裝的是最新版本的。

所以,這就是為什么需要團隊之間協(xié)作將 Podfile.lock 提交到版本控制,并正確的區(qū)分 pod installpod update的重要性。

原文

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,106評論 6 542
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,441評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,211評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,736評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,475評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,834評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,829評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 43,009評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,559評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 41,306評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,516評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,038評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,728評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,132評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,443評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,249評論 3 399
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,484評論 2 379

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