使用Carthage和依賴項緩存減少50% Xcode構建時間

在最近的一篇文章中,Spotify工程師Patrick Balestra解釋了他們如何使用依賴關係管理器Carthage來避免反覆重建依賴項,從而將Xcode的構建時間減少了50%。

使用Xcode時,開發人員可以使用不同的方式來處理外部依賴項。你可以手動進行,也可以使用CocoaPodsCarthageSwift包管理器。除了Carthage, 其他的Xcode依賴項管理器通常都會從源代碼構建所有外部依賴項,而Carthage支持從GitHub上下載已經構建好的二進制文件,或者從已知的本地位置獲取。

Balestra說,從源代碼構建依賴項對效率有巨大的影響,因爲所有的開發人員都必須在他們的機器上構建外部依賴項,每次清理項目工件時也需要重新構建,例如,在進行一個新的持續集成構建時。通過分析構建日誌,Spotify的工程師得出了一個驚人的結論。

在我們的持續集成環境中,我們對Spotify Artists App的Swift源代碼編譯時間和它的依賴項的編譯時間進行了對比,我們很快就發現,在開始編譯App的代碼之前,大約有60-70%的時間被用在反覆編譯相同的依賴項上。

在Swift可以支持二進制穩定性之後,並且Swift包管理器可能在某個時候也引入對二進制發行版的支持,那麼這種情況就可能會有所改變。但目前在Xcode中管理二進制依賴項的惟一可用選項是手動管理或藉助Carthage。

如果團隊和CI管道共享了預構建的二進制模塊,那麼鏈接這些模塊的好處就會更大,但需要使用某種分佈式存儲。在這種情況下,團隊成員和CI管道可以直接鏈接共享的二進制模塊。由於Carthage只支持二進制模塊的本地存儲,所以開發人員通常使用第三方工具(如Rome)將Carthage工件緩存在S3中,讓整個團隊都可以使用。

Rome通過避免重新構建相同的依賴項來加快後續的構建速度。它將Carthage/Build目錄的內容緩存到外部文件夾(例如~/Library/Chaches)或遠程服務器(例如 Amazon S3)。

由於Spotify工程師不使用S3,他們使用的是Artifactory,所以不得不對Rome進行擴展,以便支持更多的遠程存儲系統。藉助他們的工作成果,你現在可以使用自己喜歡的腳本語言編寫腳本讓Rome能夠在任意位置遠程存儲工件。

在加入了對Rome的支持之後,很快就發現情況得到了改善。我們發現,在我們的CI配置中,Artists App的構建時間立即減少了約50%:從大約20分鐘減少到不到10分鐘!

Spotify工程師發現的一個主要問題是LLDB無法調試二進制模塊,因爲編譯器在二進制文件中保存的是符號的絕對路徑。這在支持Swift 5.1和二進制模塊分發的最新Xcode版本中應該已經發生變化了,但InfoQ無法與Spotify確認他們使用的是哪個版本的Xcode。

原文鏈接

Reduce Xcode Build Times Using Carthage and Caching Binary Dependencies

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章