正確的使用pod install 和 pod update - CocoaPods

原文地址: 點擊直達(dá)

pod install

  1. 在項目中第一次使用CocoaPods, 進(jìn)行安裝的時候使用這個命令.
  2. Podfile增加刪除某個pod后, 也是使用這個命令. 而不是pod update.
  • 每次運行pod install命令, 下載并安裝新的pod時, 它會為Podfile.lock文件中的每個pod寫入已安裝的版本. 此文件跟蹤每個pod的已安裝版本并鎖定這些版本(.lock命名因此而來).
  • 當(dāng)運行pod install灰殴,它只解析Podfile.lock中尚未列在其中的pod的依賴庫.
  • 對于已經(jīng)在Podfile.lock中列出的pod, Podfile.lock不會嘗試檢查是否有更新的版本.
  • 對于尚未在Podfile.lock中列出的pod, 會搜索與Podfile(如中所述pod 'MyPod', '~>1.2')匹配的版本或最新的版本.

注: 第一次運行pod install的時候, .xcworkspace項目Pods目錄還不存在, pod install命令也會創(chuàng)建.xcworkspacePods目錄, 但這是pod install命令的順帶作用趁仙,而不是它的主要作用.

pod outdated

當(dāng)運行pod outdated時, CocoaPods將列出所有比Podfile.lock(每個pod當(dāng)前安裝的版本)中, 已經(jīng)列出的版本更新的pod版本. 這意味著如果你在這些pod上運行pod update PODNAME, 它將會把指定的pod更新到最新版本.

pod update

當(dāng)運行pod update PODNAME時, CocoaPods將嘗試查找PODNAME更新的pod版本, 會忽略掉Podfile.lock中已經(jīng)存在的版本.

如果直接運行pod update, 沒有指定PODNAME, CocoaPods會把Podfile中所有的pod都更新到最新版本.(如果已經(jīng)是最新版本了, 則不更新)

預(yù)期用途

使用pod update PODNAME, 將只能更新特定的pod(檢查是否存在新版本并相應(yīng)地更新pod). 相反, pod install不會嘗試更新已安裝的pod的版本.

當(dāng)向Podfile中添加一個pod時, 應(yīng)該運行pod install, 而不是用pod update來安裝這個新pod.

只有在想要更新特定pod(或所有的pod)的版本時才會使用pod update.

必須提交的Podfile.lock

有時候可能你不想提交Pods目錄到源代碼管理中. 但是在多人開發(fā)的情況下, 一定要提交Podfile.lock這個文件, 因為這個文件里面記錄了你的Podfile中所有pod的版本信息. 為避免你的Podfile中的pod版本和別人的Podfile中的pod發(fā)生版本不一樣的情況, 而導(dǎo)致出現(xiàn)函數(shù)找不到或者其他的錯誤.

場景示例

  1. user1創(chuàng)建了項目

user1創(chuàng)建了一個項目, 并且想用A, B, C這3個pod庫, 這個時候用pod install安裝了這些pod庫, 并且假設(shè)這3個庫的版本號都是1.0.0, 這些版本號等信息會記錄在Podfile.lock文件中.

  1. user1添加了新的pod

根據(jù)項目的進(jìn)度需求, 添加了D這個pod庫到項目中, 這個時候應(yīng)該使用pod install去安裝D這個庫到項目中, 即使在添加D這個庫之前, B的版本被維護者更新到了1.1.0, 使用pod install也只會安裝D這個庫到項目中, 而不會去幫你更新B的版本. 從而不會出現(xiàn)因為B的版本更新后, 假如某些函數(shù)過期了, 或者某些函數(shù)被移除了, 而導(dǎo)致你被迫需要修改項目代碼.

  1. user2加入到項目中

假設(shè)團隊中新增加了一位基友user2, 他克隆了項目, 并且pod install. (前提是你沒有把Pods目錄添加到源代碼管理中), 如果你將Podfile.lock提交到了版本控制. 那么基友安裝后的pod會和你的一模一樣, 不會出現(xiàn)他的pod版本比你的高. 即便現(xiàn)在C的版本更新到了1.2.0, 基友安裝的也是1.0.0版本. 因為在Podfile.lock中記錄的pod C就是1.0.0版本.

  1. 檢查pod的新版本

后來, user1想要檢查下是否有更新pod的版本. 運行pod outdated, 會告訴你pod B有一個新1.1.0版本, pod C已經(jīng)是1.2.0版本. user1決定他想要更新pod B, 但不更新pod C. 因此, 他會運行pod update B, 將B1.0.0版本更新到版本1.1.0(并相應(yīng)的更新Podfile.lock), 但會將pod C保留在版本中1.0.0(不會將其更新為1.2.0).

使用指定版本的Podfile是不夠的

有些人可能會認(rèn)為, 通過在Podfile中指定pod確切的版本, 像pod 'A', '1.0.0', 就足以保證每一個人和其他人都會有相同的版本. 然后他們甚至可以使用pod update, 即使只是添加一個新的pod, 認(rèn)為它永遠(yuǎn)不會有更新其他pod版本的風(fēng)險, 因為它們在Podfile中被固定到了一個特定的版本.

但事實上, 這還不足以保證我們上面場景中的user1和user2, 始終獲得所有pod的完全相同的版本. 舉一個典型的例子, 如果pod A中有對pod A2的依賴, 在A.podspecas中聲明dependency 'A2', '~> 3.0'. 在這種情況下,pod 'A', '1.0.0'在你的Podfile中使用的時候, 確實會強制user1和user2始終使用A 1.0.0 的pod版本.

但是: user1最終可能獲取到的A2版本是pod 3.4(因為那時A2是最新版本), 當(dāng)user2在以后加入項目時運行pod install, 他可能會在A2的版本中獲得pod 3.5(因為維護者A2可能在此期間發(fā)布了新版本).

這就是為什么為了確保在每個團隊成員使用的每臺電腦上, 所有相同的pod版本的唯一方法, 是使用Podfile.lock和正確使用pod installpod update的原因.

我應(yīng)該將Pods目錄添加到源代碼管理中嗎窍荧?

是否將Pods文件夾添加到源代碼管理中都取決于你,因為工作流程因項目而異. 我們建議您將Pods目錄保留在源代碼管理下, 不要將其添加到您的.gitignore. 但最終這個決定取決于你:

添加Pod目錄的好處

  • 克隆了repo后, 即使沒有在機器上安裝CocoaPods, 項目也可以立即構(gòu)建和運行. 無需運行pod install, 也無需Internet連接.
  • Pod(代碼/庫)總是可用的, 即使Pod的源(例如GitHub)要關(guān)閉也是如此.
  • 在克隆repo后, Pod組件保證與原始安裝中的組件相同.

忽略Pods目錄的好處

  • 源代碼倉庫將更小, 并且占用更少的空間.
  • 只要所有Pod的源(例如GitHub)都可用, CocoaPods通常能夠重新創(chuàng)建相同的安裝.(從技術(shù)上講, 無法保證pod install在Podfile中不使用提交SHA時, 運行將獲取并重新創(chuàng)建相同的組件. 在Podfile中使用zip文件時尤其如此.)
  • 執(zhí)行源控制操作時不會有任何沖突, 例如合并具有不同Pod版本的分支.

無論你是否在忽略Pods目錄, Podfile并Podfile.lock應(yīng)始終版本控制下保持.

本文內(nèi)容來源:
https://guides.cocoapods.org/using/pod-install-vs-update.html
https://guides.cocoapods.org/using/using-cocoapods.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末椭坚,一起剝皮案震驚了整個濱河市锌唾,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌动知,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件遗淳,死亡現(xiàn)場離奇詭異拍柒,居然都是意外死亡,警方通過查閱死者的電腦和手機屈暗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進(jìn)店門拆讯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人养叛,你說我怎么就攤上這事种呐。” “怎么了弃甥?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵爽室,是天一觀的道長。 經(jīng)常有香客問我淆攻,道長阔墩,這世上最難降的妖魔是什么嘿架? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮啸箫,結(jié)果婚禮上耸彪,老公的妹妹穿的比我還像新娘。我一直安慰自己忘苛,他們只是感情好蝉娜,可當(dāng)我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著扎唾,像睡著了一般召川。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上胸遇,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天荧呐,我揣著相機與錄音,去河邊找鬼狐榔。 笑死坛增,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的薄腻。 我是一名探鬼主播,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼届案,長吁一口氣:“原來是場噩夢啊……” “哼庵楷!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起楣颠,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤尽纽,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后童漩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體弄贿,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年矫膨,在試婚紗的時候發(fā)現(xiàn)自己被綠了差凹。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡侧馅,死狀恐怖危尿,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情馁痴,我是刑警寧澤谊娇,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站罗晕,受9級特大地震影響济欢,放射性物質(zhì)發(fā)生泄漏赠堵。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一法褥、第九天 我趴在偏房一處隱蔽的房頂上張望茫叭。 院中可真熱鬧,春花似錦挖胃、人聲如沸杂靶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吗垮。三九已至,卻和暖如春凹髓,著一層夾襖步出監(jiān)牢的瞬間烁登,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工蔚舀, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留饵沧,地道東北人。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓赌躺,卻偏偏與公主長得像狼牺,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子礼患,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,619評論 2 354

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