本文翻譯自:Why does my team's Podfile.lock Podspec checksums change
在開發我們最快的移動應用程序 Eigen 時,使用CocoaPods,并不會將 Pods目錄保留在源代碼控制下 。 當開發人員的Pods具有不同的SHA 校驗和(CHECKSUMS)時,這有時會導致Podfile.lock內的有趣的數據流失。 這很奇怪,怎么會這樣?
Lockfiles 是什么?
首先,為確保我們談論同樣的事兒,這是我們的Podfile.lock。在pod安裝中使用lockfile來確保您的團隊的所有成員具有彼此完全相同的庫版本。另外,Podfile文件:
platform :ios, '9.3'
pod 'AFNetworking/Serialization', '~> 3.0'
target 'MyApp'
運行pod安裝的開發人員將獲得最新的3.x版本,最初可能是3.1版本,但是6個月后,他們可以獲得3.4 - 沒有鎖定文件,沒有辦法跟蹤具體的構建。這就是為什么它應該永遠在你的代碼庫。在上面的情況下,我的lockfile看起來像這樣:
PODS:
? ? - AFNetworking/Serialization (3.1.0)
DEPENDENCIES:
? ? - AFNetworking/Serialization (~> 3.0)
SPEC CHECKSUMS:
AFNetworking: 5e0e199f73d8626b11e79750991f5d173d1f8b67
PODFILE CHECKSUM: 876ceaa409f4ade2b3d58d310dbe026393824bcc
COCOAPODS: 1.0.0.beta.8
Spec CHECKSUMS能做什么?
通過CocoaPods Master Specs repo,我們盡最大努力確保為公眾提供一個一次性的Podspecs存儲庫。不過,您無法保證每個人都擁有與團隊中其他人一樣的Podspec版本。
所以,CocoaPods對您的Podspec的JSON表示進行校驗和,并將其保存在鎖定文件中。你可以復制這段代碼就能很容易的生成CHECKSUMS:
~/D/MyApp ?? pod ipc spec ~/.cocoapods/repos/master/Specs/AFNetworking/3.1.0/AFNetworking.podspec.json? | openssl sha1
5e0e199f73d8626b11e79750991f5d173d1f8b67
那為什么我看到流失?
使用git倉庫,正常的git開發流程是:
拉取一個分支,更改podfile文件
項目開發
提交到主分支
更新Podspec文件,更新到最新Tag的版本
CocoaPods在后臺更新更新倉庫做的很十分聰明,但是它并不完美。為了避免重新創建整個Pods文件夾,每次它會檢查您的庫是否處于預期版本,并跳過重新創建整個過程。
在上面的例子中,我們使用了CocoaPods的Specs repo版本的Podspec。在一個分支中,舉例來說:
pod 'AFNetworking/Serialization', :git => "https://github.com/orta/AFNetworking.git", :commit => "6f31b5c7bcbd59d4dac7e92e215d3c2c22f3400e"
Podspec在Pods / Local \ Podspecs / AFNetworking.podspec.json中以JSON格式保存到Pods目錄中,這是為了確保在Cocodopods沙盒中始終可以訪問Podspecs,并且會適當的加快訪問速度。這就是podspec用于生成校驗和的原因。
那么這怎么會不同步?
? ?在開發周期中,使用庫時,您將使用pod update [library]來更新正在使用的庫。您可以多次使用。
? ?PR你在分支上繼續做開發,直到你準備要代碼審查。此時,你有一個正在開發的版本,你在本地倉庫提交了一個PR版用于代碼審查。
? ?有一些修改影響到podspec的審查,你并沒有使用pod update [library]更新倉庫,而是回滾了代碼(例如,你更改了一些元數據,這不保證另一個更新通過CI 。)
? ?一旦所有的代碼都審核完,所有的修改都被merge到master分支上
? ?運行 pod install - 繼續在Pods目錄中使用Podspec的舊版本 ,例如:
Pods/Local\ Podspecs/AFNetworking.podspec.json.
? ?現在,您的本地Pods文件夾中有較舊的AFNetworking.podspec.json,當下一個人運行pod install并將更改合并時,他們會獲得不同的SHA,因為它們具有元數據更改的版本。?
簡單修復
最好的選擇是在導致流失的計算機上運行pod update [library],這將告訴CocoaPods專門請求一個新版本的庫。如果沒有給出與您的團隊其余部分相同的校驗和,那么有一個很好的老朋友:
rm -rf Pods && pod安裝
作者: