Missing Compliance TestFlight: így javítod végleg
Írta: Mehdi Azizi
Megjelent: , 9 p
A Missing Compliance azt jelenti, hogy az Apple a titkosítási nyilatkozatodra vár. Oldd fel a buildet az App Store Connectben, majd állítsd be a kulcsot.
A Missing Compliance nem hiba: egy build, ami a titkosításra vonatkozó válaszodra vár. Amíg nem válaszolsz, a build a tesztelőid számára blokkolva marad. Ennél a buildnél az App Store Connect TestFlight fülén válaszolsz a kérdésekre. A következőknél beállítod az ITSAppUsesNonExemptEncryption kulcsot az Info.plist fájlodban, vagy Expóval az app.json-ban az ios.config.usesNonExemptEncryption kulcsot, és a státusz többé nem jön vissza.
Az iOS-appjaimat Expóval készítem. A Solys app.json fájljában a kulcs értéke false, és kétszer szerepel: az ios.config és az ios.infoPlist alatt. Ez az útmutató az Apple buildstátuszokról és a bétabuildek exportmegfeleléséről szóló oldalait követi, 2026. november 6-i állapot szerint.
Mit jelent a Missing Compliance
Az Apple buildstátusz-listája egy mondatban definiálja: hiányzik az exportmegfelelési dokumentáció, és tőled vár lépést. Az Apple sárgával jelzi, ez egy folyamatban lévő állapot színe, ami rajtad vagy az Apple-ön múlik, a leírása pedig kiemeli, hogy tőled vár lépést.
Miért kérdez rá az Apple? A titkosítás exportszabályairól szóló oldal elmagyarázza: amikor buildet küldesz a TestFlightra vagy az App Store-ba, egy amerikai szerverre küldöd. Ha az appodat az Egyesült Államokon és Kanadán kívül is terjesztik, az amerikai exportjog hatálya alá esik, függetlenül attól, melyik országban van a céged. És amint egy app titkosítást használ, tartalmaz vagy beépít, az Apple ezt titkosító szoftver exportjának tekinti.
Az eredmény: minden új verziónál az App Store Connect felteszi a megfelelési kérdéseket, kivéve ha az Info.plist már válaszol rájuk. Ezért érkezik egy első Expo-build szinte mindig Missing Compliance státusszal.
A várakozó build feloldása
A lépések az Apple bétabuildek exportmegfeleléséről szóló oldaláról származnak. Account Holder, Admin vagy App Manager szerepkör kell hozzá.
- Az Apps alatt nyisd meg az appodat, majd a TestFlight fület.
- Az oldalsávban, a Builds alatt válaszd ki a platformot.
- A Build oszlopban kattints az érintett build ikonjára vagy számára.
- Kattints a Provide Export Compliance Information gombra, majd válaszolj a kérdésekre.
- Ha az Apple dokumentációt kér, kattints a Go to App Encryption Page gombra a feltöltéshez. Ha nem, kattints a Save gombra.
Az Apple egy rövidebb utat is leír: a build mellett a Manage link ugyanazokat a kérdéseket nyitja meg, a Choose File pedig lehetővé teszi egy már jóváhagyott dokumentáció csatolását. Mentés után a build Ready to Submit állapotba kerül, vagy egyből Testing állapotba, ha belső csoportnak megy. A Ready to Test csak a külső tesztelők bétaellenőrzése után jön.
Nem kattintható a Manage link? Először ellenőrizd a szerepköröd a csapatban: az Apple a választ az Account Holder, Admin és App Manager szerepkörnek tartja fenn, egy Developer vagy Marketing fiók nem tud válaszolni. Más okot az Apple nem dokumentál. Ha a buildet épp most küldted fel, várd meg a feldolgozás végéről szóló e-mailt, amit a buildszámról és a verzióról szóló útmutató részletez, majd töltsd újra az oldalt.
Soha többé ne kelljen válaszolni: a kulcs a projektedben
Az Apple a bétabuildek oldalán leírja: az Info.plist-ben jelezheted, hogy az appod nem használ titkosítást, vagy mentesül alóla, és onnantól nem kell minden beküldésnél válaszolnod. A kulcs neve ITSAppUsesNonExemptEncryption. Az Xcode App Uses Non-Exempt Encryption néven mutatja.
| Eszközöd | Fájl | Hol | Érték |
|---|---|---|---|
| Expo (EAS Build) | app.json | expo.ios.config | false |
| Expo, másik út | app.json | expo.ios.infoPlist | false |
| Natív React Native | Info.plist | App Uses Non-Exempt Encryption | NO |
| Xcode, Swift | Info.plist | App Uses Non-Exempt Encryption | NO |
Expóban a kulcs neve usesNonExemptEncryption, és a konfigurációs referencia szerint ez beírja az Apple-kulcsot a build Info.plist fájljába, az ios.config pedig csak a buildhez kell: nem jelenik meg a production manifestben.
{
"expo": {
"ios": {
"config": {
"usesNonExemptEncryption": false
}
}
}
}
Expóban az ios.infoPlist is elfogadja a kulcsot az Apple-féle nevén, ugyanazzal az értékkel: ez a Solys app.json fájljának második sora. Natív projektben ugyanez a nyilatkozat egy sor az Info.plist-ben: az App Uses Non-Exempt Encryption kulcs (ezt a nevet mutatja az Xcode), NO értékkel. Az érték boolean, nem string.
A kulcs a következő buildtől érvényes. A már felküldött build Missing Compliance állapotban marad, amíg nem válaszolsz az App Store Connectben: a két lépés nem helyettesíti, hanem kiegészíti egymást.
false vagy true: hogyan döntsd el
Az Apple így definiálja a NO értéket: az appod, a külső könyvtárakat is beleértve, egyáltalán nem használ titkosítást, vagy csak olyat, ami mentesül a dokumentációs kötelezettség alól. Egyébként YES.
Ami általában mentes az exportszabályokról szóló oldal szerint: a rendszerbe épített titkosítás, például a HTTPS-kapcsolatok URLSession-nel. Ami nem: a saját titkosítás, amit te írtál vagy beágyaztál. Az exportmegfelelés áttekintése egy fontos emlékeztetőt is hozzátesz: te felelsz az értelmezésért és a következményeiért, ha jogtalanul hivatkozol mentességre.
Egy Expo-appnál, ami HTTPS-en hív egy API-t, beállításokat tárol és előfizetést árul, a false a szokásos válasz. Egy appnál, ami maga titkosít üzeneteket, fájlokat vagy egy széfet, a válasz true, és az Apple dokumentációt vár.
Ne írj
false-t reflexből. Nézd át a függőségeidet: egy végponttól végpontig titkosító könyvtár vagy egy saját titkosított tároló átbillent a dokumentációs oldalra.
Ha az appod nem mentes titkosítást használ
A titkosítási dokumentációról szóló oldal leírja a folyamatot. Az App Information alatt, az App Encryption Documentation mellett a hozzáadás gomb megnyitja a kérdéseket, utána Choose File a dokumentumhoz, majd Save. Az Apple azt kéri, hogy előtte töltsd ki az app leírását és állítsd be az elérhetőségét, hogy meg tudja ítélni, elég-e a dokumentáció. Hiánytalan anyagnál nagyjából két munkanapot céloz meg.
Miután a dokumentációt jóváhagyták, az Apple ad egy értéket, amit az Info.plist ITSEncryptionExportComplianceCode kulcsába kell beírnod. Ezzel nincs több kérdés feltöltésenként. Az ellenőrzés alatt a buildeden Waiting for Export Compliance Review vagy In Compliance Review látszik: ilyenkor nem vár tőled lépést.
Két dolog, amire az Apple felhívja a figyelmet, az egyik az exportszabályok oldalán, a másik a megfelelés áttekintésében:
- Mentes titkosítás mellett is előírhatnak éves önbesorolási jelentést az amerikai kormány felé. Nem kell, ha nem mentes titkosítást használsz, és a dokumentációt beadtad az Apple-nek.
- Franciaország is ellenőrzi a titkosító appok importját és exportját. Az Apple áttekintése az érintett területek között a biztonságos tárolást, a biztonságos kommunikációt és a vírusirtókat említi, mentességgel a banki és egészségügyi appokra, és az ANSSI-hoz irányít.
Mi történik ezután a TestFlightban
A feloldott build egy TestFlight-build szokásos életét éli, amit a TestFlight az iPhone-app teszteléséhez útmutató ír le: belső tesztelők azonnal, külső tesztelők a bétaellenőrzés után, és lejárat 90 nap után, a buildstátusz-lista szerint. Egy Expo-feltöltés egyéb lehetséges akadályai, például egy már használt buildszám vagy egy elutasított fájl, az EAS App Store Connectbe küldési hibáiról szóló cikkben vannak, a teljes folyamat pedig az Expo-app közzététele az App Store-ban EAS-szel cikkben.
Az iOS & Android Kit tartalmazza az Expo kezdőkódomat, ezzel a kulccsal már beállítva, és azt az utat, ami az első buildtől az App Store-adatlapig vezet. Ha tudni szeretnéd, mi akadályozza még a publikálásodat, az ingyenes diagnózis néhány kérdés alapján megmondja, és elküldi az Apple-elutasítás elleni ellenőrzőlistámat. A teljes lépések az alkalmazás közzététele az App Store-ban oldalon vannak.
Gyakori kérdések
Mit jelent a Missing Compliance a TestFlightban?
A build az exportmegfelelési nyilatkozatodra vár, vagyis a titkosítás használatára vonatkozó válaszodra. Az Apple azok közé a státuszok közé sorolja, amelyek tőled várnak lépést. A build addig nem jut el a tesztelőkhöz, amíg nem válaszolsz.
Miért nem kattintható a Missing Compliance Manage linkje?
Ellenőrizd a szerepköröd: az Apple a választ az Account Holder, Admin és App Manager szerepkörnek tartja fenn. Más okot az Apple nem dokumentál. Ha a build épp most érkezett, töltsd újra az oldalt a feldolgozás végéről szóló e-mail után.
Az appom csak HTTPS-t használ, igent kell mondanom a titkosításra?
Az Apple szerint a rendszerbe épített titkosítás, például a HTTPS-kapcsolatok URLSession-nel, általában mentes a dokumentációs kötelezettség alól. Ilyenkor az ITSAppUsesNonExemptEncryption kulcs értéke NO, feltéve, hogy egyetlen külső könyvtár sem ad hozzá saját titkosítást.
Minden buildnél válaszolni kell a titkosítási kérdésekre?
Igen, amíg az Info.plist nem tartalmazza az ITSAppUsesNonExemptEncryption kulcsot. Vele az App Store Connect többé nem teszi fel a kérdéseket. Expóban az app.json-ban állítható be, az ios.config.usesNonExemptEncryption kulccsal.
Hol kell megadni a titkosítást az app.json-ban Expóval?
Az app.json-ban, az expo.ios.config alatt, "usesNonExemptEncryption": false értékkel, ha az appod nem használ nem mentes titkosítást. Az EAS Build beírja a kulcsot a build Info.plist fájljába. A következő buildtől érvényes, a már felküldöttre nem.
A Missing Compliance az App Store-beküldést is blokkolja?
Az exportmegfelelési kérdések minden új verziónál felmerülnek, legyen az béta vagy App Store. Egy build, amelynél nem válaszoltál, nem terjeszthető. Az Info.plist-beli kulcs egyszerre rendezi mindkét esetet.
Kell éves önbesorolási jelentést készítenem?
Az Apple jelzi, hogy mentes titkosítás használata esetén is előírhatnak éves önbesorolási jelentést az amerikai kormány felé, és a hivatalos eljáráshoz irányít. Ha az appod nem mentes titkosítást használ, és a dokumentációt beadtad az Apple-nek, erre a jelentésre nincs szükség.

