來源于 https://guides.cocoapods.org
原文地址:https://guides.cocoapods.org/using/pod-install-vs-update.html
僅供學(xué)習,如有轉(zhuǎn)摘,請注明出處.
介紹
很多開始使用CocoaPods的人認為pod install
僅僅是首次對項目進行CocoaPods設(shè)置時使用传货,而后續(xù)使用pod update
就行了瞧预,然后并非如此聪廉。
本指南的目的在于解釋如何適時的使用pod install
與pod update
衩匣。
TL;DR:
無論是對已存在
Podfile
文件的(項目)運行過pod install
,還是僅僅對已經(jīng)使用CocoaPods的項目進行添加或者移除pods操作建炫。(都是)執(zhí)行pod install
在項目中去安裝新的pods。只有在你想把pods更新到更新的版本時才需要執(zhí)行
pod update
。
pod install
首次對項目設(shè)置pods间校,或者每次對(項目中的)podfile
進行添加、更新页慷、移除pod等操作執(zhí)行該命令
- 每次運行
pod install
憔足,(它)都會根據(jù)Podfile.lock
中的每個pods進行下載和安裝。Podfile.lock
文件跟蹤了每個已安裝的pods版本并進行 鎖定酒繁。 - 運行
pod install
時滓彰,它只會解決Podfile.lock
中尚未列出的pods 依賴。對于
Podfile.lock
中列出的pods州袒,無需嘗試檢查是否存在新的版本揭绑,直接對指定的pods版本進行下載。對于
Podfile.lock
中尚未列出的pods,先搜索與Podfile
中描述的相匹配的pods版本(例如 指定版本 1.2 的 ‘MyPod’)他匪。
pod outdated
執(zhí)行pod outdated
菇存,CocoaPods會列出所有比Podfile.lock
中已存在pods的新版本。這意味著邦蜜,如果對這些(存在新版本的)pods執(zhí)行pod update PODNAME
命令依鸥,它們都會被更新 - 前提是這些新版本仍然與Podfile
中的限制相匹配。
說明:如果Podfile中的版本設(shè)置方式為 ~> x.y 則會更新到 【x.最大版本號】悼沈,如果版本設(shè)置為 = x.y贱迟,則不會更新
pod update
當執(zhí)行pod update PODNAME
,CocoaPods會嘗試尋找該pod的一個更新版本絮供,不再考慮Podfile.lock
中列出的版本关筒。它會盡可能將pod更新到最新版本【前提是這些新版本仍然與Podfile
中的限制相匹配】。
如果執(zhí)行pod update
時未指定pod name杯缺,CocoaPods將會Podfile
中列出的每個pod更新到最新版本蒸播。
使用目的
使用pod update PODNAME
,只會更新指定的pod【檢查是否存在新版本并相應(yīng)的更新】萍肆。與pod install
不同袍榆,pod update
不會嘗試更新已經(jīng)安裝的的pods 版本。
當在Podfile
中增加一個pod時塘揣,應(yīng)該執(zhí)行pod install
而非pod update
- 安裝此pod包雀,而且避免在此過程中更新已存在的pod。
只有想更新指定pod版本(或者所有pods)時才需要使用pod update
亲铡。
提交你的 Podfile.lock
提醒一下才写,即使Pods
文件夾不允許提交到共享倉庫,也應(yīng)該一直提交&推送Podfile.lock
文件奖蔓。
否則赞草,它會打破上述pod install
能夠鎖定已安裝pods版本解釋的所有邏輯。
場景舉例
這有個場景來說明一個項目生命周期中各種可能的遇到的使用情況吆鹤。
Stage1: user1 創(chuàng)建項目
user1創(chuàng)建一個項目厨疙,并且準備使用A
,B
,C
(三個pods)。使用這些pods創(chuàng)建Podfile
疑务,并且執(zhí)行pod install
沾凄。此種情況(該項目)將會安裝A
,B
,C
(三個pods),版本號都定為1.0.0
知允。
Podfile.lock
將會保持追蹤并且記錄A
,B
,C
所有安裝的版本都是1.0.0
由于這是首次執(zhí)行
pod install
撒蟀,而且Pods.xcodeproj
項目尚未存在,所以該命令會創(chuàng)建Pods.xcodeproj
以及.xcworkspace
温鸽,這是該命令附帶的效果保屯,而非主要結(jié)果。
Stage 2: User1 增加一個新的pod
過會,user1準備在項目中的Podfile
中增加D
pod 配椭。
因此虫溜,需要執(zhí)行pod install
雹姊,即使首次執(zhí)行pod install
后股缸,B
pod的維護又發(fā)布了1.1.0
版本,項目仍然會保持使用1.0.0
版本 — 因為user1僅僅是想增加D
pod吱雏,而不希望冒險去更新B
pod敦姻。
這就是某些人使用錯誤的地方,因為他們在這使用了
pod update
— 可能認為“我想用新的pods更新 project ”歧杏?— 所以使用了pod install
去安裝項目中的新pods
Stage 3: User2 加入項目
從未參加該項目的user2加入了該小組镰惦,克隆好倉庫并執(zhí)行了pod install
。
Podfile.lock
中的內(nèi)容可以保證user2得到與user1正確且相同的pods犬绒。
即使是C
pod維護的最新版本是1.2.0
旺入,user2仍將使用C
pod的1.0.0
版本。因為那是在Podfile.lock
被注冊的版本凯力。即茵瘾,C
pod被Podfile.lock
鎖定為1.0.0
Stage 4: 檢查pod的新版本
稍過些時候,user1準備查看pods是否有更新可用咐鹤。執(zhí)行pod outdated
后拗秘,提示pod B
有1.1.0
新版本,pod C
有1.2.0
新版本祈惶。
user1決定更新pod B
雕旨,而pod C
保持不變;于是捧请,執(zhí)行pod update B
凡涩,將pod B
從 1.0.0
更新至 1.1.0
(也會同時相應(yīng)的更新Podfile.lock
),但是pod C
仍保持為1.0.0
版本(不會更新至1.2.0
)
在Podfile中指定明確的版本仍不夠
待續(xù)...
寫于18年08月22號