✨
Swift Package Manager を GitHub Actions でキャッシュさせる方法
背景
SPMを使っているiOSのプロジェクトで、xcodebuild
をGitHub Actions上で使用したいとき、自動でFetchされたライブラリのソースコードはキャッシュされず、毎回、Fetchしてくるため非常に遅くなってしまいます。
そこで、自動でFetchしたソースコードを作業ディレクトリ配下に置いてキャッシュさせることでCIにかかる時間を短縮させます。
方法
Xcodebuild
xcodebuildで自動でFetchされるソースコードのディレクトリは、 clonedSourcePackagesDirPath
オプションで指定することができます。
xcodebuild build \
-scheme XXX \
-sdk iphonesimulator
-configuration Release
-clonedSourcePackagesDirPath SourcePackages
また、 Podfile.lock
や Cartfile.resolved
と同様にSPMにも、バージョンをロックするためのPackage.resolved
が存在します。
Package.resolved
は、 *.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/
配下に置かれています。
GitHub Actions
GitHub Actions の設定ファイルは、以下のように記述します。
Package.resolved
のハッシュ値を actions/cache
のキーに設定し、 SourcePackages
ディレクトリをキャッシュさせます。
- name: Cache Swift Packages
uses: actions/cache@v1
with:
path: SourcePackages
key: ${{ runner.os }}-spm-${{ hashFiles('*.xcodeproj/project.xcworkspace/ xcshareddata/swiftpm/Package.resolved') }}
restore-keys: ${{ runner.os }}-spm-
- name: Build
run: xcodebuild build
-scheme XXX
-sdk iphonesimulator
-configuration Release
-clonedSourcePackagesDirPath SourcePackages
Discussion