問題
iOSアプリ開発で Carthage ディレクトリ配下をGitの管理下に入れないようにしたところ、CIのビルドマシン上で毎回 $ carthage bootstrap
することになり、非常に時間がかかってしまっていた。
解決方法
Carthage ディレクトリ配下をキャッシュして、前回から変更がない限りそれを読み出すようにすれば良い。
.circleci/config.yml
の該当箇所は以下のようになる
(抜粋).circleci/config.yml
- 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
各行の説明
(抜粋2).circleci/config.yml
- restore_cache:
key: ca-{{ checksum "Cartfile.resolved" }}
CircleCI上でキャッシュを読み出す。 Cartfile.resolved
のチェックサムをキーにキャッシュを読み出すという意味。
こうしておけば、 Cartfile.resolved
に変更があった場合はキャッシュを読み出さずに済む。
(抜粋3).circleci/config.yml
- run:
name: Carthage
command: carthage bootstrap --platform iOS --cache-builds
--cache-builds
は $ carthage bootstrap
でチェックアウトしたファイルとCarthage
ディレクトリ配下のファイルに差分がない場合にビルドをスキップするオプション。
(抜粋4).circleci/config.yml
- save_cache:
key: ca-{{ checksum "Cartfile.resolved" }}
paths:
- Carthage
CircleCI上でCarthage
ディレクトリ配下のファイルをキャッシュする。 Cartfile.resolved
のチェックサムをキーにする。
環境
- CircleCI 2.0
- Xcode 9.4