iOS
CircleCI
Carthage
CircleCI2.0

CircleCI 2.0 + Carthage で carthage bootstrap に時間がかかる場合の解決方法

問題

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

リファレンス