想定読者
- 毎週何個もアプリをデプロイする忙しいPoC屋
- 単に今時のデプロイ環境を学びたい人
方針
- アプリのコードを書き始める前に、まずfastlane環境の構築からTestFlightアップロードまでをやる
- デプロイが先!コードがあと!
前提/検証環境
- Mac OSX Catarlina
- いい感じのバージョンの
Xcode
インストール済 -
Homebrew
インストール済み- 公式ドキュメントを参照
-
fastlane match
用のリポジトリが作成済- まだ作ってない人は @kotarella1110 さんの こちらの記事 がおすすめ!
マシンで1度だけやればOKな手順
- Homebrewのパッケージをインストール
-
direnv
環境の構築 -
fastlane
用に.envrc
ファイルの作成
アプリ毎にやる手順
- flutterプロジェクト作成
-
fastlane init
でfastlane/AppFileを生成 -
fastlane match
でプロビジョニングプロファイルの生成 - 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からインストールするのか?
-
fastlane
やcocoapods
自体のバージョンは、外部の環境に依存しているので、Gemfile/Gemfile.lock等でバージョンを固定することは、他の端末でcheckout&buildをするときにトラブルの原因になりやすい。- 同様に
aws-cli
やfirebase-cli
もHomebrew(Brewfile)のほうが良いと考えている
- 同様に
- トラブった場合、brew upgradeで解決するほうが筋が良さそう