Missing Compliance i TestFlight: så fixar du det för gott
Av Mehdi Azizi
Publicerad , 9 min
Missing Compliance betyder att Apple väntar på din krypteringsdeklaration. Lås upp bygget i App Store Connect och sätt nyckeln så slipper du se det igen.
Missing Compliance är inget fel. Det är ett bygge som väntar på ditt svar om kryptering. Så länge du inte har svarat är bygget låst för dina testare. För just det här bygget svarar du på frågorna under fliken TestFlight i App Store Connect. För kommande byggen lägger du in nyckeln ITSAppUsesNonExemptEncryption i din Info.plist, eller ios.config.usesNonExemptEncryption i din app.json med Expo, så kommer statusen inte tillbaka.
Mina iOS-appar är byggda med Expo. I app.json för Solys är nyckeln satt till false, på två ställen: i ios.config och i ios.infoPlist. Den här guiden följer Apples sidor om byggstatusar och om exportefterlevnad för betabyggen, genomlästa den 6 november 2026.
Vad Missing Compliance betyder
Apples lista över byggstatusar definierar det i en mening: dokumentationen om exportefterlevnad saknas, och en åtgärd väntas från dig. Apple visar den i gult, färgen för en pågående process som hänger på dig eller på Apple, och beskrivningen säger att en åtgärd väntas från dig.
Varför ställer Apple frågan? Sidan om exportregler för kryptering förklarar det: när du skickar ett bygge till TestFlight eller App Store skickar du det till en server i USA. Om din app distribueras utanför USA och Kanada omfattas den av amerikansk exportlagstiftning, oavsett vilket land ditt företag finns i. Och så fort en app använder, innehåller eller bygger in kryptering ser Apple det som export av krypteringsprogramvara.
Resultat: vid varje ny version ställer App Store Connect frågorna om efterlevnad, om inte din Info.plist redan svarar på dem. Det är därför ett första Expo-bygge nästan alltid hamnar i Missing Compliance.
Lås upp bygget som väntar
Stegen kommer från Apples sida om exportefterlevnad för betabyggen. Du behöver rollen Account Holder, Admin eller App Manager.
- Under Apps öppnar du din app och sedan fliken TestFlight.
- I sidofältet, under Builds, väljer du plattform.
- I kolumnen Build klickar du på ikonen eller numret för bygget det gäller.
- Klicka på Provide Export Compliance Information och svara på frågorna.
- Om Apple ber om dokumentation klickar du på Go to App Encryption Page för att skicka den. Annars klickar du på Save.
Apple beskriver också genvägen: bredvid bygget öppnar länken Manage samma frågor, och med Choose File kan du bifoga dokumentation som redan är godkänd. När du har sparat går bygget till Ready to Submit, eller direkt till Testing om det går till en intern grupp. Ready to Test kommer först efter betagranskningen för externa testare.
Går det inte att klicka på länken Manage? Kolla först din roll i teamet: Apple låter bara rollerna Account Holder, Admin och App Manager svara, ett Developer- eller Marketing-konto kan inte svara. Apple dokumenterar ingen annan orsak. Om bygget precis har skickats väntar du på mejlet om att bearbetningen är klar, som beskrivs i guiden om byggnummer och version, och laddar sedan om sidan.
Svara aldrig igen: nyckeln i ditt projekt
Apple säger det på sidan om betabyggen: du kan ange i Info.plist att din app inte använder kryptering, eller att den är undantagen, och då behöver du inte svara vid varje inskickning. Nyckeln heter ITSAppUsesNonExemptEncryption. Xcode visar den som App Uses Non-Exempt Encryption.
| Ditt verktyg | Fil | Var | Värde |
|---|---|---|---|
| Expo (EAS Build) | app.json | expo.ios.config | false |
| Expo, annat sätt | 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 heter nyckeln usesNonExemptEncryption, och konfigurationsreferensen anger att den skriver Apples nyckel i byggets Info.plist, och att ios.config bara används vid bygget: det syns inte i produktionsmanifestet.
{
"expo": {
"ios": {
"config": {
"usesNonExemptEncryption": false
}
}
}
}
Med Expo tar ios.infoPlist också emot nyckeln under Apples namn, med samma värde: det är den andra raden i app.json för Solys. I ett native-projekt räcker en rad i Info.plist för samma deklaration: nyckeln App Uses Non-Exempt Encryption, namnet som Xcode visar, med värdet NO. Värdet är en boolean, inte en sträng.
Nyckeln gäller från nästa bygge. Bygget som redan är skickat stannar i Missing Compliance tills du har svarat i App Store Connect: de två åtgärderna ersätter inte varandra, de kompletterar varandra.
false eller true: hur du avgör
Apple definierar värdet NO så här: din app, inklusive tredjepartsbibliotek, använder ingen kryptering, eller bara kryptering som är undantagen från dokumentationskraven. Annars är det YES.
Det som i regel är undantaget, enligt sidan om exportregler: kryptering som är inbyggd i systemet, som HTTPS-anslutningar via URLSession. Det som inte är det: egen kryptering, som du har skrivit eller bäddat in. Översikten över exportefterlevnad lägger till en viktig påminnelse: det är du som ansvarar för tolkningen, och för konsekvenserna, om du felaktigt hävdar ett undantag.
För en Expo-app som anropar ett API över HTTPS, sparar inställningar och säljer en prenumeration är false det vanliga svaret. För en app som själv krypterar meddelanden, filer eller ett valv är svaret true, och Apple förväntar sig dokumentation.
Sätt inte
falseav ren reflex. Gå igenom dina beroenden: ett bibliotek för end-to-end-kryptering eller egenbyggd krypterad lagring gör att du hamnar på dokumentationssidan.
Om din app använder kryptering som inte är undantagen
Sidan om krypteringsdokumentation beskriver flödet. Under App Information, bredvid App Encryption Documentation, öppnar lägg till-knappen frågorna, sedan Choose File för dokumentet, och sedan Save. Apple vill att du har fyllt i appens beskrivning och ställt in tillgängligheten innan, för att kunna bedöma om dokumentationen räcker. Apple siktar på ungefär två arbetsdagar när underlaget är komplett.
När dokumentationen är godkänd ger Apple dig ett värde att sätta i nyckeln ITSEncryptionExportComplianceCode i din Info.plist. Med det slipper du frågorna vid varje inskickning. Under granskningen visar bygget Waiting for Export Compliance Review eller In Compliance Review: ingen åtgärd väntas från dig.
Två saker som Apple påpekar, den ena på sidan om exportregler, den andra i översikten över efterlevnad:
- Även med undantagen kryptering kan en årlig självklassificeringsrapport till den amerikanska regeringen krävas. Den krävs inte om du använder kryptering som inte är undantagen och har lämnat dokumentationen till Apple.
- Frankrike kontrollerar också import och export av krypteringsappar. Apples översikt nämner säker lagring, säker kommunikation och antivirus som berörda områden, med undantag för bank- och medicinska appar, och hänvisar till ANSSI.
Vad som händer sedan i TestFlight
Det upplåsta bygget följer ett vanligt TestFlight-byggets livscykel, som beskrivs i guiden TestFlight för att testa din iPhone-app: interna testare direkt, externa testare efter betagranskningen, och utgång efter 90 dagar, enligt listan över byggstatusar. Andra saker som kan stoppa en inskickning från Expo, som ett byggnummer som redan används eller en fil som avvisas, hittar du i felen vid inskickning från EAS till App Store Connect, och hela kedjan i publicera en Expo-app på App Store med EAS.
iOS & Android Kit innehåller min Expo-startkod, med den här nyckeln redan på plats, och vägen från första bygget till App Store-sidan. Om du vill veta vad som fortfarande blockerar din publicering ger den kostnadsfria diagnosen dig svar på några frågor och skickar min checklista mot avslag från Apple. Alla steg finns i publicera en app på App Store.
Vanliga frågor
Vad betyder Missing Compliance i TestFlight?
Bygget väntar på din deklaration om exportefterlevnad, alltså ditt svar om användning av kryptering. Apple räknar det till de statusar som kräver en åtgärd från dig. Bygget går inte ut till testarna förrän du har svarat.
Varför går det inte att klicka på länken Manage vid Missing Compliance?
Kolla din roll: Apple låter bara rollerna Account Holder, Admin och App Manager svara. Apple dokumenterar ingen annan orsak. Om bygget precis har kommit in laddar du om sidan efter mejlet om att bearbetningen är klar.
Min app använder bara HTTPS, ska jag svara ja om kryptering?
Apple anger att kryptering som är inbyggd i systemet, som HTTPS-anslutningar via URLSession, i regel är undantagen från dokumentationskraven. I så fall är värdet för nyckeln ITSAppUsesNonExemptEncryption NO, förutsatt att inget tredjepartsbibliotek lägger till egen kryptering.
Måste jag svara på krypteringsfrågorna vid varje bygge?
Ja, så länge din Info.plist inte innehåller nyckeln ITSAppUsesNonExemptEncryption. Med den ställer App Store Connect inte längre frågorna. Med Expo ställer du in den i app.json via ios.config.usesNonExemptEncryption.
Var deklarerar jag kryptering i app.json med Expo?
I app.json, under expo.ios.config, med "usesNonExemptEncryption": false om din app inte använder någon kryptering som inte är undantagen. EAS Build skriver nyckeln i byggets Info.plist. Den gäller från nästa bygge, inte för det som redan är skickat.
Blockerar Missing Compliance också inskickningen till App Store?
Frågorna om exportefterlevnad ställs för varje ny version, beta eller App Store. Ett bygge som inte har besvarat dem kan inte distribueras. Nyckeln i Info.plist löser båda fallen på en gång.
Måste jag lämna en årlig självklassificeringsrapport?
Apple påpekar att användning av undantagen kryptering ändå kan kräva en årlig självklassificeringsrapport till den amerikanska regeringen, och hänvisar till den officiella proceduren. Om din app använder kryptering som inte är undantagen och du har lämnat dokumentationen till Apple behövs inte den rapporten.

