現在は秘密鍵を利用するこちらの方法で簡単にバイナリアップできるようになっています。
以下は、過去記事
CircleCIでiOSアプリをAppStoreConnectにアップしようとしたところ盛大にハマったのでノウハウを共有します。
まずFastlaneの公式ドキュメントを確認します。
・2FAでない専用のaccountを作るのが簡単
とありますが、今回は2FAが有効なユーザーで自動アップロードを行いたいです。
ジョブに必要な環境変数
ジョブの設定に必要な環境変数は次の通りです。
- FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD
アプリ用パスワードです。 - FASTLANE_USER
Apple IDです - FASTLANE_PASSWORD
Apple IDのパスワードです - FASTLANE_SESSION
2FA済みのセッションです。取得方法は後述します。 - MATCH_PASSWORD
fastlane match
の復元パスワードです
検証に使用したaccountが複数チームに所属していたため、私の環境では FASTLANE_ITC_TEAM_NAME
も指定しましたが、1つのチームにだけ所属しているなら必要ないと思います。
2FAアカウントですがパスワードを環境変数に設定する必要があるのが少し不気味です。でも外したら動かないので必要なんでしょう。
FASTLANE_SESSION は 認証したリージョンと同じリージョンでないと使用できないので、実行中のCircleCIのコンテナにVNCで接続して、FASTLANE_SESSIONを取得します。
30日ごとにFASTLANE_SESSIONの生成が必要になりますが、現時点で他に方法はなさそうです。
FASTLANE_SESSION の取得方法
VNC接続手順を参考にしました。
- CircleCIのジョブ失敗画面から、"Rerun job" with SSH を実行
- コンテナへの接続情報を確認する
ジョブの詳細に以下の用にsshでコンテナに接続するために情報が表示されるので確認する
- ローカルMacからコンテナにssh接続する(ローカルで実行)
sshの接続情報をもとにssh接続する。鍵はGitHubリポジトリへ接続するための鍵と同じものを使用する。私の環境では-i
で明示的に鍵を指定する必要がありました。
ssh -p <指定されたポート> <指定されたIP> -i ~/ssh/hoge_rsa
- vnc用のユーザーを作成する(コンテナで作業)
sudo /usr/sbin/sysadminctl -addUser vncuser -fullName "VNC User" -password <password> -admin
- vnc 接続用のポートフォワーディング設定(ローカルで実行)
ssh -p 54782 <コンテナのIP> -L5901:localhost:5900 -N -i ~/ssh/hoge_rsa
- vnc viewerでvnc接続する
viewerは何でも良いと思いますが私はrealvncを使用しました。
接続先はlocalhost:5901
です。
ログイン画面が出てきたら先程作成したvncuser
でログインします。パスワードは先程指定したものです。 - FASTLANE_SESSIONの取得
以下のコマンドを実行しセッション情報を取得します。
fastlane spaceauth -u <Apple ID>
- セッション情報をCircleCIの環境変数に設定する
確認
すべてが正しく設定されていれば fastlane deliver
が動くはずです。
まとめ
CircleCIのサポートに問い合わせてどうにかCIにバイナリアップを組み込むことができました。
vncでコンテナに接続できるとは思っていなかったので勉強になりました。トラブルシューティングなどに応用できそうです。