Missing Compliance in TestFlight definitief oplossen
Door Mehdi Azizi
Gepubliceerd op , 9 min
Missing Compliance betekent dat Apple wacht op je encryptieverklaring. Deblokkeer de build in App Store Connect en zet daarna de sleutel in je project.
Missing Compliance is geen fout: het is een build die wacht op jouw antwoord over encryptie. Zolang je niet hebt geantwoord, blijft de build geblokkeerd voor je testers. Voor deze build beantwoord je de vragen in het tabblad TestFlight van App Store Connect. Voor de volgende builds zet je de sleutel ITSAppUsesNonExemptEncryption in je Info.plist, of ios.config.usesNonExemptEncryption in je app.json met Expo, en dan komt de status niet meer terug.
Mijn iOS-apps zijn gemaakt met Expo. In de app.json van Solys staat de sleutel op false, en wel twee keer: in ios.config en in ios.infoPlist. Deze gids volgt de pagina's van Apple over de buildstatussen en over de exportcompliance van bètabuilds, opnieuw gelezen op 6 november 2026.
Wat Missing Compliance betekent
De lijst met buildstatussen van Apple definieert het in één zin: de documentatie voor exportcompliance ontbreekt, en er wordt een actie van jou verwacht. Apple toont het in het geel, de kleur van een lopend proces dat van jou of van Apple afhangt, en de beschrijving zegt erbij dat er een actie van jou wordt verwacht.
Waarom stelt Apple die vraag? De pagina over de exportregels voor encryptie legt het uit: als je een build naar TestFlight of de App Store stuurt, stuur je die naar een server in de Verenigde Staten. Als je app buiten de Verenigde Staten en Canada wordt verspreid, valt ze onder het Amerikaanse exportrecht, ongeacht het land van je bedrijf. En zodra een app encryptie gebruikt, bevat of integreert, beschouwt Apple dat als export van encryptiesoftware.
Gevolg: bij elke nieuwe versie stelt App Store Connect je de compliancevragen, tenzij je Info.plist ze al beantwoordt. Daarom komt een eerste Expo-build bijna altijd binnen als Missing Compliance.
De wachtende build deblokkeren
De stappen komen van Apples pagina over de exportcompliance van bètabuilds. Je hebt de rol Account Holder, Admin of App Manager nodig.
- Open in Apps je app, en dan het tabblad TestFlight.
- Kies in de zijbalk, onder Builds, het platform.
- Klik in de kolom Build op het icoon of het nummer van de betreffende build.
- Klik op Provide Export Compliance Information en beantwoord de vragen.
- Als Apple om documentatie vraagt, klik je op Go to App Encryption Page om die te uploaden. Anders klik je op Save.
Apple beschrijft ook de snelkoppeling: naast de build opent de link Manage dezelfde vragen, en met Choose File voeg je al goedgekeurde documentatie toe. Na het opslaan gaat de build naar Ready to Submit, of direct naar Testing als hij naar een interne groep gaat. Ready to Test komt pas na de bètareview voor externe testers.
Is de link Manage niet klikbaar? Controleer eerst je rol in het team: Apple laat alleen de rollen Account Holder, Admin en App Manager antwoorden, een Developer- of Marketing-account kan dat niet. Apple documenteert geen andere oorzaak. Als de build net is verstuurd, wacht dan op de e-mail dat de verwerking klaar is, uitgelegd in de gids over het buildnummer en de versie, en herlaad de pagina.
Nooit meer antwoorden: de sleutel in je project
Apple zegt het op de pagina over bètabuilds: je kunt in de Info.plist aangeven dat je app geen encryptie gebruikt, of dat ze vrijgesteld is, en dan hoef je niet meer bij elke inzending te antwoorden. De sleutel heet ITSAppUsesNonExemptEncryption. Xcode toont hem als App Uses Non-Exempt Encryption.
| Je tool | Bestand | Waar | Waarde |
|---|---|---|---|
| Expo (EAS Build) | app.json | expo.ios.config | false |
| Expo, andere weg | app.json | expo.ios.infoPlist | false |
| Kaal React Native | Info.plist | App Uses Non-Exempt Encryption | NO |
| Xcode, Swift | Info.plist | App Uses Non-Exempt Encryption | NO |
Met Expo heet de sleutel usesNonExemptEncryption, en de configuratiereferentie vermeldt dat hij de Apple-sleutel in de Info.plist van de build schrijft, en dat ios.config alleen voor de build dient: het verschijnt niet in het productiemanifest.
{
"expo": {
"ios": {
"config": {
"usesNonExemptEncryption": false
}
}
}
}
Met Expo accepteert ios.infoPlist de sleutel ook onder zijn Apple-naam, met dezelfde waarde: dat is de tweede regel in de app.json van Solys. In een native project past dezelfde verklaring in één regel van de Info.plist: de sleutel App Uses Non-Exempt Encryption, de naam die Xcode toont, met de waarde NO. De waarde is een boolean, geen string.
De sleutel werkt vanaf de volgende build. De al verstuurde build blijft op Missing Compliance staan zolang je niet in App Store Connect hebt geantwoord: de twee acties vervangen elkaar niet, ze vullen elkaar aan.
false of true: hoe je beslist
Apple definieert de waarde NO zo: je app, inclusief bibliotheken van derden, gebruikt geen encryptie, of alleen encryptie die vrijgesteld is van de documentatieplicht. Anders is het YES.
Wat meestal vrijgesteld is, volgens de pagina over de exportregels: encryptie die in het systeem zit, zoals HTTPS-verbindingen via URLSession. Wat niet vrijgesteld is: eigen encryptie, die je zelf hebt geschreven of hebt meegeleverd. Het overzicht van exportcompliance voegt een belangrijke herinnering toe: jij bent verantwoordelijk voor de interpretatie, en voor de gevolgen, als je ten onrechte een vrijstelling claimt.
Voor een Expo-app die een API via HTTPS aanroept, voorkeuren opslaat en een abonnement verkoopt, is false het gebruikelijke antwoord. Voor een app die zelf berichten, bestanden of een kluis versleutelt, is het antwoord true, en verwacht Apple documentatie.
Zet niet uit reflex
false. Loop je dependencies na: een bibliotheek voor end-to-end-encryptie of zelfgebouwde versleutelde opslag brengt je aan de kant van de documentatie.
Als je app niet-vrijgestelde encryptie gebruikt
De pagina over encryptiedocumentatie beschrijft het traject. In App Information opent de knop om iets toe te voegen naast App Encryption Documentation de vragen, daarna Choose File voor het document, en dan Save. Apple vraagt om eerst de beschrijving van de app in te vullen en de beschikbaarheid in te stellen, zodat het kan beoordelen of de documentatie volstaat. Apple mikt op ongeveer twee werkdagen als het dossier compleet is.
Zodra de documentatie is goedgekeurd, geeft Apple een waarde die je in de sleutel ITSEncryptionExportComplianceCode van je Info.plist zet. Daarmee krijg je geen vragen meer bij elke upload. Tijdens de beoordeling toont je build Waiting for Export Compliance Review of In Compliance Review: er wordt geen actie van jou verwacht.
Twee punten die Apple noemt, het ene op de pagina over de exportregels, het andere in het overzicht van compliance:
- Ook met vrijgestelde encryptie kan een jaarlijks self-classification report bij de Amerikaanse overheid verplicht zijn. Dat hoeft niet als je niet-vrijgestelde encryptie gebruikt en de documentatie aan Apple hebt gegeven.
- Frankrijk controleert ook de import en export van encryptie-apps. Het overzicht van Apple noemt beveiligde opslag, beveiligde communicatie en antivirus als betrokken domeinen, met vrijstellingen voor bank- en medische apps, en verwijst naar de ANSSI.
Wat er daarna gebeurt in TestFlight
De gedeblokkeerde build volgt het normale leven van een TestFlight-build, beschreven in de gids TestFlight om je iPhone-app te testen: interne testers meteen, externe testers na de bètareview, en verlopen na 90 dagen, volgens de lijst met buildstatussen. De andere mogelijke blokkades bij een Expo-upload, zoals een al gebruikt buildnummer of een geweigerd bestand, staan in de EAS-uploadfouten naar App Store Connect, en de volledige keten in een Expo-app publiceren in de App Store met EAS.
De iOS & Android Kit bevat mijn Expo-startcode, met deze sleutel al ingesteld, en het traject van de eerste build tot de App Store-pagina. Wil je weten wat je publicatie nog tegenhoudt, dan geeft de gratis diagnose je in een paar vragen antwoord en stuurt je mijn checklist tegen afwijzingen door Apple. De volledige stappen staan in een app publiceren in de App Store.
Veelgestelde vragen
Wat betekent Missing Compliance in TestFlight?
De build wacht op je verklaring over exportcompliance, oftewel je antwoord over het gebruik van encryptie. Apple rekent het tot de statussen die een actie van jou vragen. De build gaat niet naar de testers zolang je niet hebt geantwoord.
Waarom is de link Manage bij Missing Compliance niet klikbaar?
Controleer je rol: Apple laat alleen de rollen Account Holder, Admin en App Manager antwoorden. Apple documenteert geen andere oorzaak. Als de build net binnen is, herlaad de pagina na de e-mail dat de verwerking klaar is.
Mijn app gebruikt alleen HTTPS, moet ik ja antwoorden over encryptie?
Apple geeft aan dat encryptie die in het systeem zit, zoals HTTPS-verbindingen via URLSession, meestal vrijgesteld is van de documentatieplicht. In dat geval staat de sleutel ITSAppUsesNonExemptEncryption op NO, op voorwaarde dat geen enkele bibliotheek van derden eigen encryptie toevoegt.
Moet je de encryptievragen bij elke build beantwoorden?
Ja, zolang je Info.plist de sleutel ITSAppUsesNonExemptEncryption niet bevat. Met die sleutel stelt App Store Connect de vragen niet meer. Met Expo stel je hem in app.json in via ios.config.usesNonExemptEncryption.
Waar declareer je encryptie in app.json met Expo?
In app.json, onder expo.ios.config, met "usesNonExemptEncryption": false als je app geen niet-vrijgestelde encryptie gebruikt. EAS Build schrijft de sleutel in de Info.plist van de build. Hij werkt vanaf de volgende build, niet op de al verstuurde.
Blokkeert Missing Compliance ook de inzending in de App Store?
De vragen over exportcompliance komen bij elke nieuwe versie, bèta of App Store. Een build die ze niet heeft beantwoord, kan niet worden verspreid. De sleutel in de Info.plist regelt beide gevallen tegelijk.
Moet ik een jaarlijks self-classification report indienen?
Apple meldt dat het gebruik van vrijgestelde encryptie toch een jaarlijks self-classification report bij de Amerikaanse overheid kan vereisen, en verwijst naar de officiële procedure. Als je app niet-vrijgestelde encryptie gebruikt en je de documentatie aan Apple hebt gegeven, is dat rapport niet nodig.

