一、pod install VS pod update
1 pod install 的使用場景:
1.1 新創(chuàng)建工程,第一次引入pod庫時(shí)。
效果1:此時(shí)會(huì)按照Podfile中給出的約束條件下載所需要的pod庫,獲得符合約束條件的最新版本鹦蠕。
效果2:將創(chuàng)建Podfile.lock文件,記錄當(dāng)前使用的所有pod庫和版本在抛。
效果3:同時(shí)也會(huì)創(chuàng)建Pods.xcodeproj和.xcworkspace钟病,不過這不是主要功能。
1.2 修改了Podfile文件刚梭,添加或刪除了所依賴的pod庫時(shí)肠阱。
效果1:建議此時(shí)一定要使用pod install獲取新的pod庫或刪除不要的pod庫,若使用pod update其他庫也會(huì)受到影響朴读。
效果2:Podfile.lock會(huì)做相應(yīng)的修改屹徘,記錄當(dāng)前使用的所有pod庫和版本。
效果3:對(duì)于Podfile.lock中已有記錄的其他pod庫不會(huì)發(fā)生任何變化磨德,不去檢查是否有更新版本缘回,即使有新的可用版本也不會(huì)更新吆视。
1.3 新人加入團(tuán)隊(duì)典挑,拉取了主工程之后要獲取pod庫時(shí)。
效果1:按照Podfile文件中的依賴關(guān)系獲取pod庫啦吧。
效果2:在滿足Podfile文件的情況下您觉,直接獲取Podfile.lock中記錄的pod庫的對(duì)應(yīng)版本,并不去檢查是否有更新版本授滓。因此琳水,即使有新的可用版本也會(huì)僅獲取Podfile.lock中的版本肆糕。
1.4 團(tuán)隊(duì)合作中,不同開發(fā)者之間要同步對(duì)pod庫的依賴時(shí)在孝。
效果1:有人改變依賴關(guān)系诚啃,修改了Podfile文件時(shí),情況與見場景2相同私沮。
效果2:Podfile文件未變化始赎,但是有人執(zhí)行了pod update導(dǎo)致Podfile.lock文件發(fā)生修改時(shí),pod install會(huì)同步獲取Podfile.lock中指定的pod庫版本仔燕,而不是最新的版本造垛。
效果3:如果Podfile與Podfile.lock的記述相沖突,如指定了低于Podfile.lock中記錄的版本晰搀,會(huì)以Podfile為準(zhǔn)五辽,并在獲取完成后更新Podfile.lock文件。
2 pod update 的使用場景:
2.1 需要將某個(gè)pod庫更新到最新版本時(shí)外恕,使用pod update PODNAME
效果1:檢查指定pod庫的最新版本杆逗,若最新版本滿足Podfile中的約束,則更新到最新版本吁讨。
效果2:若最新版本不滿足Podfile中的約束髓迎,則更新到滿足約束的最高版本。
效果3:pod update命令不會(huì)檢查Podfile.lock文件建丧,即使其中有記錄也是無效的排龄。
效果4:若Podfile文件已發(fā)生變更,pod update命令也會(huì)將本地pod庫更新為符合Podfile文件的版本(不建議這么做翎朱,因?yàn)榉侵付≒ODNAME的pod庫也可能被改動(dòng)橄维,此處僅寫明有此效果而已)。
效果5:若有pod庫的版本發(fā)生變更拴曲,指定pod庫版本變化争舞、其他pod庫由于Podfile的改動(dòng)而發(fā)生變化、甚至因?yàn)镻odfile的改動(dòng)而被移除澈灼,都會(huì)更新Podfile.lock文件記錄當(dāng)前本地庫的狀態(tài)竞川。
效果6:由于要檢查pod庫的新版本,會(huì)先拉取所有源的podspec文件叁熔,第一次做這件事將是個(gè)超級(jí)費(fèi)時(shí)的操作委乌。
2.2 超級(jí)懶人愛做,而官網(wǎng)極其不推薦的做法荣回,直接使用pod update
效果1:等價(jià)于對(duì)所有pod庫執(zhí)行一遍pod update PODNAME遭贸。
效果2:若有pod庫的版本發(fā)生變更,則會(huì)更新Podfile.lock文件記錄當(dāng)前本地庫的狀態(tài)心软。
不推薦的原因是所有庫只要有新版本壕吹,都會(huì)發(fā)生更新著蛙,有可能導(dǎo)致整個(gè)工程變得不穩(wěn)定;另外耳贬,由于每個(gè)團(tuán)隊(duì)成員執(zhí)行該命令的時(shí)間不一樣踏堡,一旦中間有某個(gè)依賴庫發(fā)布了新版本,這將導(dǎo)致團(tuán)隊(duì)內(nèi)不同成員獲得的pod庫代碼并不相同咒劲。
3 正確的使用方法
根據(jù)這兩個(gè)命令的功能差異暂吉,以及CocoaPods官網(wǎng)的建議,我總結(jié)它們的正確用法是:
1缎患、第一次獲取pod庫時(shí)慕的,應(yīng)使用pod install。
2挤渔、需要更新依賴庫時(shí)肮街,先使用pod outdated查看有哪些庫有更新,再使用pod update PODNAME有目的的更新指定庫判导。
3嫉父、提交代碼時(shí),請(qǐng)注意一定同時(shí)提交Podfile.lock文件眼刃,以便其他人能同步到與你相同的pod庫版本绕辖。
4、同步其他團(tuán)隊(duì)成員的修改時(shí)擂红,請(qǐng)使用pod install仪际。
注意,pod outdated和pod update都會(huì)更新spec倉庫昵骤,但是pod install不會(huì)树碱,所以對(duì)于經(jīng)常使用的pod庫,建議經(jīng)常pod outdated關(guān)注更新情況变秦。
官網(wǎng)提到的:為什么直接在Podfile文件中指定版本的方法不夠用成榜?
原因是你所依賴的庫可能還依賴于其他的庫。
如果指定pod A的版本(如在Podfile中指定pod 'A', '1.0.0')蹦玫,但是pod A依賴于pod A2(通過在A.podspec中的dependency 'A2', '~> 3.0'聲明)赎婚。在這種情況下,Podfile的確會(huì)強(qiáng)制所有用戶使用pod A的1.0.0版本樱溉,但是挣输,用戶1可能會(huì)使用A2的3.4版本,而在這之后A2有新版發(fā)布饺窿,若無Podfile.lock的幫助歧焦,用戶2無論使用pod install還是pod update都不可避免的會(huì)使用A2的3.5版本移斩。
一般情況下pod A對(duì)pod A2依賴關(guān)系你是不可見的肚医,或者并不由你維護(hù)的绢馍。所以,直接在Podfile文件中指定版本的方法并不能保證所有用戶都使用相同版本的pod庫肠套。
除非你的工程所依賴的所有pod庫在對(duì)其他庫進(jìn)行依賴時(shí)也都采用指定版本的方法舰涌,而這只有在所有pod庫都由你來維護(hù)時(shí)才能夠得到保證。
二你稚、對(duì)于版本號(hào)的控制
pod ‘AFNetworking’ //不指定依賴庫版本瓷耙,表示每次都獲取最新版本
pod ‘AFNetworking’, ‘2.0’ //只使用2.0版本
pod ‘AFNetworking’, ‘> 2.0’ //使用高于2.0的版本
pod ‘AFNetworking’, ‘>= 2.0’ //使用大于或等于2.0的版本
pod ‘AFNetworking’, ‘< 2.0’ //使用小于2.0的版本
pod ‘AFNetworking’, ‘<= 2.0’ //使用小于或等于2.0的版本
pod ‘AFNetworking’, ‘~> 0.1.2’ //使用大于等于0.1.2但小于0.2的版本
pod ‘AFNetworking’, ‘~>0.1’ //使用大于等于0.1但小于1.0的版本
pod ‘AFNetworking’, ‘~>0’ //高于0的版本,寫這個(gè)限制與什么都不寫是同樣效果刁赖,皆表示使用最新版本