爆速でFlutterアプリをTestFlightに投げる環境のつくりかた


想定読者

  • 毎週何個もアプリをデプロイする忙しいPoC屋
  • 単に今時のデプロイ環境を学びたい人

方針

  • アプリのコードを書き始める前に、まずfastlane環境の構築からTestFlightアップロードまでをやる
  • デプロイが先!コードがあと!

前提/検証環境

  • Mac OSX Catarlina
  • いい感じのバージョンのXcodeインストール済
  • Homebrewインストール済み
  • fastlane match用のリポジトリが作成済

マシンで1度だけやればOKな手順

  1. Homebrewのパッケージをインストール
  2. direnv環境の構築
  3. fastlane用に.envrcファイルの作成

アプリ毎にやる手順

  1. flutterプロジェクト作成
  2. fastlane initでfastlane/AppFileを生成
  3. fastlane matchでプロビジョニングプロファイルの生成
  4. Xcodeでプロビジョニングプロファイルを指定

マシンで1度だけやればOKな手順

1. Homebrewでパッケージのインストール

  • コマンドラインで入れるのは二流っぽいので今時はBrewfileを置いてbrew bundle
$ brew tap Homebrew/bundle
$ touch Brewfile
$ (いい感じのエディタコマンド) Brewfile
# Brewfile

brew "direnv"
brew "fastlane"
brew "cocoapods"

というBrewfileを置いて


$ brew bundle

2. direnv環境を構築

  • パスワードとかデリケートな情報をうっかりお漏らししないように、かつ毎回入力するのはしんどいのでdirenvを使ってそれらをディレクトリ毎に指定できる環境変数に追い出すようにする。
  • すでにBrewfileからdirenv自体はインストール済みなので設定を実施
# bashの人は.bashrcに読み替えて
$ echo 'eval "$(direnv hook $SHELL)"' >> ~/.zshrc 

3. fastlane用に.envrcファイルの作成

  • .envrcにそのフォルダでだけ使える環境変数を閉じ込める
  • 超セキュアな情報なのでコミットしないように注意
$ touch .envrc
$ (いいかんじのエディタコマンド) .envrc
# .envrc

export FASTLANE_PASSWORD={AppleIDのパスワード}
export MATCH_USERNAME={AppleID(メールアドレス)}
export PRODUCE_USERNAME={同上}
export MATCH_PASSWORD={fastlane matchのパスワード(リポジトリを複合するためのパス)}
export MATCH_GIT_URL={fastlane match用ファイルが置いてあるgitのURL(だいたいGitHub)}
export FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD={後述}

注:FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORDについて

このURLの「App用パスワード」から生成したパスワードを入れる。
これがないと、TestFlightにアップロードする時に二段階認証くらったりする

1. アプリ毎にやる手順

1. flutterプロジェクト作成

  • flutter createなりAndroid Studioで新規作成
  • マシン毎の手順3で作った.evnrcをコピーしてきてdirevn allow
    • 尚、書き換えるたびに実行する必要がある。

$ flutter create {アプリ名}
$ cd {アプリ名}
$ cp ~/.envrc ./   # .evnrcをどっかから持ってくる
$ direnv allow     # 忘れずに

2. fastlane initでfastlane/AppFileを生成

$ cd ios
$ fastlane init -u $MATCH_USERNAME
  • fastlane initの実態はfastlane produce
  • 2回アプリ名を聞かれるが、1度目はDev Centerへ登録するアプリ名。
  • 2度目の質問はiTunes Connectへの登録名。2度目の名前は世界で唯一である必要があるので注意。

3. fastlane matchでプロビジョニングプロファイルの生成

$ fastlane match appstore
$ fastlane match development
  • TIPS: testFlightに飛ばすだけならappstoreだけやれば良い。実機実行のためのにdevelopmentが必要。
  • TIPS: fastlane match init.evnrcの環境変数に全部書いてあるので不要

4. Xcodeでプロビジョニングプロファイルを指定

  • プロジェクト設定のSigining Capabilityのタブ(下記画像)
    • Automatically manage signingのチェックを外す
    • debugにはmatch Development〜のプロビジョニングプロファイルを指定
    • releaseにはmatch AppStore〜のプロビジョニングプロファイルを指定

デプロイの時間だ!

$ fastlane beta

結論

  • 全然爆速じゃない。手間かかりすぎ。

補足:どうしてcocoapods/fastlaneをHomebrewからインストールするのか?

  • fastlanecocoapods自体のバージョンは、外部の環境に依存しているので、Gemfile/Gemfile.lock等でバージョンを固定することは、他の端末でcheckout&buildをするときにトラブルの原因になりやすい。
    • 同様にaws-clifirebase-cliもHomebrew(Brewfile)のほうが良いと考えている
  • トラブった場合、brew upgradeで解決するほうが筋が良さそう