Missing Compliance v TestFlight: kako ga trajno odpraviti
Avtor: Mehdi Azizi
Objavljeno , 9 min
Missing Compliance pomeni, da Apple čaka tvojo izjavo o šifriranju. Odkleni build v App Store Connect, nato nastavi ključ, da se ne vrne.
Missing Compliance ni napaka: to je build, ki čaka tvoj odgovor o šifriranju. Dokler ne odgovoriš, build ostane zaklenjen za tvoje testerje. Za ta build odgovoriš na vprašanja v zavihku TestFlight v App Store Connect. Za naslednje pa v Info.plist dodaš ključ ITSAppUsesNonExemptEncryption ali pri Expu ios.config.usesNonExemptEncryption v app.json, in status se ne vrne več.
Svoje iOS aplikacije delam z Expom. V app.json aplikacije Solys ima ključ vrednost false, nastavljen pa je dvakrat: v ios.config in v ios.infoPlist. Ta vodnik sledi Applovim stranem o statusih buildov in o izvozni skladnosti beta buildov, ki sem ju ponovno prebral 6. novembra 2026.
Kaj pomeni Missing Compliance
Applov seznam statusov buildov ga opiše v enem stavku: manjka dokumentacija o izvozni skladnosti in od tebe se pričakuje ukrep. Apple ga prikaže v rumeni barvi, ki označuje proces v teku, odvisen od tebe ali od Appla, opis pa pove, da se od tebe pričakuje ukrep.
Zakaj Apple sploh sprašuje? Stran o izvoznih pravilih za šifriranje to razloži: ko pošlješ build v TestFlight ali App Store, ga pošlješ na strežnik v ZDA. Če se tvoja aplikacija distribuira zunaj ZDA in Kanade, zanjo velja ameriško izvozno pravo, ne glede na državo tvojega podjetja. In takoj ko aplikacija uporablja, vsebuje ali vključuje šifriranje, Apple to šteje za izvoz programske opreme za šifriranje.
Rezultat: pri vsaki novi različici ti App Store Connect postavi vprašanja o skladnosti, razen če nanje že odgovori tvoj Info.plist. Zato prvi build z Expom skoraj vedno pristane v Missing Compliance.
Kako odkleniti build, ki čaka
Koraki so z Applove strani o izvozni skladnosti beta buildov. Potrebuješ vlogo Account Holder, Admin ali App Manager.
- V Apps odpri svojo aplikacijo in nato zavihek TestFlight.
- V stranski vrstici pod Builds izberi platformo.
- V stolpcu Build klikni ikono ali številko zadevnega builda.
- Klikni Provide Export Compliance Information in odgovori na vprašanja.
- Če Apple zahteva dokumentacijo, jo pošlji prek Go to App Encryption Page. Sicer klikni Save.
Apple opisuje tudi bližnjico: povezava Manage zraven builda odpre ista vprašanja, s Choose File pa lahko priložiš že odobreno dokumentacijo. Ko shraniš, build preide v Ready to Submit ali neposredno v Testing, če gre interni skupini. Ready to Test pride šele po beta pregledu za zunanje testerje.
Povezava Manage ni klikljiva? Najprej preveri svojo vlogo v ekipi: Apple odgovor dovoli samo vlogam Account Holder, Admin in App Manager, račun Developer ali Marketing ne more odgovoriti. Drugega vzroka Apple ne navaja. Če si build pravkar poslal, počakaj na e-pošto o koncu obdelave, opisano v vodniku o številki builda in različici, nato osveži stran.
Nikoli več odgovarjati: ključ v projektu
Apple to pove na strani o beta buildih: v Info.plist lahko navedeš, da tvoja aplikacija ne uporablja šifriranja ali da je izvzeta, in ti ni več treba odgovarjati ob vsaki oddaji. Ključ se imenuje ITSAppUsesNonExemptEncryption. Xcode ga prikaže kot App Uses Non-Exempt Encryption.
| Tvoje orodje | Datoteka | Kje | Vrednost |
|---|---|---|---|
| Expo (EAS Build) | app.json | expo.ios.config | false |
| Expo, druga pot | app.json | expo.ios.infoPlist | false |
| Čisti React Native | Info.plist | App Uses Non-Exempt Encryption | NO |
| Xcode, Swift | Info.plist | App Uses Non-Exempt Encryption | NO |
Pri Expu se ključ imenuje usesNonExemptEncryption, referenca konfiguracije pa pojasni, da Applov ključ zapiše v Info.plist builda in da ios.config služi samo buildu: v produkcijskem manifestu se ne pojavi.
{
"expo": {
"ios": {
"config": {
"usesNonExemptEncryption": false
}
}
}
}
Pri Expu ios.infoPlist sprejme ključ tudi pod Applovim imenom z isto vrednostjo: to je druga vrstica v app.json aplikacije Solys. V nativnem projektu je ista izjava ena vrstica v Info.plist: ključ App Uses Non-Exempt Encryption, kot ga prikaže Xcode, z vrednostjo NO. Vrednost je boolean, ne niz.
Ključ začne veljati ob naslednjem buildu. Že poslani build ostane v Missing Compliance, dokler ne odgovoriš v App Store Connect: dejanji se ne nadomeščata, ampak dopolnjujeta.
false ali true: kako se odločiti
Apple vrednost NO opredeli tako: tvoja aplikacija, vključno s knjižnicami tretjih oseb, ne uporablja nobenega šifriranja ali pa samo šifriranje, ki je izvzeto iz obveznosti dokumentacije. Sicer je YES.
Kaj je praviloma izvzeto, po strani o izvoznih pravilih: šifriranje, vgrajeno v sistem, na primer povezave HTTPS prek URLSession. Kaj ni: lastniško šifriranje, ki si ga napisal sam ali vključil. Pregled izvozne skladnosti doda pomemben opomnik: za razlago si odgovoren ti, prav tako za posledice, če izvzetje uveljavljaš napačno.
Za aplikacijo Expo, ki kliče API prek HTTPS, shranjuje nastavitve in prodaja naročnino, je false običajen odgovor. Za aplikacijo, ki sama šifrira sporočila, datoteke ali trezor, je odgovor true, in Apple pričakuje dokumentacijo.
Ne nastavi
falserefleksno. Preglej svoje odvisnosti: knjižnica za šifriranje od konca do konca ali doma narejena šifrirana shramba te prestavi na stran dokumentacije.
Če tvoja aplikacija uporablja neizvzeto šifriranje
Stran o dokumentaciji šifriranja opiše postopek. V App Information zraven App Encryption Documentation gumb za dodajanje odpre vprašanja, nato Choose File za dokument in Save. Apple zahteva, da imaš prej izpolnjen opis aplikacije in nastavljeno razpoložljivost, da lahko presodi, ali dokumentacija zadošča. Ciljni čas je približno dva delovna dneva, če je vloga popolna.
Ko je dokumentacija odobrena, Apple dá vrednost, ki jo vpišeš v ključ ITSEncryptionExportComplianceCode v Info.plist. Z njo ni več vprašanj ob vsakem pošiljanju. Med pregledom build kaže Waiting for Export Compliance Review ali In Compliance Review: od tebe se ne pričakuje nič.
Dve stvari, na kateri opozarja Apple, eno na strani o izvoznih pravilih, drugo v pregledu skladnosti:
- Tudi pri izvzetem šifriranju se lahko zahteva letno poročilo o samoklasifikaciji ameriški vladi. Ni ga treba, če uporabljaš neizvzeto šifriranje in si Applu oddal dokumentacijo.
- Tudi Francija nadzoruje uvoz in izvoz aplikacij za šifriranje. Applov pregled kot zadevna področja navaja varno shranjevanje, varno komunikacijo in protivirusne programe, z izjemami za bančne in medicinske aplikacije, in napoti na ANSSI.
Kaj se zgodi nato v TestFlightu
Odklenjeni build gre po običajni poti builda v TestFlightu, opisani v vodniku TestFlight za testiranje aplikacije za iPhone: interni testerji takoj, zunanji po beta pregledu, potek pa po 90 dneh, glede na seznam statusov buildov. Druge možne zastoje pri pošiljanju z Expom, kot sta že uporabljena številka builda ali zavrnjena datoteka, najdeš v napakah pri pošiljanju z EAS v App Store Connect, celotno verigo pa v objavi aplikacije Expo v App Store z EAS.
iOS & Android Kit vsebuje mojo začetno kodo za Expo, s tem ključem že nastavljenim, in pot od prvega builda do strani v App Storu. Če želiš vedeti, kaj še blokira tvojo objavo, ti brezplačna diagnostika odgovori v nekaj vprašanjih in ti pošlje moj seznam za preprečevanje Applovih zavrnitev. Celotni koraki so v objavi aplikacije v App Store.
Pogosta vprašanja
Kaj pomeni Missing Compliance v TestFlightu?
Build čaka tvojo izjavo o izvozni skladnosti, torej odgovor o uporabi šifriranja. Apple ga uvršča med statuse, ki zahtevajo tvoj ukrep. Build ne gre do testerjev, dokler ne odgovoriš.
Zakaj povezava Manage pri Missing Compliance ni klikljiva?
Preveri svojo vlogo: Apple odgovor dovoli samo vlogam Account Holder, Admin in App Manager. Drugega vzroka Apple ne navaja. Če je build pravkar prispel, osveži stran po e-pošti o koncu obdelave.
Moja aplikacija uporablja samo HTTPS, ali moram pri šifriranju odgovoriti z da?
Apple navaja, da je šifriranje, vgrajeno v sistem, na primer povezave HTTPS prek URLSession, praviloma izvzeto iz obveznosti dokumentacije. V tem primeru ima ključ ITSAppUsesNonExemptEncryption vrednost NO, pod pogojem, da nobena knjižnica tretjih oseb ne doda lastniškega šifriranja.
Ali moram na vprašanja o šifriranju odgovarjati pri vsakem buildu?
Da, dokler tvoj Info.plist ne vsebuje ključa ITSAppUsesNonExemptEncryption. Z njim App Store Connect vprašanj ne postavlja več. Pri Expu ga nastaviš v app.json z ios.config.usesNonExemptEncryption.
Kje v app.json pri Expu prijavim šifriranje?
V app.json pod expo.ios.config, z "usesNonExemptEncryption": false, če tvoja aplikacija ne uporablja neizvzetega šifriranja. EAS Build zapiše ključ v Info.plist builda. Velja od naslednjega builda, ne za že poslanega.
Ali Missing Compliance blokira tudi oddajo v App Store?
Vprašanja o izvozni skladnosti se postavijo za vsako novo različico, beta ali App Store. Build brez odgovora ne more biti distribuiran. Ključ v Info.plist reši oba primera hkrati.
Ali moram oddati letno poročilo o samoklasifikaciji?
Apple opozarja, da lahko tudi uporaba izvzetega šifriranja zahteva letno poročilo o samoklasifikaciji ameriški vladi, in napoti na uradni postopek. Če tvoja aplikacija uporablja neizvzeto šifriranje in si Applu oddal dokumentacijo, to poročilo ni potrebno.

