アプリの申請を完全に自動化する
ソースコードをpushしたら、あとは何も考えなくてもストアにリリースされる。
そんな環境を作ってみたのでメモ
まだちゃんと動かなさそう(fastlane_sessionが1ヶ月でexpireする)
全体の流れ

↑こんな感じ
Bitriseの部分は別になんでも良いのだけど、無料枠があったのでBitriseにしている。
automate.io は、いわゆるIFTTTのようなサービス。
似たようなサービスでメルカリの採用しているZapierと言うのがあるが、カスタムWebhookがプレミアム専用なのでautomate.ioを使うことにした。
正直Zapierの方がsampleみながらzap作れるしgmailの取得速いし、正規表現ちゃんと使えるのでZapierの方がおすすめです。
GithubにpushしてBitriseからappstore connectへアップロードする
ここは簡単。
bitrise.ioにサインアップしたら、チュートリアルの通りに進めばリポジトリとbitriseの連携が完了する。
あとは「Deploy to iTunes Connect - Application Loader」というstepを追加して、適宜情報を書き込めばアップロードされるようになる。
注意点としては、build numberをincrementすることを忘れずに。同じビルド番号のipaはアップロードに失敗します。
build numberの設定は「Set Xcode Project Build Number」というStepを使えば簡単に設定できます。
そして、書いていて思ったけどこの時点でappstore connectに新規のバージョンが無い可能性があるのでここはfastlaneのdeliver使った方がいいですね。
AppStore ConnectのCompleted Processを待つ
ipaをアップロードすると、appleは自動的にipaの健康状態をチェックしてくれます。(悪いことしているとこの時点で弾かれる)
ここは大体数分から数時間と幅があるのでひたすら待ちます。
待っていると、AppleからApp Store Connect: Version 1.0 (1) for AppName has completed processing.
というタイトルのメールが届きます。
Completed Processingのメールが届いたらbitriseのworkflowを発火させる
automate.ioを使ってgmailを監視して、メールが届いたらbitirseのapiを叩きます。
メールにはbuild numberとversionも記載されているので、これらをパースしてbitriseの環境変数に乗せておきます。

automate.ioのbotの中身はこんな感じ。
正規表現機能がガバガバなので、タイトルをスペースで区切って取り出しています。
bitriseからサブミットする
automate.ioのwebhookから叩かれたworkflowでfastlaneのdeliverを呼びます。
この辺は特に難しいところはないです。
サブミットするビルドのbundle numberなどは環境変数に入っているのでそれを使います。
fastlaneのascへの接続はFASTLANE_SESSIONを利用していますが、2FA切ったアカウントで認証しても良いと思います。
完成
あとはbitriseのtriggerなどを調整しながら、使いやすいようにしていきましょう。