Missing Compliance i TestFlight: løs det én gang for alle
Af Mehdi Azizi
Udgivet , 9 min.
Missing Compliance betyder, at Apple venter på din erklæring om kryptering. Frigiv buildet i App Store Connect, og sæt nøglen, så du ikke ser det igen.
Missing Compliance er ikke en fejl. Det er et build, der venter på dit svar om kryptering. Indtil du har svaret, er buildet blokeret for dine testere. For det her build svarer du på spørgsmålene under fanen TestFlight i App Store Connect. For de næste sætter du nøglen ITSAppUsesNonExemptEncryption i din Info.plist, eller ios.config.usesNonExemptEncryption i din app.json med Expo, og så kommer statussen ikke igen.
Mine iOS-apps er lavet med Expo. I app.json for Solys står nøglen til false, og den er sat to steder: i ios.config og i ios.infoPlist. Den her guide følger Apples sider om build-statusser og om eksportoverholdelse for beta-builds, gennemlæst den 6. november 2026.
Hvad Missing Compliance betyder
Apples liste over build-statusser definerer det i én sætning: dokumentationen for eksportoverholdelse mangler, og der forventes en handling fra dig. Apple viser den i gul, farven for en igangværende proces, der afhænger af dig eller af Apple, og beskrivelsen præciserer, at der forventes en handling fra dig.
Hvorfor stiller Apple spørgsmålet? Det forklarer siden om eksportregler for kryptering: når du sender et build til TestFlight eller App Store, sender du det til en server i USA. Hvis din app distribueres uden for USA og Canada, falder den under amerikansk eksportlovgivning, uanset hvilket land din virksomhed ligger i. Og så snart en app bruger, indeholder eller integrerer kryptering, betragter Apple det som eksport af krypteringssoftware.
Resultat: ved hver ny version stiller App Store Connect dig spørgsmålene om overholdelse, medmindre din Info.plist allerede besvarer dem. Derfor lander et første Expo-build næsten altid i Missing Compliance.
Frigiv det build, der venter
Trinene kommer fra Apples side om eksportoverholdelse for beta-builds. Du skal have rollen Account Holder, Admin eller App Manager.
- Under Apps åbner du din app og derefter fanen TestFlight.
- I sidepanelet, under Builds, vælger du platformen.
- I kolonnen Build klikker du på ikonet eller nummeret for det pågældende build.
- Klik på Provide Export Compliance Information, og besvar spørgsmålene.
- Hvis Apple beder om dokumentation, klikker du på Go to App Encryption Page for at sende den. Ellers klikker du på Save.
Apple beskriver også genvejen: ved siden af buildet åbner linket Manage de samme spørgsmål, og med Choose File kan du vedhæfte dokumentation, der allerede er godkendt. Når det er gemt, skifter buildet til Ready to Submit, eller direkte til Testing, hvis det går til en intern gruppe. Ready to Test kommer først efter beta-gennemgangen for eksterne testere.
Kan du ikke klikke på linket Manage? Tjek først din rolle i teamet: Apple forbeholder svaret til rollerne Account Holder, Admin og App Manager, og en Developer- eller Marketing-konto kan ikke svare. Apple dokumenterer ingen anden årsag. Hvis buildet lige er sendt, så vent på mailen om, at behandlingen er færdig, som er beskrevet i guiden om build-nummer og version, og genindlæs siden.
Aldrig svare igen: nøglen i dit projekt
Apple skriver det på siden om beta-builds: du kan angive i Info.plist, at din app ikke bruger kryptering, eller at den er undtaget, og så skal du ikke længere svare ved hver indsendelse. Nøglen hedder ITSAppUsesNonExemptEncryption. Xcode viser den under navnet App Uses Non-Exempt Encryption.
| Dit værktøj | Fil | Hvor | Værdi |
|---|---|---|---|
| Expo (EAS Build) | app.json | expo.ios.config | false |
| Expo, anden vej | app.json | expo.ios.infoPlist | false |
| Ren React Native | Info.plist | App Uses Non-Exempt Encryption | NO |
| Xcode, Swift | Info.plist | App Uses Non-Exempt Encryption | NO |
Med Expo hedder nøglen usesNonExemptEncryption, og konfigurationsreferencen præciserer, at den skriver Apples nøgle ind i buildets Info.plist, og at ios.config kun bruges til buildet: den optræder ikke i produktionsmanifestet.
{
"expo": {
"ios": {
"config": {
"usesNonExemptEncryption": false
}
}
}
}
Med Expo accepterer ios.infoPlist også nøglen under Apples navn med samme værdi: det er den anden linje i app.json for Solys. I et native projekt fylder den samme erklæring én linje i Info.plist: nøglen App Uses Non-Exempt Encryption, som er navnet Xcode viser, med værdien NO. Værdien er en boolean, ikke en streng.
Nøglen træder i kraft ved næste build. Det build, der allerede er sendt, bliver i Missing Compliance, indtil du har svaret i App Store Connect: de to handlinger erstatter ikke hinanden, de supplerer hinanden.
false eller true: sådan beslutter du
Apple definerer værdien NO sådan: din app, inklusive tredjepartsbiblioteker, bruger ingen kryptering eller kun kryptering, der er undtaget fra kravene om dokumentation. Ellers er det YES.
Det, der som regel er undtaget ifølge siden om eksportregler: kryptering indbygget i systemet, som HTTPS-forbindelser via URLSession. Det, der ikke er: proprietær kryptering, som du selv har skrevet eller lagt ind i appen. Oversigten over eksportoverholdelse tilføjer en vigtig påmindelse: det er dig, der har ansvaret for fortolkningen og for konsekvenserne, hvis du med urette påberåber dig en undtagelse.
For en Expo-app, der kalder et API over HTTPS, gemmer præferencer og sælger et abonnement, er false det sædvanlige svar. For en app, der selv krypterer beskeder, filer eller en boks, er svaret true, og Apple forventer dokumentation.
Sæt ikke
falsepå refleks. Gennemgå dine afhængigheder: et bibliotek til end-to-end-kryptering eller hjemmelavet krypteret lagring skubber dig over på dokumentationssiden.
Hvis din app bruger ikke-undtaget kryptering
Siden om krypteringsdokumentation beskriver forløbet. Under App Information, ved siden af App Encryption Documentation, åbner tilføj-knappen spørgsmålene, derefter Choose File til dokumentet og så Save. Apple beder dig om at have udfyldt appens beskrivelse og indstillet dens tilgængelighed først, så de kan vurdere, om dokumentationen er tilstrækkelig. De sigter efter cirka to arbejdsdage, når sagen er komplet.
Når dokumentationen er godkendt, giver Apple dig en værdi, som du sætter i nøglen ITSEncryptionExportComplianceCode i din Info.plist. Med den slipper du for spørgsmålene ved hver indsendelse. Under gennemgangen viser dit build Waiting for Export Compliance Review eller In Compliance Review: der forventes ingen handling fra dig.
To punkter, som Apple fremhæver, det ene på siden om eksportregler, det andet i oversigten over overholdelse:
- Selv med undtaget kryptering kan der kræves en årlig selvklassificeringsrapport til den amerikanske regering. Den kræves ikke, hvis du bruger ikke-undtaget kryptering og har givet Apple dokumentationen.
- Frankrig kontrollerer også import og eksport af krypteringsapps. Apples oversigt nævner sikker lagring, sikker kommunikation og antivirus som berørte områder, med undtagelser for bank- og sundhedsapps, og henviser til ANSSI.
Hvad der sker bagefter i TestFlight
Det frigivne build følger det normale liv for et TestFlight-build, beskrevet i guiden TestFlight til at teste din iPhone-app: interne testere med det samme, eksterne testere efter beta-gennemgangen, og udløb efter 90 dage ifølge listen over build-statusser. De andre ting, der kan stoppe en Expo-indsendelse, som et build-nummer, der allerede er brugt, eller en afvist fil, finder du i fejl ved EAS-indsendelse til App Store Connect, og hele kæden i udgiv en Expo-app på App Store med EAS.
iOS & Android Kit indeholder min Expo-startkode med den her nøgle allerede sat, og forløbet fra første build til App Store-siden. Hvis du vil vide, hvad der stadig blokerer din udgivelse, giver den gratis diagnose dig svar på nogle få spørgsmål og sender dig min tjekliste mod afvisninger fra Apple. Alle trinene finder du i udgiv en app på App Store.
Ofte stillede spørgsmål
Hvad betyder Missing Compliance i TestFlight?
Buildet venter på din erklæring om eksportoverholdelse, altså dit svar om brug af kryptering. Apple placerer det blandt de statusser, der kræver en handling fra dig. Buildet går ikke ud til testerne, før du har svaret.
Hvorfor kan jeg ikke klikke på linket Manage ved Missing Compliance?
Tjek din rolle: Apple forbeholder svaret til rollerne Account Holder, Admin og App Manager. Apple dokumenterer ingen anden årsag. Hvis buildet lige er kommet ind, så genindlæs siden efter mailen om, at behandlingen er færdig.
Min app bruger kun HTTPS, skal jeg svare ja til kryptering?
Apple oplyser, at kryptering indbygget i systemet, som HTTPS-forbindelser via URLSession, som regel er undtaget fra kravene om dokumentation. I så fald er værdien for nøglen ITSAppUsesNonExemptEncryption NO, forudsat at intet tredjepartsbibliotek tilføjer proprietær kryptering.
Skal man besvare spørgsmålene om kryptering ved hvert build?
Ja, så længe din Info.plist ikke indeholder nøglen ITSAppUsesNonExemptEncryption. Med den stiller App Store Connect ikke længere spørgsmålene. Med Expo indstiller du den i app.json via ios.config.usesNonExemptEncryption.
Hvor erklærer man kryptering i app.json med Expo?
I app.json under expo.ios.config, med "usesNonExemptEncryption": false, hvis din app ikke bruger nogen ikke-undtaget kryptering. EAS Build skriver nøglen ind i buildets Info.plist. Den træder i kraft ved næste build, ikke på det, der allerede er sendt.
Blokerer Missing Compliance også indsendelsen til App Store?
Spørgsmålene om eksportoverholdelse stilles for hver ny version, beta eller App Store. Et build, der ikke har besvaret dem, kan ikke distribueres. Nøglen i Info.plist løser begge tilfælde på én gang.
Skal jeg lave en årlig selvklassificeringsrapport?
Apple oplyser, at brug af undtaget kryptering alligevel kan kræve en årlig selvklassificeringsrapport til den amerikanske regering, og henviser til den officielle procedure. Hvis din app bruger ikke-undtaget kryptering, og du har givet Apple dokumentationen, er rapporten ikke nødvendig.

