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による管理
Carthage、SwiftGen、SwiftLint、LicensePlistについては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についても活用しているのでどこかで記事化できればと思います。
この記事が気に入ったらサポートをしてみませんか?