見出し画像

CircleCIにおけるiOSアプリ開発周辺ツールの管理について

トレタ Advent Calendar 2018 10日目の記事です。

トレタではサーバサイド・iOSともにCircleCIを利用しています。今回はiOS開発で用いる周辺ツールの管理方法について書いてみます。CircleCIのバージョンは2.1です。

昨今のiOSアプリ開発では様々なツールが利用されています。現在開発中のアプリでは下記のツールを利用しています。

Fastlane
Carthage
SwiftGen
SwiftLint
LicensePlist

開発メンバーのローカル環境、CI環境でもこれら利用ツールのバージョンを揃えることは重要なポイントかと思います。

Bundlerによる管理

Fastlaneについては、公式で推奨されているようにGemfileを用いてバージョン・依存関係を管理しています。
インストールする際のパスをワーキングディレクトリ配下に指定することで、Gemfile.lock をキーとしてCircleCIのキャッシュを利用することができます。

# .circle/config.yml の一部
    
    steps:
      - restore_cache:
          key: 1-gems-{{ checksum "Gemfile.lock" }}

      - run: bundle check || bundle install --path vendor/bundle

      - save_cache:
          key: 1-gems-{{ checksum "Gemfile.lock" }}
          paths:
            - vendor/bundle

Mintによる管理

CarthageSwiftGenSwiftLintLicensePlistについてはMintを利用して管理しています。まだあまり聞き慣れないツールかと思いますが、Swift製コマンドラインツールを管理するためのツールです。

以前はHomebrewとBrewfileを利用していましたが、バージョンを指定できない・ローカルにインストールできない問題がありMintを選びました。Mintfileの記述では下記のようにバージョンを指定することができます。

# Mintfile

Carthage/Carthage@0.31.2
realm/SwiftLint@0.29.1
SwiftGen/SwiftGen@6.0.2
mono0926/LicensePlist@2.0.0

また、環境変数の`MINT_PATH`を設定することで、各ツール/バージョンごとのビルド成果物のキャッシュ場所を指定することができます。CIの場合`MINT_PATH`をワーキングディレクトリ配下に指定していすることで、Mintfileをキーとしてキャッシュを利用します。現状、Mintはバイナリダウンロードに対応していないため、各ツールのビルド時間を大幅に短縮することができます。

# .circle/config.yml の一部
    
    environment:
      MINT_PATH: /Users/distiller/project/mint
    steps:
      - restore_cache:
          key: 1-mint-{{ checksum "Mintfile" }}

      - run: mint bootstrap

      - save_cache:
          key: 1-mint-{{ checksum "Mintfile" }}
          paths:
            - mint

注意:Run Script等で各ツールを利用している箇所は、`mint run` 経由で実行するように書き換える必要があります。

とめ

Bundler、Mintを利用してiOSアプリ開発に用いる周辺ツールの管理方法、CircleCIでの利用方法についてまとめました。今回は触れませんでしたが、CircleCI2.0, 2.1から利用できるworkflow, Orbsについても活用しているのでどこかで記事化できればと思います。







この記事が気に入ったらサポートをしてみませんか?