ios circleciでcarthageのキャッシュが効かなかった原因と対応
はじめに
CircleCI 2.0 + Carthage で carthage bootstrap に時間がかかる場合の解決方法 - Qiita
こちらを参考にcarthageのキャッシュを使ってcircleciでのビルド時間を短縮。が、とあるタイミングでキャッシュが上手く効いていないようだった。
circleciでは以下のような出力
・・・ *** Valid cache found for SVProgressHUD, skipping build *** Invalid cache found for SwiftDate, rebuilding with all downstream dependencies *** Invalid cache found for SwiftWebSocket, rebuilding with all downstream dependencies *** Invalid cache found for SwiftyJSON, rebuilding with all downstream dependencies *** Invalid cache found for SwipeMenuViewController, rebuilding with all downstream dependencies ・・・
restore_cacheとsave_cacheはちゃんと動いていそうだが、carthage bootstrapで「Invalid cache found for ・・・」となってしまう
steps: - checkout - restore_cache: key: ca-{{ checksum "Cartfile.resolved" }} - run: name: Carthage command: carthage bootstrap --platform iOS --cache-builds - save_cache: key: ca-{{ checksum "Cartfile.resolved" }} paths: - Carthage
結論
原因はxcodeのバージョンを10.0.0から10.1.0に上げたことだった。Carthage/Build/.xxxxx.versionのhash がrestore_cache時の値とcarhage bootstrap値で違った。xcodeのバージョン上げたから当然なのか。。キャッシュのキーにxcodeのバージョンも追加して解決。
steps: - checkout - run: name: Set Xcode Version command: echo `xcodebuild -version` > XCODE_VERSION - restore_cache: key: ca-{{ checksum "XCODE_VERSION" }}-{{ checksum "Cartfile.resolved" }} - run: name: Carthage command: carthage bootstrap --platform iOS --cache-builds - save_cache: key: ca-{{ checksum "XCODE_VERSION" }}-{{ checksum "Cartfile.resolved" }} paths: - Carthage
以上です