Missing Compliance sur TestFlight : la corriger pour de bon
Par Mehdi Azizi
Publié le , 9 min
Missing Compliance veut dire qu'Apple attend ta déclaration de chiffrement. Débloque ce build dans App Store Connect, puis règle la clé pour ne plus la revoir.
Missing Compliance n'est pas une erreur : c'est un build qui attend ta réponse sur le chiffrement. Tant que tu n'as pas répondu, le build reste bloqué pour tes testeurs. Pour ce build, tu réponds aux questions dans l'onglet TestFlight d'App Store Connect. Pour les suivants, tu poses la clé ITSAppUsesNonExemptEncryption dans ton Info.plist, ou ios.config.usesNonExemptEncryption dans ton app.json avec Expo, et le statut ne revient plus.
Mes apps iOS sont faites avec Expo. Dans l'app.json de Solys, la clé vaut false, posée deux fois : dans ios.config et dans ios.infoPlist. Ce guide suit les pages d'Apple sur les statuts de build et sur la conformité export des builds bêta, relues le 6 novembre 2026.
Ce que veut dire Missing Compliance
La liste des statuts de build d'Apple le définit en une phrase : la documentation de conformité export manque, et une action est attendue de ta part. Apple l'affiche en jaune, la couleur d'un processus en cours qui dépend de toi ou d'Apple, et sa description précise qu'une action est attendue de ta part.
Pourquoi Apple pose la question ? La page sur les règles d'export du chiffrement l'explique : quand tu envoies un build vers TestFlight ou l'App Store, tu l'envoies sur un serveur aux États‑Unis. Si ton app est distribuée hors des États‑Unis et du Canada, elle relève du droit américain de l'exportation, quel que soit le pays de ton entreprise. Et dès qu'une app utilise, contient ou intègre du chiffrement, Apple considère qu'il s'agit d'une exportation de logiciel de chiffrement.
Résultat : à chaque nouvelle version, App Store Connect te pose les questions de conformité, sauf si ton Info.plist y répond déjà. C'est pour ça qu'un premier build Expo arrive presque toujours en Missing Compliance.
Débloquer le build qui attend
Les étapes viennent de la page d'Apple sur la conformité export des builds bêta. Il te faut le rôle Account Holder, Admin ou App Manager.
- Dans Apps, ouvre ton app, puis l'onglet TestFlight.
- Dans la barre latérale, sous Builds, choisis la plateforme.
- Dans la colonne Build, clique sur l'icône ou le numéro du build concerné.
- Clique sur Provide Export Compliance Information, puis réponds aux questions.
- Si Apple te demande une documentation, clique sur Go to App Encryption Page pour l'envoyer. Sinon, clique sur Save.
Apple décrit aussi le raccourci : à côté du build, le lien Manage ouvre les mêmes questions, et Choose File permet de joindre une documentation déjà approuvée. Une fois enregistré, le build passe à Ready to Submit, ou directement à Testing s'il part à un groupe interne. Ready to Test n'arrive qu'après la revue bêta des testeurs externes.
Le lien Manage n'est pas cliquable ? Vérifie d'abord ton rôle dans l'équipe : Apple réserve la réponse aux rôles Account Holder, Admin et App Manager, un compte Developer ou Marketing ne peut pas répondre. Apple ne documente pas d'autre cause. Si le build vient d'être envoyé, attends l'e-mail de fin de traitement, détaillé dans le guide sur le numéro de build et la version, puis recharge la page.
Ne plus jamais répondre : la clé dans ton projet
Apple le dit sur la page des builds bêta : tu peux indiquer que ton app n'utilise pas de chiffrement, ou qu'elle en est exemptée, dans l'Info.plist, et tu n'as plus à répondre à chaque soumission. La clé s'appelle ITSAppUsesNonExemptEncryption. Xcode l'affiche sous le nom App Uses Non-Exempt Encryption.
| Ton outil | Fichier | Où | Valeur |
|---|---|---|---|
| Expo (EAS Build) | app.json | expo.ios.config | false |
| Expo, autre voie | app.json | expo.ios.infoPlist | false |
| React Native nu | Info.plist | App Uses Non-Exempt Encryption | NO |
| Xcode, Swift | Info.plist | App Uses Non-Exempt Encryption | NO |
Avec Expo, la clé s'appelle usesNonExemptEncryption, et la référence de configuration précise qu'elle écrit la clé Apple dans l'Info.plist du build, et que ios.config sert uniquement au build : il n'apparaît pas dans le manifeste de production.
{
"expo": {
"ios": {
"config": {
"usesNonExemptEncryption": false
}
}
}
}
Avec Expo, ios.infoPlist accepte aussi la clé sous son nom Apple, avec la même valeur : c'est la seconde ligne de l'app.json de Solys. Dans un projet natif, la même déclaration tient en une ligne de l'Info.plist : la clé App Uses Non-Exempt Encryption, c'est le nom que Xcode affiche, avec la valeur NO. La valeur est un booléen, pas une chaîne.
La clé prend effet au prochain build. Le build déjà envoyé reste en Missing Compliance tant que tu n'as pas répondu dans App Store Connect : les deux actions ne se remplacent pas, elles se complètent.
false ou true : comment décider
Apple définit la valeur NO ainsi : ton app, bibliothèques tierces comprises, n'utilise aucun chiffrement, ou seulement un chiffrement exempté des obligations de documentation. Sinon, c'est YES.
Ce qui est en général exempté, d'après la page sur les règles d'export : le chiffrement intégré au système, comme les connexions HTTPS par URLSession. Ce qui ne l'est pas : un chiffrement propriétaire, que tu as écrit ou embarqué. La vue d'ensemble de la conformité export ajoute un rappel qui compte : c'est toi qui es responsable de l'interprétation, et de ses conséquences, si tu revendiques une exemption à tort.
Pour une app Expo qui appelle une API en HTTPS, stocke des préférences et vend un abonnement, false est la réponse habituelle. Pour une app qui chiffre elle‑même des messages, des fichiers ou un coffre, la réponse est true, et Apple attend une documentation.
Ne mets pas
falsepar réflexe. Relis tes dépendances : une bibliothèque de chiffrement de bout en bout ou un stockage chiffré maison te fait basculer du côté de la documentation.
Si ton app utilise un chiffrement non exempté
La page sur la documentation de chiffrement décrit le circuit. Dans App Information, à côté d'App Encryption Documentation, le bouton d'ajout ouvre les questions, puis Choose File pour le document, puis Save. Apple demande d'avoir rempli la description de l'app et réglé sa disponibilité avant, pour juger si la documentation suffit. Il vise environ deux jours ouvrés quand le dossier est complet.
Une fois la documentation approuvée, Apple fournit une valeur à poser dans la clé ITSEncryptionExportComplianceCode de ton Info.plist. Avec elle, plus de questions à chaque envoi. Pendant l'examen, ton build affiche Waiting for Export Compliance Review ou In Compliance Review : aucune action n'est attendue de toi.
Deux points signalés par Apple, l'un sur la page des règles d'export, l'autre dans la vue d'ensemble de la conformité :
- Même avec un chiffrement exempté, un rapport annuel d'auto-classification auprès du gouvernement américain peut être exigé. Il ne l'est pas si tu utilises un chiffrement non exempté et que tu as fourni la documentation à Apple.
- La France contrôle aussi l'import et l'export des apps de chiffrement. La vue d'ensemble d'Apple cite le stockage sécurisé, les communications sécurisées et les antivirus comme domaines concernés, avec des exemptions pour les apps bancaires et médicales, et renvoie vers l'ANSSI.
Ce qui se passe ensuite dans TestFlight
Le build débloqué suit la vie normale d'un build TestFlight, décrite dans le guide TestFlight pour tester son app iPhone : testeurs internes tout de suite, testeurs externes après la revue bêta, et expiration au bout de 90 jours, d'après la liste des statuts de build. Les autres arrêts possibles d'un envoi Expo, comme un numéro de build déjà utilisé ou un fichier refusé, sont dans les erreurs d'envoi EAS vers App Store Connect, et la chaîne complète dans publier une app Expo sur l'App Store avec EAS.
Le Kit iOS contient mon code de départ Expo, avec cette clé déjà posée, et le parcours qui mène du premier build à la fiche App Store. Si tu veux savoir ce qui bloque encore ta publication, le diagnostic gratuit te répond en quelques questions et t'envoie ma checklist anti-refus Apple. Les étapes complètes sont dans publier une application sur l'App Store.
Questions fréquentes
Que veut dire Missing Compliance sur TestFlight ?
Le build attend ta déclaration de conformité export, c'est-à-dire ta réponse sur l'usage du chiffrement. Apple le classe parmi les statuts qui demandent une action de ta part. Le build ne part pas aux testeurs tant que tu n'as pas répondu.
Pourquoi le lien Manage de Missing Compliance n'est-il pas cliquable ?
Vérifie ton rôle : Apple réserve la réponse aux rôles Account Holder, Admin et App Manager. Apple ne documente pas d'autre cause. Si le build vient d'arriver, recharge la page après l'e-mail de fin de traitement.
Mon app utilise seulement HTTPS, dois-je répondre oui au chiffrement ?
Apple indique que le chiffrement intégré au système, comme les connexions HTTPS par URLSession, est en général exempté des obligations de documentation. Dans ce cas, la clé ITSAppUsesNonExemptEncryption vaut NO, à condition qu'aucune bibliothèque tierce n'ajoute un chiffrement propriétaire.
Faut-il répondre aux questions de chiffrement à chaque build ?
Oui, tant que ton Info.plist ne contient pas la clé ITSAppUsesNonExemptEncryption. Avec elle, App Store Connect ne pose plus les questions. Avec Expo, elle se règle dans app.json par ios.config.usesNonExemptEncryption.
Où déclarer le chiffrement dans app.json avec Expo ?
Dans app.json, sous expo.ios.config, avec "usesNonExemptEncryption": false si ton app n'utilise aucun chiffrement non exempté. EAS Build écrit la clé dans l'Info.plist du build. Elle prend effet au prochain build, pas sur celui déjà envoyé.
Missing Compliance bloque-t-il aussi la soumission à l'App Store ?
Les questions de conformité export se posent pour toute nouvelle version, bêta ou App Store. Un build qui n'y a pas répondu ne peut pas être distribué. La clé dans l'Info.plist règle les deux cas à la fois.
Dois-je faire un rapport annuel d'auto-classification ?
Apple signale que l'usage d'un chiffrement exempté peut quand même imposer un rapport annuel d'auto-classification auprès du gouvernement américain, et renvoie vers la procédure officielle. Si ton app utilise un chiffrement non exempté et que tu as fourni la documentation à Apple, ce rapport n'est pas nécessaire.

