介紹:? 查看版本 pod --version? 2017.2.15
許多人開始使用CocodPods的時(shí)候認(rèn)為pod install只是你第一次用CocoaPods建立工程的時(shí)候使用鹃操,而之后都是使用pod update遗锣,但實(shí)際上并不是那會(huì)事帆阳。
簡(jiǎn)單來說,就是:
1.使用pod install來安裝新的庫(kù)氨距,即使你的工程里面已經(jīng)有了Podfile桑逝,并且已經(jīng)執(zhí)行過pod install命令了;所以即使你是添加或移除庫(kù)俏让,都應(yīng)該使用pod install楞遏。
2.使用pod update [PODNAME] 只有在你需要更新庫(kù)到更新的版本時(shí)候用。
詳細(xì)介紹:
pod install :
這個(gè)是第一次在工程里面使用pods的時(shí)候使用首昔,并且寡喝,也是每次你編輯你的Podfile(添加、移除勒奇、更新)的時(shí)候使用预鬓。
每次運(yùn)行pod install命令的時(shí)候,在下載赊颠、安裝新的庫(kù)的同時(shí)格二,也會(huì)把你安裝的每個(gè)庫(kù)的版本都寫在了Podfile.lock文件里面。這個(gè)文件記錄你每個(gè)安裝庫(kù)的版本號(hào)竣蹦,并且鎖定了這些版本蟋定。
當(dāng)你使用pod
install它只解決了pods里面,但不在Podfile.lock文件里面的那些庫(kù)之間的依賴草添。對(duì)于在Podfile.lock里面所列出的那些庫(kù),會(huì)下載在Podfile.lock里面明確的版本扼仲,并不會(huì)去檢查是否該庫(kù)有新的版本远寸。對(duì)于還不在Podfile.lock里面的庫(kù),會(huì)找到Podfile里面描述對(duì)應(yīng)版本(例如:pod
"MyPod", "~>1.2")屠凶。
pod outdated:
當(dāng)你運(yùn)行pod
outdated命令驰后,CocoaPods會(huì)列出那些所有較Podfile.lock里面有新版本的庫(kù)(那些當(dāng)前被安裝著的庫(kù)的版本)。這個(gè)意思就是矗愧,如果你運(yùn)行pod
update PODNAME灶芝,如果這個(gè)庫(kù)有新的版本,并且新版本仍然符合在Podfile里的限制唉韭,它就會(huì)被更新夜涕。
pod update:
當(dāng)你運(yùn)行 pod update PODNAME 命令時(shí),CocoaPods會(huì)幫你更新到這個(gè)庫(kù)的新版本属愤,而不需要考慮Podfile.lock里面的限制女器,它會(huì)更新到這個(gè)庫(kù)盡可能的新版本,只要符合Podfile里面的版本限制住诸。
如果你運(yùn)行pod update驾胆,后面沒有跟庫(kù)的名字涣澡,CocoaPods就會(huì)更新每一個(gè)Podfile里面的庫(kù)到盡可能的最新版本。
正確用法:
你應(yīng)該使用pod update PODNAME去只更新某個(gè)特定的庫(kù)(檢查是否有新版本丧诺,并盡可能更新到新的版本)入桂。對(duì)應(yīng)的,你應(yīng)該使用pod install驳阎,這個(gè)命令不會(huì)更新那些已經(jīng)安裝了的庫(kù)抗愁。
當(dāng)你在你的Podfile里面添加了一個(gè)庫(kù)的時(shí)候,你應(yīng)該使用pod install搞隐,而不是pod update驹愚,這樣既安裝了這個(gè)庫(kù),也不需要去更新其它的已安裝庫(kù)劣纲。
你應(yīng)該使用pod update去更新某個(gè)特定的庫(kù)逢捺,或者所有的庫(kù)(在Podfile的限制中)。
提交你的Podfile.lock文件:
在此提醒癞季,即使你一向以來劫瞳,不commit你的Pods文件夾到遠(yuǎn)程倉(cāng)庫(kù),你也應(yīng)該commit并push到遠(yuǎn)程倉(cāng)庫(kù)中绷柒。
要不然志于,就會(huì)破壞整個(gè)邏輯,沒有了Podfile.lock限制你的Pods中的庫(kù)的版本废睦。
舉例:
以下會(huì)舉例說明在各個(gè)場(chǎng)景下的使用伺绽。
場(chǎng)景1:User1創(chuàng)建了一個(gè)工程
User1創(chuàng)建了一個(gè)工程,并且想使用A嗜湃、B奈应、C這三個(gè)庫(kù),所以他就創(chuàng)建了一個(gè)含有這個(gè)三個(gè)庫(kù)的Podfile购披,并且運(yùn)行了pod intall杖挣。
這樣就會(huì)安裝了A、B刚陡、C三個(gè)庫(kù)到這個(gè)工程里面惩妇,假設(shè)我們的版本都為1.0.0。
因此Podfile.lock跟蹤并記錄A筐乳、B歌殃、C這三個(gè)庫(kù)以及版本號(hào)1.0.0。
順便說一下:由于這個(gè)工程是第一次運(yùn)行pod install蝙云,并且Pods.xcodeproj工程文件還不存在挺份,所以這個(gè)命令也會(huì)同時(shí)創(chuàng)建Pods.xcodeproj以及.xcworkspace工程文件,這只是這個(gè)命令的一個(gè)副作用贮懈,并不是主要目的匀泊。
場(chǎng)景2:User1添加了一個(gè)庫(kù)
之后优训,User1添加了一個(gè)庫(kù)D到Podfile文件中。
然后他就應(yīng)該運(yùn)行pod install命令了各聘。所以即使庫(kù)B的開發(fā)者發(fā)布了B的一個(gè)新版本1.1.0揣非。但只要是在第一次執(zhí)行pod install之后發(fā)布的,那么B的版本仍然是1.0.0躲因。因?yàn)閁ser1只是希望添加一個(gè)新庫(kù)D早敬,不希望更新庫(kù)B。
這就是很多人容易出錯(cuò)的地方大脉,因?yàn)樗麄冊(cè)谶@里使用了pod update搞监,因?yàn)橄胫案挛业墓こ桃粋€(gè)新的庫(kù)而已”。這里要注意镰矿!
場(chǎng)景3:User2加入到這個(gè)工程中
然后琐驴,User2,一個(gè)之前沒有參與到這個(gè)工程的人秤标,加入了绝淡。他clone了一份倉(cāng)庫(kù),然后使用pod install命令苍姜。
Podfile.lock的內(nèi)容就會(huì)保證User1和User2會(huì)得到完全一樣的pods牢酵,前提是Podfile.lock被提交到git倉(cāng)庫(kù)中。
即使庫(kù)C的版本已經(jīng)更新到了1.2.0衙猪,User2仍然會(huì)使用C的1.0.0版本馍乙,因?yàn)镃已經(jīng)在Podfile.lock里面注冊(cè)過了,C的1.0.0版本已經(jīng)被Podfile.lock鎖住了垫释。
場(chǎng)景4:檢查某個(gè)庫(kù)的新版本
之后丝格,User1想檢查pods里面是否有可用的更新時(shí),他執(zhí)行了pod outdated饶号,這個(gè)命令執(zhí)行后,會(huì)列出來:B有了1.1.0版本季蚂,C有了1.2.0版本茫船。
這時(shí)候,User1打算更新庫(kù)B扭屁,但不更新庫(kù)C算谈,所以執(zhí)行pod update B,這樣就把B從1.0.0更新到1.1.0(同時(shí)更新Podfile.lock里面對(duì)B的版本記錄)料滥,此時(shí)然眼,C仍然是1.0.0版本,不會(huì)更新葵腹。
在Podfile中使用明確版本還不夠
有些人認(rèn)為在Podfile中明確某個(gè)庫(kù)的版本高每,例如:pod 'A', '1.0.0' ,足以保證所有項(xiàng)目里面的人都會(huì)使用完全一樣的版本屿岂。
這個(gè)時(shí)候,他們可能會(huì)覺得鲸匿,此時(shí)如果添加一個(gè)新庫(kù)的時(shí)候爷怀,我使用pod update并不會(huì)去更新其它的庫(kù),因?yàn)槠渌膸?kù)已經(jīng)被限定了固定的版本號(hào)带欢。
但事實(shí)上运授,這不足以保證User1和User2的pods中庫(kù)的版本會(huì)完全一樣。
一個(gè)典型的例子是乔煞,如果庫(kù)A有一個(gè)對(duì)庫(kù)A2的依賴(聲明在A.podspec中:dependency
'A2', '~> 3.0')吁朦,如果這樣的話,使用 pod 'A', '1.0.0'
在你的Podfile中渡贾,的確會(huì)讓User1和User2都使用同樣版本的庫(kù)A(1.0.0)逗宜,然而:
最后User1可能使用A的依賴庫(kù)A2的版本為3.4(因?yàn)?.4是當(dāng)時(shí)User1使用的最新版本),但User2使用的庫(kù)A2版本是3.5(假設(shè)A2的開發(fā)者剛剛發(fā)布了A2的新版本3.5)剥啤。
所以只有一個(gè)方法來保證某項(xiàng)目的每個(gè)開發(fā)者都使用相同版本的庫(kù)锦溪,就是每個(gè)電腦中都使用同樣的Podfile.lock,并且合理使用pod install 和 pod update府怯。