Fastfile の import 機能を使い、複数のプロジェクトで共通の Fastfile を使う


import_from_git

fastlane の action の中に import_from_git というのがあり、これを利用すると特定の Fastfile を import してそのまま利用することができます。

弊社は iOSアプリ3つ, Androidアプリ3つの計6こあり、メンテしていくのが大変なので import 機能を利用し共通 Fastfile を作成しました。

classi/fastlane-example にある Fastfile を実際に import して利用しています。

import 方法

fastlane_version "2.17.0"

import_from_git(
  url: 'https://github.com/classi/fastlane-example',
  path: 'iOS/fastlane/Fastfile'
)

このように書くことで import することができます。
import されたファイルの中でさらに import することも可能です。

私は Util/Fastfile に iOS / Android で共通の処理をまとめ、 iOS/fastlane/FastfileAndroid/fastlane/Fastfile からその Util を import する構成になっています。
iOS と Android をまとめて 1 つの Fastfile にすることも可能ですが、そうすると Fastfile が長くなってしまうので分割しました。

iOS Android
Util/Fastfile
  ↑
iOS/fastlane/Fastfile
  ↑
個別iOSアプリのFastfile
Util/Fastfile
  ↑
Android/fastlane/Fastfile
  ↑
個別AndroidアプリのFastfile

という構成になっています。

環境変数

Fastfile で個別のアプリを動作させるために、 Fastfile に埋め込みで書いているような文字列を環境変数での設定に変更する必要があります。

ローカル環境では direnv などを使うと良いです。

個別のプロジェクトでそれぞれ以下のように設定することで、共通の Fastfile を利用することができます。

export CRASHLYTICS_API_TOKEN=""
export CRASHLYTICS_BUILD_SECRET=""
export SLACK_URL="https://hooks.slack.com/..."
export CRASHLYTICS_GROUPS="classi"
export XCOV_WORKSPACE="classi.xcworkspace"
export XCOV_SCHEME="ClassiTests"
export XCOV_EXCLUDE_TARGETS="GoogleToolboxForMac.framework,Rswift.framework"
export BETA_MATCH_TYPE="development"
export SLACK_CHANNEL="classi_app"
export RELEASE_GYM_SCHEME="Production"
export XCODEPROJ="classi.xcodeproj"
export GITHUB_REPOSITORY="classi/fastlane-example"

サンプル

classi/fastlane-example: fastlane example by Classi Corp.

上記レポジトリに fastlane 関連ファイルを公開していますので、参考にしてみてください