Missing Compliance na TestFlightu: kako to riješiti trajno
Autor: Mehdi Azizi
Objavljeno , 9 min
Missing Compliance znači da Apple čeka tvoju izjavu o enkripciji. Odblokiraj build u App Store Connectu, a onda postavi ključ da se više ne vraća.
Missing Compliance nije greška: to je build koji čeka tvoj odgovor o enkripciji. Dok ne odgovoriš, build ostaje blokiran za tvoje testere. Za taj build odgovaraš na pitanja na kartici TestFlight u App Store Connectu. Za sljedeće postaviš ključ ITSAppUsesNonExemptEncryption u svoj Info.plist, ili ios.config.usesNonExemptEncryption u app.json ako koristiš Expo, i status se više ne vraća.
Svoje iOS aplikacije radim s Expom. U app.json Solysa ključ ima vrijednost false i postavljen je dvaput: u ios.config i u ios.infoPlist. Ovaj vodič prati Appleove stranice o statusima builda i o izvoznoj usklađenosti beta buildova, ponovno pročitane 6. studenoga 2026.
Što znači Missing Compliance
Appleov popis statusa builda to definira u jednoj rečenici: nedostaje dokumentacija o izvoznoj usklađenosti i od tebe se očekuje radnja. Apple ga prikazuje žutom bojom, bojom procesa u tijeku koji ovisi o tebi ili o Appleu, a opis navodi da se od tebe očekuje radnja.
Zašto Apple to pita? Stranica o pravilima izvoza enkripcije to objašnjava: kad šalješ build na TestFlight ili App Store, šalješ ga na poslužitelj u Sjedinjenim Državama. Ako se tvoja aplikacija distribuira izvan SAD-a i Kanade, podliježe američkom izvoznom pravu, bez obzira na to u kojoj je zemlji tvoja tvrtka. A čim aplikacija koristi, sadrži ili ugrađuje enkripciju, Apple to smatra izvozom softvera za enkripciju.
Rezultat: pri svakoj novoj verziji App Store Connect ti postavlja pitanja o usklađenosti, osim ako tvoj Info.plist već na njih odgovara. Zato prvi Expo build gotovo uvijek stigne sa statusom Missing Compliance.
Odblokiraj build koji čeka
Koraci dolaze s Appleove stranice o izvoznoj usklađenosti beta buildova. Trebaš ulogu Account Holder, Admin ili App Manager.
- U Apps otvori svoju aplikaciju, zatim karticu TestFlight.
- U bočnoj traci, pod Builds, odaberi platformu.
- U stupcu Build klikni na ikonu ili broj odgovarajućeg builda.
- Klikni na Provide Export Compliance Information, zatim odgovori na pitanja.
- Ako Apple traži dokumentaciju, klikni na Go to App Encryption Page da je pošalješ. Inače klikni na Save.
Apple opisuje i prečac: pokraj builda poveznica Manage otvara ista pitanja, a Choose File omogućuje da priložiš već odobrenu dokumentaciju. Kad spremiš, build prelazi u Ready to Submit, ili izravno u Testing ako ide internoj grupi. Ready to Test dolazi tek nakon beta pregleda za vanjske testere.
Poveznica Manage nije klikabilna? Prvo provjeri svoju ulogu u timu: Apple odgovor ostavlja ulogama Account Holder, Admin i App Manager, račun s ulogom Developer ili Marketing ne može odgovoriti. Apple ne dokumentira drugi uzrok. Ako je build upravo poslan, pričekaj e-mail o završetku obrade, opisan u vodiču o broju builda i verziji, pa ponovno učitaj stranicu.
Da više nikad ne odgovaraš: ključ u projektu
Apple to kaže na stranici o beta buildovima: u Info.plist možeš navesti da tvoja aplikacija ne koristi enkripciju, ili da je izuzeta, i više ne moraš odgovarati pri svakom slanju. Ključ se zove ITSAppUsesNonExemptEncryption. Xcode ga prikazuje pod imenom App Uses Non-Exempt Encryption.
| Tvoj alat | Datoteka | Gdje | Vrijednost |
|---|---|---|---|
| Expo (EAS Build) | app.json | expo.ios.config | false |
| Expo, drugi način | 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 |
U Expu se ključ zove usesNonExemptEncryption, a referenca konfiguracije navodi da on upisuje Appleov ključ u Info.plist builda te da ios.config služi samo za build: ne pojavljuje se u produkcijskom manifestu.
{
"expo": {
"ios": {
"config": {
"usesNonExemptEncryption": false
}
}
}
}
U Expu ios.infoPlist prihvaća i ključ pod Appleovim imenom, s istom vrijednošću: to je drugi redak u app.json Solysa. U nativnom projektu ista izjava stane u jedan redak Info.plista: ključ App Uses Non-Exempt Encryption, kako ga Xcode prikazuje, s vrijednošću NO. Vrijednost je boolean, a ne string.
Ključ djeluje od sljedećeg builda. Već poslani build ostaje u statusu Missing Compliance dok ne odgovoriš u App Store Connectu: te dvije radnje ne zamjenjuju jedna drugu, nego se nadopunjuju.
false ili true: kako odlučiti
Apple vrijednost NO definira ovako: tvoja aplikacija, uključujući biblioteke trećih strana, ne koristi nikakvu enkripciju ili koristi samo enkripciju izuzetu od obveze dokumentacije. Inače je YES.
Što je obično izuzeto, prema stranici o pravilima izvoza: enkripcija ugrađena u sustav, poput HTTPS veza preko URLSessiona. Što nije: vlastita enkripcija, koju si napisao ili ugradio. Pregled izvozne usklađenosti dodaje važan podsjetnik: ti si odgovoran za tumačenje, i za njegove posljedice, ako neopravdano tvrdiš da si izuzet.
Za Expo aplikaciju koja poziva API preko HTTPS-a, sprema postavke i prodaje pretplatu, false je uobičajen odgovor. Za aplikaciju koja sama šifrira poruke, datoteke ili trezor, odgovor je true, i Apple očekuje dokumentaciju.
Ne stavljaj
falsepo refleksu. Pregledaj svoje ovisnosti: biblioteka za end-to-end enkripciju ili vlastito šifrirano spremište prebacuje te na stranu dokumentacije.
Ako tvoja aplikacija koristi enkripciju koja nije izuzeta
Stranica o dokumentaciji enkripcije opisuje postupak. U App Information, pokraj App Encryption Documentation, gumb za dodavanje otvara pitanja, zatim Choose File za dokument, pa Save. Apple traži da prije toga ispuniš opis aplikacije i postaviš njezinu dostupnost, kako bi procijenio je li dokumentacija dovoljna. Cilja na otprilike dva radna dana kad je dokumentacija potpuna.
Kad se dokumentacija odobri, Apple ti daje vrijednost koju upisuješ u ključ ITSEncryptionExportComplianceCode u Info.plistu. S njom nema više pitanja pri svakom slanju. Tijekom pregleda build prikazuje Waiting for Export Compliance Review ili In Compliance Review: od tebe se ne očekuje nikakva radnja.
Dvije stvari koje Apple ističe, jednu na stranici o pravilima izvoza, drugu u pregledu usklađenosti:
- I s izuzetom enkripcijom može se tražiti godišnje izvješće o samoklasifikaciji američkoj vladi. Ne traži se ako koristiš enkripciju koja nije izuzeta i dostavio si dokumentaciju Appleu.
- Francuska također kontrolira uvoz i izvoz aplikacija s enkripcijom. Appleov pregled navodi sigurnu pohranu, sigurne komunikacije i antiviruse kao obuhvaćena područja, uz izuzeća za bankovne i medicinske aplikacije, i upućuje na ANSSI.
Što se dalje događa na TestFlightu
Odblokirani build prolazi uobičajen život TestFlight builda, opisan u vodiču TestFlight za testiranje iPhone aplikacije: interni testeri odmah, vanjski testeri nakon beta pregleda, i istek nakon 90 dana, prema popisu statusa builda. Ostala moguća zaustavljanja Expo slanja, poput već iskorištenog broja builda ili odbijene datoteke, nalaze se u greškama pri EAS slanju u App Store Connect, a cijeli lanac u objavi Expo aplikacije na App Storeu s EAS-om.
iOS & Android Kit sadrži moj početni Expo kod, s već postavljenim ovim ključem, i put od prvog builda do stranice na App Storeu. Ako želiš znati što ti još blokira objavu, besplatna dijagnostika odgovara ti u nekoliko pitanja i šalje ti moju checklistu protiv Appleovih odbijanja. Svi koraci su u objavi aplikacije na App Storeu.
Česta pitanja
Što znači Missing Compliance na TestFlightu?
Build čeka tvoju izjavu o izvoznoj usklađenosti, odnosno tvoj odgovor o korištenju enkripcije. Apple ga svrstava među statuse koji traže radnju s tvoje strane. Build ne ide testerima dok ne odgovoriš.
Zašto poveznica Manage kod Missing Compliance nije klikabilna?
Provjeri svoju ulogu: Apple odgovor ostavlja ulogama Account Holder, Admin i App Manager. Apple ne dokumentira drugi uzrok. Ako je build upravo stigao, ponovno učitaj stranicu nakon e-maila o završetku obrade.
Moja aplikacija koristi samo HTTPS, moram li odgovoriti da koristim enkripciju?
Apple navodi da je enkripcija ugrađena u sustav, poput HTTPS veza preko URLSessiona, obično izuzeta od obveze dokumentacije. U tom slučaju ključ ITSAppUsesNonExemptEncryption ima vrijednost NO, pod uvjetom da nijedna biblioteka treće strane ne dodaje vlastitu enkripciju.
Moram li odgovarati na pitanja o enkripciji za svaki build?
Da, dok tvoj Info.plist ne sadrži ključ ITSAppUsesNonExemptEncryption. S njim App Store Connect više ne postavlja pitanja. U Expu se postavlja u app.json preko ios.config.usesNonExemptEncryption.
Gdje deklarirati enkripciju u app.json s Expom?
U app.json, pod expo.ios.config, s "usesNonExemptEncryption": false ako tvoja aplikacija ne koristi nikakvu enkripciju koja nije izuzeta. EAS Build upisuje ključ u Info.plist builda. Djeluje od sljedećeg builda, ne na već poslanom.
Blokira li Missing Compliance i slanje na App Store?
Pitanja o izvoznoj usklađenosti postavljaju se za svaku novu verziju, beta ili App Store. Build koji nije odgovorio ne može se distribuirati. Ključ u Info.plistu rješava oba slučaja odjednom.
Moram li podnijeti godišnje izvješće o samoklasifikaciji?
Apple upozorava da korištenje izuzete enkripcije ipak može zahtijevati godišnje izvješće o samoklasifikaciji američkoj vladi i upućuje na službeni postupak. Ako tvoja aplikacija koristi enkripciju koja nije izuzeta i dostavio si dokumentaciju Appleu, to izvješće nije potrebno.

