許多人都有誤解,以為 pod install 只是首次使用,之后都使用 pod update 來更新。
其實不然。
pod install 除了首次安裝時使用,之后增刪也可以用。
pod update 只有在需要更新pod時使用。
詳細區(qū)別
要理解他們的區(qū)別,就不能不提Podfile.lock這個文件了。
從后綴lock可以看出來,這是一個鎖。鎖什么呢?鎖住pods的版本。
在首次執(zhí)行 pod install 時,CocoaPods 根據(jù)Podfile文件來導(dǎo)入合適版本的pods。
然后,Podfile.lock文件文件被創(chuàng)建,此次所有pod的版本信息會被記錄在該文件中。
之后在執(zhí)行 pod install 時,會先從Podfile.lock文件讀取信息。
已有記錄的pod,會維持原版本。
無記錄的pod則根據(jù)Podfile導(dǎo)入合適版本的pod。然后新導(dǎo)入的pod信息也會被記錄在Podfile.lock文件中。
這就是鎖住版本的意思。
如果想要升級版本,那就需要使用pod update了。pod update 會忽略Podfile.lock文件,直接升級pod到Podfile允許的最新版本。
pod update 執(zhí)行后最新的版本信息也會記錄到Podfile.lock文件。
如果只想更新其中一個庫,使用 pod update podname。
舉例說明
第一步:
首先,張三新建了一個工程,創(chuàng)建了Podfile,在Podfile中引入了A、B、C 三個 pod。
然后執(zhí)行 pod install,A、B、C 被導(dǎo)入,假設(shè)版本都是1.0.0。
Podfile.lock 會被創(chuàng)建, 記錄下A、B、C 的版本為1.0.0。
第二步:
過了一段事件,張三在Podfile中新增了pod D。
假設(shè)D的版本也是1.0.0,而B已經(jīng)發(fā)布了新版本1.1.0。
張三僅想導(dǎo)入D,而保持B的版本不變,避免更新B帶來的風(fēng)險。
于是張三執(zhí)行了 pod install。
執(zhí)行中,CocoaPods 發(fā)現(xiàn) Podfile.lock 中B的版本是1.0.0,于是B維持不變。發(fā)現(xiàn)新增了D,于是導(dǎo)入了1.0.0的D,并將D的信息記錄到 Podfile.lock。
第三步:
又過了一段時間,李四加入了項目。
假設(shè)C的已經(jīng)發(fā)布了新版本1.2.0。
李四clone項目后,他使用 pod install。
命令執(zhí)行時,發(fā)現(xiàn)A、B、C、D在Podfile.lock中都有記錄,因此他獲取的A、B、C、D也會都是記錄的1.0.0。
這樣就保證了張三和李四使用的第三方是一致的。
第四步:
半個月后,張三覺得B的1.1.0足夠成熟,可以集成了,但是C的1.2.0還需要再等等。
于是,他執(zhí)行了 pod update B 來升級B,但維持C的版本為1.0.0。
CocoaPods 會忽略 Podfile.lock 中記錄的B的信息,強行更新B到1.1.0。
然后張三本地的Podfile.lock中B的版本信息也會更新到1.1.0。
張三提交,李四拉取后,執(zhí)行 pod install,于是李四的B也更新到1.1.0。又跟張三保持一致了。
總結(jié)
需要更新pod版本時使用 pod update,其他情況下使用 pod install。