TestFlightのMissing Complianceを解消して再発させない方法
著者:Mehdi Azizi
公開・9 分
Missing Complianceは、Appleが暗号化に関する申告を待っている状態です。App Store Connectでこのビルドのブロックを解除し、キーを設定すれば再発しません。
Missing Complianceはエラーではありません。暗号化についてのあなたの回答を待っているビルド、という意味です。 回答するまで、そのビルドはテスターに配信されません。今のビルドは、App Store ConnectのTestFlightタブで質問に答えれば解除できます。次のビルドからは、Info.plistにITSAppUsesNonExemptEncryptionキーを設定するか、Expoならapp.jsonにios.config.usesNonExemptEncryptionを設定すれば、このステータスは二度と出ません。
僕のiOSアプリはExpoで作っています。Solysのapp.jsonでは、このキーをfalseにして、ios.configとios.infoPlistの2か所に書いています。このガイドは、Appleのビルドステータスとベータビルドの輸出コンプライアンスのページに沿っています(2026年11月6日に再確認)。
Missing Complianceの意味
Appleのビルドステータス一覧では、一文で定義されています。輸出コンプライアンスの書類が不足していて、あなたの対応が必要、ということです。表示は黄色で、これはあなたかAppleの対応待ちで処理が進行中であることを示す色です。説明文にも、あなたの対応が必要だと書かれています。
なぜAppleはこれを聞くのでしょうか。暗号化の輸出規制に関するページに理由があります。TestFlightやApp Storeにビルドを送ると、それはアメリカのサーバーに送られます。アプリがアメリカとカナダ以外で配信されるなら、会社がどの国にあってもアメリカの輸出法の対象になります。そして、アプリが暗号化を使用・含有・組み込みしている時点で、Appleはそれを暗号化ソフトウェアの輸出とみなします。
その結果、Info.plistがすでに答えていない限り、新しいバージョンのたびにApp Store Connectがコンプライアンスの質問をしてきます。 Expoの最初のビルドがほぼ必ずMissing Complianceになるのはこのためです。
待機中のビルドを解除する
手順はAppleのベータビルドの輸出コンプライアンスのページに基づいています。Account Holder、Admin、App Managerのいずれかのロールが必要です。
- Appsでアプリを開き、TestFlightタブを開きます。
- サイドバーのBuildsで、プラットフォームを選びます。
- Build列で、対象ビルドのアイコンまたは番号をクリックします。
- Provide Export Compliance Informationをクリックし、質問に答えます。
- 書類を求められたら、Go to App Encryption Pageをクリックして提出します。そうでなければSaveをクリックします。
Appleはショートカットも紹介しています。ビルドの横にあるManageリンクから同じ質問が開き、Choose Fileで承認済みの書類を添付できます。保存すると、ビルドはReady to Submitになります。内部グループ向けなら直接Testingになります。Ready to Testになるのは、外部テスターのベータ審査の後です。
Manageリンクがクリックできない場合は? まずチーム内のロールを確認してください。Appleは回答をAccount Holder、Admin、App Managerに限定していて、DeveloperやMarketingのアカウントでは回答できません。Appleはそれ以外の原因を記載していません。ビルドを送ったばかりなら、処理完了メールを待ってからページを再読み込みしてください。このメールについてはビルド番号とバージョンのガイドで詳しく説明しています。
もう二度と答えない:プロジェクトにキーを設定する
Appleはベータビルドのページで、アプリが暗号化を使わないこと、または免除対象であることをInfo.plistで宣言できると書いています。そうすれば、提出のたびに答える必要はなくなります。キーの名前はITSAppUsesNonExemptEncryptionです。Xcodeでは App Uses Non-Exempt Encryption と表示されます。
| ツール | ファイル | 場所 | 値 |
|---|---|---|---|
| Expo(EAS Build) | app.json | expo.ios.config | false |
| Expo(別の方法) | app.json | expo.ios.infoPlist | false |
| 素のReact Native | Info.plist | App Uses Non-Exempt Encryption | NO |
| Xcode、Swift | Info.plist | App Uses Non-Exempt Encryption | NO |
Expoではキー名がusesNonExemptEncryptionになります。設定リファレンスによると、これはビルドのInfo.plistにAppleのキーを書き込みます。またios.configはビルド専用で、本番のマニフェストには含まれません。
{
"expo": {
"ios": {
"config": {
"usesNonExemptEncryption": false
}
}
}
}
Expoでは、ios.infoPlistにAppleのキー名をそのまま書いて同じ値にすることもできます。これがSolysのapp.jsonの2行目です。ネイティブプロジェクトなら、Info.plistの1行で同じ宣言ができます。キーはApp Uses Non-Exempt Encryption(Xcodeでの表示名)、値はNOです。値は文字列ではなくブール値です。
キーが効くのは次のビルドからです。 すでに送ったビルドは、App Store Connectで回答するまでMissing Complianceのままです。2つの作業はどちらかで済むものではなく、両方必要です。
falseかtrueか:判断の仕方
AppleはNOの意味をこう定義しています。アプリが(サードパーティのライブラリを含めて)暗号化をまったく使っていない、または書類提出義務が免除される暗号化しか使っていない場合です。それ以外はYESです。
輸出規制のページによると、一般に免除されるのは、URLSessionによるHTTPS接続のような、システムに組み込まれた暗号化です。免除されないのは、自分で書いた、またはアプリに同梱した独自の暗号化です。輸出コンプライアンスの概要には大事な注意もあります。解釈の責任はあなたにあり、誤って免除を主張した場合の結果もあなたが負う、ということです。
HTTPSでAPIを呼び、設定を保存し、サブスクリプションを販売するExpoアプリなら、通常はfalseです。メッセージやファイル、保管庫を自前で暗号化するアプリならtrueで、Appleは書類を求めます。
反射的に
falseにしないでください。依存ライブラリを見直しましょう。エンドツーエンド暗号化のライブラリや自作の暗号化ストレージがあれば、書類提出が必要な側になります。
免除対象外の暗号化を使っている場合
暗号化書類のページに流れが書かれています。App InformationのApp Encryption Documentationの横にある追加ボタンで質問が開き、Choose Fileで書類を選んでSaveします。書類が十分かを判断するため、事前にアプリの説明文と配信状況を設定しておくよう求められます。書類がそろっていれば、審査はおよそ2営業日が目安です。
書類が承認されると、AppleからInfo.plistのITSEncryptionExportComplianceCodeキーに設定する値が提供されます。これを設定すれば、送るたびに質問されることはなくなります。審査中、ビルドにはWaiting for Export Compliance ReviewまたはIn Compliance Reviewと表示されます。あなたの対応は不要です。
Appleが挙げている注意点が2つあります。1つは輸出規制のページ、もう1つはコンプライアンスの概要にあります。
- 免除対象の暗号化でも、アメリカ政府への年次自己分類報告が必要になる場合があります。 免除対象外の暗号化を使い、Appleに書類を提出済みなら不要です。
- フランスも暗号化アプリの輸出入を規制しています。 Appleの概要では、対象分野としてセキュアストレージ、セキュア通信、ウイルス対策が挙げられ、銀行アプリと医療アプリは免除とされています。詳細はANSSIへの案内があります。
その後のTestFlightでの流れ
解除されたビルドは、通常のTestFlightビルドと同じ流れをたどります。TestFlightでiPhoneアプリをテストするのガイドで説明している通り、内部テスターにはすぐ、外部テスターにはベータ審査の後に配信され、ビルドステータス一覧によると90日で期限切れになります。使用済みのビルド番号や拒否されたファイルなど、Expoの送信で止まる他の原因はEASからApp Store Connectへの送信エラーに、全体の流れはEASでExpoアプリをApp Storeに公開するにまとめています。
iOS & Android Kitには、このキーを設定済みのExpoスターターコードと、最初のビルドからApp Storeページまでの道のりが入っています。公開を妨げているものがまだあるか知りたいなら、無料診断がいくつかの質問で答え、僕のApple却下対策チェックリストを送ります。全手順はApp Storeにアプリを公開するにあります。
よくある質問
TestFlightのMissing Complianceとはどういう意味ですか?
ビルドが輸出コンプライアンスの申告、つまり暗号化の使用についての回答を待っている状態です。Appleはこれを、あなたの対応が必要なステータスに分類しています。回答するまで、ビルドはテスターに配信されません。
Missing ComplianceのManageリンクがクリックできないのはなぜですか?
ロールを確認してください。Appleは回答をAccount Holder、Admin、App Managerに限定しています。Appleはそれ以外の原因を記載していません。ビルドが届いたばかりなら、処理完了メールの後にページを再読み込みしてください。
アプリがHTTPSしか使っていない場合、暗号化に「はい」と答えるべきですか?
Appleによると、URLSessionによるHTTPS接続のようなシステム組み込みの暗号化は、一般に書類提出義務が免除されます。その場合、サードパーティのライブラリが独自の暗号化を追加していなければ、ITSAppUsesNonExemptEncryptionキーはNOです。
ビルドのたびに暗号化の質問に答える必要がありますか?
はい、Info.plistにITSAppUsesNonExemptEncryptionキーがない限り必要です。キーがあれば、App Store Connectは質問しなくなります。Expoでは、app.jsonのios.config.usesNonExemptEncryptionで設定します。
Expoのapp.jsonでは暗号化をどこで宣言しますか?
app.jsonのexpo.ios.configに、アプリが免除対象外の暗号化を使っていなければ"usesNonExemptEncryption": falseと書きます。EAS Buildがビルドのinfo.plistにキーを書き込みます。効くのは次のビルドからで、すでに送ったビルドには反映されません。
Missing ComplianceはApp Storeへの提出も止めますか?
輸出コンプライアンスの質問は、ベータでもApp Storeでも、新しいバージョンのたびに聞かれます。回答していないビルドは配信できません。Info.plistのキーで両方のケースが一度に解決します。
年次自己分類報告は必要ですか?
Appleによると、免除対象の暗号化を使っていても、アメリカ政府への年次自己分類報告が必要になる場合があり、公式の手続きが案内されています。免除対象外の暗号化を使い、Appleに書類を提出済みなら、この報告は不要です。

