[Xcode/Swift] FastlaneでXcodeからFirebase App Distributionアプリを配信する

近頃CircleCIを勉強していてなるほどわからん状態が続いている、一旦ローカル環境からFirebaseにアプリ配信をすることが出来たのでメモ書きで残します。

Firebase

対象アプリのFirebaseプロジェクトを作成し、GoogleService-Info.plistをプロジェクトに入れておく。

アプリIDの確認

Firebaseのコンソールから、プロジェクトの設定マイアプリから確認可能、一旦どこかにメモしておく。

CLI トークンの生成

以下のCircleCI公式ページを参考に、TOKENを作成してこれもどこかに一旦メモしておく

  1. コマンド curl -sL https://firebase.tools | bashで、Firebase CLI をダウンロードし、ローカルにインストールします。
  2. firebase login:ci というコマンドでログインをトリガーします。
  3. ブラウザウィンドウでサインインを完了し、ターミナルの出力で提供されたトークンをコピーします。
  4. CircleCI のプロジェクト設定で、 FIREBASE_TOKEN という名前の新しい環境変数を作成し、トークンの値を入力します。

証明書管理リポジトリの作成

こんな感じ

リポジトリを作成

Githubで新しいリポジトリを作成、名前は好きなものに、タイプはPrivate (Publicで公開していい内容ではないので)

対象のアプリから証明書を追加する

対象のアプリディレクトリからターミナルを開き、以下を順に入力

fastlane match appstore

fastlane match adhoc

fastlane match development

ターミナルで証明書を保存するリポジトリURLを聞かれるので↑で作ったリポジトリのURLを貼る

追加されたか確認

正常に保存されたら勝手にPushされているのでリポジトリをリロードして確認する。

Gemfile

Gemfileを作成して、bundle installしておく、Gemfile.lockが作成出来たらヨシ。

source "https://rubygems.org"

gem "fastlane"

plugins_path = File.join(File.dirname(__FILE__), 'fastlane', 'Pluginfile')
eval_gemfile(plugins_path) if File.exist?(plugins_path)

Fastlane

対象のプロジェクトディレクトリでターミナルを開き、以下を入力 (プロジェクトにすでにfastlaneフォルダが存在する場合は不要)

fastlane init

対象SchemeやAppleIDログインPW等色々聞かれるので合ったものを選択

fastlaneフォルダに必要なファイルは以下の通り (多分)

default_platform :ios

platform :ios do
  before_all do
    setup_circle_ci
  end

  desc "Upload to Firebase"
  lane :upload_firebase do
    match(type: "adhoc")
    gym(scheme: "<#Scheme名#>")
    firebase_app_distribution(
      app: "<#Firebase ID#>",
      release_notes: "This is a test release!",
      firebase_cli_token: "<#Firebase Token#>" # CLIトークン、一旦ベタ書きでOK
    )
  end
end
# Matchfile

# 使用するストレージモードの設定
storage_mode("git")

# 証明書のタイプを指定
type("appstore") # 証明書のタイプ: appstore, adhoc, enterprise, development から選択

# 証明書管理用のGitリポジトリURLを設定
git_url("<#URL#>") 

# 使用するブランチを指定
git_branch("master") # 証明書が格納されている正しいブランチを指定

# Apple Developer アカウントに対応するチームID
team_id("<#Team ID#>") # 実際のApple DeveloperチームIDに置き換えてください

# このMatch設定に対するアプリのバンドルIDを指定
app_identifier(["<#Bundle ID#>"]) # アプリのバンドルIDに置き換え

# Gitリポジトリにコミットする際のユーザー情報
git_full_name("<#ユーザ名#>")
git_user_email("<#メールアドレス#>")

# 新しいデバイス用に証明書を強制的に生成するオプション(必要に応じて)
force_for_new_devices(true)
# Autogenerated by fastlane
#
# Ensure this file is checked in to source control!

gem 'fastlane-plugin-firebase_app_distribution'
# fastlane/Appfile
apple_id "<#Apple DeveloperにログインするときのID#>"
app_identifier "<#App Identifier#>"

report.xmlとREADME.mdは実行したことがないと最初はない気がするので一旦無視でOK。

長い下準備も終わりで、次に実際に実行していきましょう。

Terminalで実行する

以下を実行

bundle exec fastlane upload_firebase

Apple IDやその他色々聞かれたら適切なものを入力する、結構時間がかかるかも (3分くらい?)

完了したらUpload IPA SuccessfullyみたいになってTerminalの処理も完了するので、Firebaseコンソールを確認する。

コンソールのApp Distributionで対象のアップロードが上がっていたら完了。