鍵もパスワードも無いのに、コマンド一つで審査に提出できた話
Wavelengthの審査が一度リジェクトされ、修正版を再提出することになった。ビルドを書き出してApp Store Connectにアップロードする、よくある作業のはずだったが、いざやろうとして手が止まった。前回、いったいどうやってアップロードしたんだっけ。
TestFlightは使わず、開発ビルドのテストからそのまま審査提出、という流れで進めていたアプリだった。前回の作業の記憶は曖昧で、「サインインしてと言われて、サインインしたらそのまま最後までやってくれた」というくらいしか覚えていなかった。
鍵を探したが、無かった
アップロードを自動化するといえば、まず思い浮かぶのはApp Store Connect用の鍵(APIキー)を使う方法だ。これがあれば、コマンドラインだけで完結できる。デスクトップのフォルダを探すと、それらしき鍵ファイルが2つ見つかったのだが、作成された日時を照らし合わせると、どちらもプッシュ通知用に作った鍵だと分かった。念のため管理画面を確認してもらったところ、そもそもこの鍵を発行する権限自体がアカウントに無いことも判明した。もう一つの手段であるアプリ用パスワードも、履歴を漁ったが見つからなかった。
画面操作を自動化しようとした
「鍵が無いなら、前回は画面から手動でアップロードしたはずだ」と考え、それを自動化できないか試した。macOSにはアプリの画面操作をスクリプトから行う仕組みがあり、開発ツールは既にそのアカウントでサインイン済みだったので、メニューを開いてボタンを探す、というところまでは進めた。ところが目当てのボタンに名前が付いておらず、機械的に特定するのに苦戦していたところで、「直接クリックもしてないと思うけどなぁ」と言われた。よく考えると、画面をポチポチ操作するような形跡は確かに記憶にない。方針を変えることにした。
拍子抜けするほど単純な発見
ここで思い出したのが、コード署名がこれまで一度もエラーにならず、あっさり通っていたという事実だった。証明書やプロビジョニングまわりで何のトラブルも起きていない。つまり開発ツール自体が、既にそのApple IDで有効なセッションを持っているということだ。だとすれば、コマンドライン経由でもそのセッションをそのまま使い回せるのではないか。
試してみたのは、書き出し設定の中の「行き先」を、通常のファイル書き出し用の設定から「アップロード」に変えるだけ、という単純な変更だった。実行すると、進捗ログが流れ始め、しばらくしてアップロード成功のメッセージが出た。鍵の指定も、パスワードの入力も、二段階認証も、画面のクリックも、何一つ要らなかった。コマンド一発で、ビルドの作成からアップロード完了まで到達した。これがおそらく、前回「気づいたら全部終わっていた」の正体だった。
ついでに確認したこと
もう一つ、地味に大事なのが、プッシュ通知に関わる設定が正しく本番用になっているかの確認だった。ビルドを作った直後の状態ではまだ開発用の設定のままで、これは異常ではない。配布用に書き出す(またはアップロードする)工程を経て初めて、本番用に切り替わる。なので確認すべきは、アーカイブした直後の状態ではなく、実際にアップロードされた後のビルドの中身だった。
持ち帰ったこと
- 開発ツールが既にサインイン済みなら、書き出し設定の「行き先」をアップロード用に変えるだけで、鍵もパスワードも画面操作も無しに審査提出まで到達できることがある
- 「前回どうやったか忘れた」を調べるときは、複雑な自動化を疑う前に、まず一番シンプルなコマンドから試す価値がある
- プッシュ通知まわりの設定は、アーカイブ直後の状態ではなく、配布用に書き出された後の実際のビルドで確認する