Fastlane - tsutsumikeiichi/test-i-wiki GitHub Wiki

Envファイルの作成

Fastlane コマンドを実行する前に各自の環境に環境変数を設定する必要があります。

otonari-iOS/fastlane/.envファイルを作成する。
このファイルでパスワードなどのgitで管理するべきでないパラメータや、環境変数を管理している。

FASTLANE_USER=(Apple Store Connectにログインするメアド)
APP_STORE_CONNECT_API_KEY_ID=(App Store Connect API のキーID)
APP_STORE_CONNECT_API_ISSUER_ID=(App Store Connect API の Issuer ID)
APP_STORE_CONNECT_API_KEY_CONTENT=(App Store Connect API の秘密キー)
# ex) key_content: '-----BEGIN PRIVATE KEY-----\nfoobar\n-----END PRIVATE KEY-----'
SLACK_URL=(SLACKの投稿先チャンネルURL)

envファイルは以下場所に置きました。
https://drive.google.com/drive/folders/1zTkMfYvs_0YbsdphsUeHWoqdUn2zMDTD
env.txt.envにリネームし、FASTLANE_USERは自分のアカウントに書き換えてください。
そしてotonari-iOS/fastlane/以下にディレクトリに置いてください。

またFastlaneコマンドの初回実行時にはApple IDアカウントのパスワードが求められるので入力してください(macOSキーチェーンに保存される)。

App Store Connect API

2021年2月以降、App Store Connect にサインインするすべてのユーザは2段階認証が必須となったため、パスワード使用は止めて App Store Connect API を使用しています。

Using App Store Connect API
https://docs.fastlane.tools/app-store-connect-api/

アプリケーション固有パスワード -> App Store Connect API を使うため使用中止

2021年2月以降、App Store Connect にサインインするすべてのユーザは2段階認証が必須となったため、以下2つの環境変数の追加が必要です。
https://docs.fastlane.tools/best-practices/continuous-integration/#application-specific-passwords

FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD

以下のAppleアカウントの管理画面にログインして、App用パスワードとして発行したものを設定します。
https://appleid.apple.com/

FASTLANE_SESSION

以下 spaceauth コマンドで生成したクッキーを設定します。
このクッキーは有効期限が1ヶ月と限られており、定期的に再認証が必要となります。

$ bundle exec fastlane spaceauth -u [email protected]

CircleCI で Fastlane を実行するには、CircleCI の設定画面にあるEnvironment Variablesに登録しておく必要があります。

Beta配信

配信には Firebase App Distribution を利用しています。
コンソールはこちら
事前に Firebase CLI をこちらを参考にインストールしておいてください。

$ bundle exec fastlane ios build_beta

または Github のbeta ブランチに push することで Circle CI により上記 lane が実行されます。

UDID 追加

$ bundle exec fastlane run register_device name:"NAME" udid:"UDID"

Beta用プロビジョニングプロファイルを再生成する

UDID を追加した場合

$ bundle exec fastlane ios update_beta_profiles

Development 証明書が期限切れした場合に Development 証明書の再作成、Development プロビジョニングプロファイルを再生成する

$ bundle exec fastlane ios delete_development_certs_and_profiles
$ bundle exec fastlane ios create_development_certs_and_profiles

Distribution 証明書が期限切れした場合に Distribution 証明書の再作成、AppStore プロビジョニングプロファイルを再生成する

$ bundle exec fastlane ios delete_distribution_certs_and_profiles
$ bundle exec fastlane ios create_appstore_certs_and_profiles

App Store Connect にバイナリのアップロード&メタデータ登録

$ bundle exec fastlane ios build_release_appstore

または Github の appstore ブランチに push することで Circle CI により上記 lane が実行されます。

このコマンドでバイナリアップロード、AppStoreConnect のメタデータ登録まで行います。
コマンド実行前にメタデータ fastlane/metadata/ の更新を行ってください。
リリースノート fastlane/metadata/ja/release_notes.txt は必須項目なので毎回更新してください。

App Store Connect から登録済みのメタデータをダウンロードする

$ bundle exec fastlane deliver download_metadata --app_identifier 'love.otonari' --force true

App Store Connect から登録済みのスクリーンショットをダウンロードする

$ bundle exec fastlane deliver download_screenshots --app_identifier 'love.otonari'

レビュー申請

上記コマンド build_release_appstore でバイナリアップロード、AppStoreConnect のメタデータ登録まで終わらした状態で実行してください。
このコマンドを実行することで最新のアップロード済みバイナリと紐づけ、審査申請まで行います。

$ bundle exec fastlane ios submit_review

Fastlaneの内容

  lane :submit_review do
    upload_to_app_store(
      submit_for_review: true, # レビュー申請
      automatic_release: false,
      force: true,
      skip_metadata: true, # メタデータ更新はスキップ
      skip_screenshots: true,
      skip_binary_upload: true, # バイナリアップロードはスキップ

      submission_information: {
        add_id_info_uses_idfa: true,
        add_id_info_serves_ads: true,
        add_id_info_tracks_install: true,
        add_id_info_tracks_action: true,
        add_id_info_limits_tracking: true
      }
    )
  end

upload_to_app コマンド
https://docs.fastlane.tools/actions/upload_to_app_store/
submission_information設定
https://github.com/artsy/eigen/blob/faa02e2746194d8d7c11899474de9c517435eca4/fastlane/Fastfile#L131-L149

Fabric Crashlytics に dSYM をアップロードする -> Fabric サービス終了に伴い廃止

Bitcode を有効にしている場合は、App Store Connect からダウンロードする必要がある。
バイナリアップロード後に App Store Connect 側で自動生成されて、しばらくするとダウンロード可能となる。
たまに生成に時間がかかる場合があり、作成完了まで数日かかった場合もあった。

最新版

$ bundle exec fastlane ios upload_symbols_appstore

バージョンを指定

$ bundle exec fastlane ios upload_symbols_appstore version:1.4.0

App Store Connect から dSYM をダウンロードする -> Xcode14 から Bitcode が廃止になったためASCからのダウンロードは不要になった

ダウンロード前に以前落としたものがあれば削除しておく。

$ find fastlane/appDsyms -type f -name "*.dSYM.zip" | xargs rm $1

現状、dSYM ファイルのダウンロードは App Store Connect API に未対応なので2FAのコードを手動で入力する必要がある。

# 最新ビルド
$ bundle exec fastlane run download_dsyms app_identifier:"love.otonari" version:"latest" output_directory:"fastlane/appDsyms"

# バージョン&ビルドナンバーを指定
$ bundle exec fastlane run download_dsyms app_identifier:"love.otonari" version:"2.8.0" build_number:"1961" output_directory:"fastlane/appDsyms"

Firebase Crashlytics に dSYM をアップロードする -> Xcode14 から Bitcode が廃止になったためASCからのダウンロードは不要になった

  1. App Store Connect から dSYM をダウンロードする。
    TestFlight > 対象のビルド > ビルドのメタデータ > dSYMをダウンロード
    または Fastlane でダウンロードする。↑参照。

  2. ターミナルで otonari-iOS ディレクトリに移動し、 CocoaPods でインストールした FirebaseCrashlytics の以下コマンドを使ってアップロードする。

# Fastlane でダウンロードしたdSYM指定
$ find fastlane/appDsyms -type f -name "*.dSYM.zip" | xargs -I {} Pods/FirebaseCrashlytics/upload-symbols -gsp otonari-iOS/Resources/Plists/GoogleService-Info-Release.plist -p ios {}
# or 直接指定
$ Pods/FirebaseCrashlytics/upload-symbols -gsp otonari-iOS/Resources/Plists/GoogleService-Info-Release.plist -p ios 'fastlane/appDsyms/love.otonari-2.8.0-1961.dSYM.zip'

# ブラウザでダウンロードしたdSYM指定
$ Pods/FirebaseCrashlytics/upload-symbols -gsp otonari-iOS/Resources/Plists/GoogleService-Info-Release.plist -p ios ~/Downloads/appDsyms

Fastlane のアップデート

定期的に行う

$ bundle update fastlane