iOS: TestFlightが使えなくなる呪いとその解呪法
iOSエンジニアなら実機でリリースビルドの動作確認するためにTestFlightを使いますよね。
実はこのTestFlight、使い方を誤ると内部テスターとしてアプリをインストールできなくなる呪いがかかることをご存知でしょうか?
まず、TestFlightの配信形態についてですが、内部テストと外部テストの2種類があります。
内部テストは審査なしでApp Store Connectにアップロードしたアーカイブをインストールすることができる開発者向けの配信形態です。
外部テストは審査ありでベータ版をパブリックに配信できる開発関係者向けの配信形態です。インストールしたい人のApple IDを登録して招待するタイプと、リンクを知っている人なら誰でもインストール(最大10000人)できるようになるパブリックリンクを発行するタイプの2通りがあります。
開発者の場合、リリース版の動作確認をするのに一々審査を通すのは嫌ですよね。気軽に扱いたいので内部テストを活用したいと思います。しかし、扱い方を誤るとこの内部テストが利用できなくなるのです。
呪いの内容
内部テスターとして招待の取り消しと再招待を何度しても、TestFlightをアンインストールしても、Apple IDのログアウト/再ログインをしても、iPhoneを再起動しても、何をしても、iPhoneに内部テスター配信のアプリをインストールすることができなくなります。招待メールからTestFlightを開くと、下の画像のような Couldn't Load App
というエラーが表示されます。
ダメな時のTestFltighのエラー
呪い発動の手順
- iPhoneに
Apple ID (A)
でサインインしている - TestFlightで
Apple ID (B)
に対して招待を送る - iPhoneのTestFlightで2の招待を承諾する
- TestFlightで内部テスターを明示的に終了せずに、iPhoneを初期化あるいは手放す
- 別のiPhone(あるいは初期化したiPhone)に
Apple ID (B)
でサインインする - TestFlgithの内部テスターを始めようとする
- 呪いにかかる
要はiPhoneにサインインしているApple IDとTestFlgithで内部テスターに招待しているApple IDが異なる状態で内部テスターを始めてしまった後に、内部テスターを明示的に終了せずにApple IDを統一しようとすると呪いにかかります。
なぜこのようなことが起きるかというと、例えば、社用端末のiPhoneに普段使いのApple IDでサインインしており、Developer Programには別の仕事用のApple IDを使っている場合などがあり得ます。私の場合は社用iPhoneが2年リース式で、iPhoneの初期化はしても内部テスターの終了を明示的に行わないまま返却したために何も対処ができなくなり、呪いにかかりました。
斯くして、まるで獄門疆に封印された五条悟のように、私はTestFlightの使用を禁じられたのです。
解呪法
Apple Developer Programのサポートに問い合わせたところ、最初の2ヶ月間は返答が来ず無視されましたが、ちょっと怒っているよ感のある文章でリマインドを送ったところ返答をもらえました。
返答のポイントを挙げると以下のような感じです。
- 一度でも、招待メールに紐づくApple IDとは異なるApple IDでログイン中のデバイス上でテストを行うとエラーが発生し、ビルドが失効する90日間はテストが不可となる
- ビルドの招待が失効する90日間を待った後、再度招待すると、システム上のデータがクリアになり、テストができるようになる
- 一度はApple IDに紐づく全てのビルド招待が失効する必要がある
つまり、呪いを解くには、該当Apple IDの内部テスター/外部テスターの全ての招待を取り消して有効期限が切れる90日間待てば良いということです。
_人人人人人_
>90日間!?<
 ̄丫丫丫丫丫 ̄
ただでさえ問い合わせから2ヶ月も待ってるのにさらに3ヶ月待てという回答に絶望しました。
解呪
そして90日間待ち、緊張が走る中TestFlgith内部テスターの招待を再び行ったところ...
TestFlightで内部テスト版のインストールが成功
無事内部テスト版をインストールすることができました! 🎉🎊🏆🎖️🍖🍣🥂
呪いへの予防
まず、何はともあれ、iPhoneにサインインするApple IDとTestFlightで招待するApple IDを統一することです。これで何も問題は起きません。
次に、もしもすでに異なるApple IDを使っちゃってるよ〜という場合は、明示的にTestFlightで内部テスターを終了してApple IDの統一を行えば良いと思います。試してはいませんが、おそらく呪いを防ぐことができる手段です。
Discussion