🔗

iOS: TestFlightが使えなくなる呪いとその解呪法

2023/09/27に公開

iOSエンジニアなら実機でリリースビルドの動作確認するためにTestFlightを使いますよね。
実はこのTestFlight、使い方を誤ると内部テスターとしてアプリをインストールできなくなる呪いがかかることをご存知でしょうか?

まず、TestFlightの配信形態についてですが、内部テスト外部テストの2種類があります。

内部テストは審査なしでApp Store Connectにアップロードしたアーカイブをインストールすることができる開発者向けの配信形態です。

外部テストは審査ありでベータ版をパブリックに配信できる開発関係者向けの配信形態です。インストールしたい人のApple Accountを登録して招待するタイプと、リンクを知っている人なら誰でもインストール(最大10000人)できるようになるパブリックリンクを発行するタイプの2通りがあります。

開発者の場合、リリース版の動作確認をするのに一々審査を通すのは嫌ですよね。気軽に扱いたいので内部テストを活用したいと思います。しかし、扱い方を誤るとこの内部テストが利用できなくなるのです。

呪いの内容

内部テスターとして招待の取り消しと再招待を何度しても、TestFlightをアンインストールしても、Apple Accountのログアウト/再ログインをしても、iPhoneを再起動しても、何をしても、iPhoneに内部テスター配信のアプリをインストールすることができなくなります。招待メールからTestFlightを開くと、下の画像のような Couldn't Load App というエラーが表示されます。


ダメな時のTestFltighのエラー

呪い発動の手順

  1. iPhoneにApple Account (A)でサインインしている
  2. TestFlightでApple Account (B)に対して招待を送る
  3. iPhoneのTestFlightで2の招待を承諾する
  4. TestFlightで内部テスターを明示的に終了せずに、iPhoneを初期化あるいは手放す
  5. 別のiPhone(あるいは初期化したiPhone)にApple Account (B)でサインインする
  6. TestFlgithの内部テスターを始めようとする
  7. 呪いにかかる

要はiPhoneにサインインしているApple AccountとTestFlgithで内部テスターに招待しているApple Accountが異なる状態で内部テスターを始めてしまった後に、内部テスターを明示的に終了せずにApple Accountを統一しようとすると呪いにかかります。

なぜこのようなことが起きるかというと、例えば、社用端末のiPhoneに普段使いのApple Accountでサインインしており、Developer Programには別の仕事用のApple Accountを使っている場合などがあり得ます。私の場合は社用iPhoneが2年リース式で、iPhoneの初期化はしても内部テスターの終了を明示的に行わないまま返却したために何も対処ができなくなり、呪いにかかりました。

斯くして、まるで獄門疆に封印された五条悟のように、私はTestFlightの使用を禁じられたのです。

解呪法

Apple Developer Programのサポートに問い合わせたところ、最初の2ヶ月間は返答が来ず無視されましたが、ちょっと怒っているよ感のある文章でリマインドを送ったところ返答をもらえました。

返答のポイントを挙げると以下のような感じです。

  • 一度でも、招待メールに紐づくApple Accountとは異なるApple Accountでログイン中のデバイス上でテストを行うとエラーが発生し、ビルドが失効する90日間はテストが不可となる
  • ビルドの招待が失効する90日間を待った後、再度招待すると、システム上のデータがクリアになり、テストができるようになる
  • 一度はApple Accountに紐づく全てのビルド招待が失効する必要がある

つまり、呪いを解くには、該当Apple Accountの内部テスター/外部テスターの全ての招待を取り消して有効期限が切れる90日間待てば良いということです。

_人人人人人_
>90日間!?<
 ̄丫丫丫丫丫 ̄

ただでさえ問い合わせから2ヶ月も待ってるのにさらに3ヶ月待てという回答に絶望しました。

解呪

そして90日間待ち、緊張が走る中TestFlgith内部テスターの招待を再び行ったところ...


TestFlightで内部テスト版のインストールが成功

無事内部テスト版をインストールすることができました! 🎉🎊🏆🎖️🍖🍣🥂

呪いへの予防

まず、何はともあれ、iPhoneにサインインするApple AccountとTestFlightで招待するApple Accountを統一することです。これで何も問題は起きません。

次に、もしもすでに異なるApple Accountを使っちゃってるよ〜という場合は、明示的にTestFlightで内部テスターを終了してApple Accountの統一を行えば良いと思います。試してはいませんが、おそらく呪いを防ぐことができる手段です。

追記 - 呪いの詳しい特性

追加で分かったことがあるので、そちらも記載しておきます。

実はiCloudとAppStoreでは別々のApple Accountを利用してサインインできます。TestFlightを開始するときに適用されるアカウントはAppStoreの方です。

TestFlightでサインインされているApple AccountとTestFlightでテスターとして招待したApple Accountが異なる状態でテスト版を利用することが可能ですが、この食い違った状態で端末のApple Accountからサインアウトしてしまうとロックがかかって呪いにかかるようです。

逆に言えば、AppStoreのApple AccountとTestFlightでテスターとして招待するApple Accountが同一であれば、呪いは発動しないようです。iCloudとAppStoreのApple Accountを別々にできる点を活かせば、呪いを回避することもできそうです。

ただし、端末内で利用するApple Accountを目的によって複数使い分けるのはかなりリスクが高い行為だと思います。分かっている人でも慎重に扱わないといけませんし、普段からApple Accountを頻繁にいじらない人の場合、長期間触れていなければどうすべきかを忘れそうです。

Discussion