# Missing Compliance în TestFlight: cum o rezolvi definitiv

> Missing Compliance înseamnă că Apple așteaptă declarația ta despre criptare. Deblochează build-ul în App Store Connect, apoi setează cheia ca să nu mai apară.

Pagina originală: [Missing Compliance în TestFlight: cum o rezolvi definitiv](https://devoria.fr/ro/blog/missing-compliance-testflight-rezolvare)
Autor: [Mehdi Azizi](https://devoria.fr/ro/mehdi-azizi)
Publicare: 2026-11-06
Ultima revizuire a conținutului: 2026-11-06


**Missing Compliance nu e o eroare: e un build care îți așteaptă răspunsul despre criptare.** Cât timp nu ai răspuns, build-ul rămâne blocat pentru testerii tăi. Pentru build-ul ăsta, răspunzi la întrebări în tab-ul TestFlight din App Store Connect. Pentru următoarele, pui cheia ITSAppUsesNonExemptEncryption în Info.plist sau `ios.config.usesNonExemptEncryption` în app.json dacă folosești Expo, și statusul nu mai apare.

Aplicațiile mele iOS sunt făcute cu Expo. În app.json-ul aplicației Solys, cheia are valoarea `false` și apare de două ori: în `ios.config` și în `ios.infoPlist`. Ghidul ăsta urmează paginile Apple despre [statusurile build-urilor](https://developer.apple.com/help/app-store-connect/reference/app-uploads/app-build-statuses/) și despre [conformitatea la export pentru build-urile beta](https://developer.apple.com/help/app-store-connect/test-a-beta-version/provide-export-compliance-information-for-beta-builds/), recitite pe 6 noiembrie 2026.

## Ce înseamnă Missing Compliance

Lista Apple cu statusurile build-urilor îl definește într-o frază: lipsește documentația de conformitate la export și se așteaptă o acțiune din partea ta. Apple îl afișează cu galben, culoarea unui proces în desfășurare care depinde de tine sau de Apple, iar descrierea precizează că se așteaptă o acțiune din partea ta.

De ce pune Apple întrebarea? [Pagina despre regulile de export pentru criptare](https://developer.apple.com/documentation/security/complying-with-encryption-export-regulations) explică: când trimiți un build către TestFlight sau App Store, îl trimiți pe un server din Statele Unite. Dacă aplicația ta e distribuită în afara Statelor Unite și a Canadei, intră sub legislația americană privind exportul, indiferent de țara firmei tale. Și imediat ce o aplicație folosește, conține sau integrează criptare, Apple consideră că e vorba de un export de software de criptare.

**Rezultatul: la fiecare versiune nouă, App Store Connect îți pune întrebările de conformitate, în afară de cazul în care Info.plist-ul tău răspunde deja la ele.** De asta un prim build Expo ajunge aproape mereu în Missing Compliance.

## Deblochează build-ul care așteaptă

Pașii vin din pagina Apple despre conformitatea la export pentru build-urile beta. Ai nevoie de rolul Account Holder, Admin sau App Manager.

1. În Apps, deschide aplicația, apoi tab-ul TestFlight.
2. În bara laterală, sub Builds, alege platforma.
3. În coloana Build, dă click pe iconița sau pe numărul build-ului respectiv.
4. Dă click pe Provide Export Compliance Information, apoi răspunde la întrebări.
5. Dacă Apple îți cere documentație, dă click pe Go to App Encryption Page ca s-o trimiți. Altfel, dă click pe Save.

Apple descrie și scurtătura: lângă build, linkul Manage deschide aceleași întrebări, iar Choose File îți permite să atașezi o documentație deja aprobată. După ce salvezi, build-ul trece în Ready to Submit, sau direct în Testing dacă merge la un grup intern. Ready to Test apare doar după review-ul beta pentru testerii externi.

**Linkul Manage nu e clickabil?** Verifică mai întâi rolul tău în echipă: Apple rezervă răspunsul pentru rolurile Account Holder, Admin și App Manager, un cont Developer sau Marketing nu poate răspunde. Apple nu documentează altă cauză. Dacă build-ul tocmai a fost trimis, așteaptă e-mailul de finalizare a procesării, detaliat în ghidul despre [numărul de build și versiune](https://devoria.fr/ro/blog/build-number-app-store-connect-versiune), apoi reîncarcă pagina.

## Să nu mai răspunzi niciodată: cheia din proiectul tău

Apple o spune pe pagina build-urilor beta: poți indica în Info.plist că aplicația ta nu folosește criptare sau că e scutită, și nu mai trebuie să răspunzi la fiecare trimitere. Cheia se numește [ITSAppUsesNonExemptEncryption](https://developer.apple.com/documentation/bundleresources/information-property-list/itsappusesnonexemptencryption). Xcode o afișează sub numele App Uses Non-Exempt Encryption.

| Unealta ta       | Fișier       | Unde                           | Valoare |
| ---------------- | ------------ | ------------------------------ | ------- |
| Expo (EAS Build) | `app.json`   | `expo.ios.config`              | false   |
| Expo, altă cale  | `app.json`   | `expo.ios.infoPlist`           | false   |
| React Native pur | `Info.plist` | App Uses Non-Exempt Encryption | NO      |
| Xcode, Swift     | `Info.plist` | App Uses Non-Exempt Encryption | NO      |

Cu Expo, cheia se numește `usesNonExemptEncryption`, iar [referința de configurare](https://docs.expo.dev/versions/latest/config/app/) precizează că scrie cheia Apple în Info.plist-ul build-ului și că `ios.config` e folosit doar la build: nu apare în manifestul de producție.

```json
{
  "expo": {
    "ios": {
      "config": {
        "usesNonExemptEncryption": false
      }
    }
  }
}
```

Cu Expo, `ios.infoPlist` acceptă și cheia sub numele ei Apple, cu aceeași valoare: e a doua linie din app.json-ul aplicației Solys. Într-un proiect nativ, aceeași declarație încape într-o linie din Info.plist: cheia App Uses Non-Exempt Encryption, adică numele afișat de Xcode, cu valoarea NO. Valoarea e un boolean, nu un string.

**Cheia intră în vigoare de la următorul build.** Build-ul deja trimis rămâne în Missing Compliance cât timp nu ai răspuns în App Store Connect: cele două acțiuni nu se înlocuiesc, se completează.

## false sau true: cum decizi

Apple definește valoarea NO așa: aplicația ta, inclusiv bibliotecile terțe, nu folosește nicio criptare sau folosește doar criptare scutită de obligațiile de documentare. Altfel, e YES.

Ce e în general scutit, conform paginii despre regulile de export: criptarea integrată în sistem, cum ar fi conexiunile HTTPS prin URLSession. Ce nu e scutit: o criptare proprietară, scrisă sau inclusă de tine. [Prezentarea generală a conformității la export](https://developer.apple.com/help/app-store-connect/manage-app-information/overview-of-export-compliance/) adaugă o precizare importantă: tu ești responsabil de interpretare și de consecințele ei, dacă revendici greșit o scutire.

Pentru o aplicație Expo care apelează un API prin HTTPS, salvează preferințe și vinde un abonament, `false` e răspunsul obișnuit. Pentru o aplicație care criptează singură mesaje, fișiere sau un seif, răspunsul e `true`, iar Apple așteaptă documentație.

> Nu pune `false` din reflex. Verifică-ți dependențele: o bibliotecă de criptare end-to-end sau un storage criptat făcut de tine te trece de partea documentației.

## Dacă aplicația ta folosește criptare nescutită

[Pagina despre documentația de criptare](https://developer.apple.com/help/app-store-connect/manage-app-information/determine-and-upload-app-encryption-documentation/) descrie procesul. În App Information, lângă App Encryption Documentation, butonul de adăugare deschide întrebările, apoi Choose File pentru document, apoi Save. Apple cere să fi completat înainte descrierea aplicației și disponibilitatea ei, ca să poată judeca dacă documentația e suficientă. Ținta e de aproximativ două zile lucrătoare când dosarul e complet.

După ce documentația e aprobată, Apple îți dă o valoare pe care o pui în cheia `ITSEncryptionExportComplianceCode` din Info.plist. Cu ea, nu mai primești întrebări la fiecare trimitere. În timpul analizei, build-ul tău afișează Waiting for Export Compliance Review sau In Compliance Review: nu se așteaptă nicio acțiune din partea ta.

Două puncte semnalate de Apple, unul pe pagina regulilor de export, celălalt în prezentarea generală a conformității:

- **Chiar și cu o criptare scutită, poate fi cerut un raport anual de autoclasificare către guvernul american.** Nu e cerut dacă folosești criptare nescutită și ai trimis documentația la Apple.
- **Franța controlează și ea importul și exportul aplicațiilor de criptare.** Prezentarea generală Apple menționează stocarea securizată, comunicațiile securizate și antivirusurile ca domenii vizate, cu scutiri pentru aplicațiile bancare și medicale, și trimite către ANSSI.

## Ce se întâmplă apoi în TestFlight

Build-ul deblocat urmează viața normală a unui build TestFlight, descrisă în ghidul [TestFlight pentru a-ți testa aplicația de iPhone](https://devoria.fr/ro/blog/testflight-testare-aplicatie-iphone): testeri interni imediat, testeri externi după review-ul beta și expirare după 90 de zile, conform listei de statusuri. Celelalte blocaje posibile ale unei trimiteri Expo, cum ar fi un număr de build deja folosit sau un fișier respins, sunt în [erorile de trimitere EAS către App Store Connect](https://devoria.fr/ro/blog/erori-eas-submit-ios-rezolvare), iar tot lanțul în [publicarea unei aplicații Expo în App Store cu EAS](https://devoria.fr/ro/blog/eas-submit-ios-publicare-aplicatie-expo-app-store).

[iOS & Android Kit](https://devoria.fr/ro/kits/ios) conține codul meu de pornire Expo, cu cheia asta deja setată, și traseul care te duce de la primul build la pagina din App Store. Dacă vrei să afli ce îți mai blochează publicarea, [diagnosticul gratuit](https://devoria.fr/ro/diagnostic) îți răspunde în câteva întrebări și îți trimite checklist-ul meu anti-respingere Apple. Pașii compleți sunt în [publicarea unei aplicații în App Store](https://devoria.fr/ro/expertise/publicare-aplicatie-app-store).

## Întrebări frecvente

### Ce înseamnă Missing Compliance în TestFlight?

Build-ul îți așteaptă declarația de conformitate la export, adică răspunsul tău despre folosirea criptării. Apple îl încadrează printre statusurile care cer o acțiune din partea ta. Build-ul nu ajunge la testeri cât timp nu ai răspuns.

### De ce nu e clickabil linkul Manage de la Missing Compliance?

Verifică-ți rolul: Apple rezervă răspunsul pentru rolurile Account Holder, Admin și App Manager. Apple nu documentează altă cauză. Dacă build-ul tocmai a sosit, reîncarcă pagina după e-mailul de finalizare a procesării.

### Aplicația mea folosește doar HTTPS, trebuie să răspund da la criptare?

Apple spune că criptarea integrată în sistem, cum ar fi conexiunile HTTPS prin URLSession, e în general scutită de obligațiile de documentare. În cazul ăsta, cheia ITSAppUsesNonExemptEncryption are valoarea NO, cu condiția ca nicio bibliotecă terță să nu adauge o criptare proprietară.

### Trebuie să răspund la întrebările despre criptare la fiecare build?

Da, cât timp Info.plist-ul tău nu conține cheia ITSAppUsesNonExemptEncryption. Cu ea, App Store Connect nu mai pune întrebările. Cu Expo, o setezi în app.json prin `ios.config.usesNonExemptEncryption`.

### Unde declar criptarea în app.json cu Expo?

În app.json, sub `expo.ios.config`, cu `"usesNonExemptEncryption": false` dacă aplicația ta nu folosește nicio criptare nescutită. EAS Build scrie cheia în Info.plist-ul build-ului. Intră în vigoare de la următorul build, nu pe cel deja trimis.

### Missing Compliance blochează și trimiterea în App Store?

Întrebările de conformitate la export apar pentru orice versiune nouă, beta sau App Store. Un build care nu a răspuns la ele nu poate fi distribuit. Cheia din Info.plist rezolvă ambele cazuri deodată.

### Trebuie să fac un raport anual de autoclasificare?

Apple semnalează că folosirea unei criptări scutite poate totuși impune un raport anual de autoclasificare către guvernul american și trimite către procedura oficială. Dacă aplicația ta folosește criptare nescutită și ai trimis documentația la Apple, raportul nu e necesar.


## Proiectul tău

[Review Kit](https://devoria.fr/ro/kits/app-review): Checklistul meu de review App Store, respingerile mele de la Apple rezolvate, checklistul pentru Google Play și trei skilluri Claude Code. 259 RON.

[iOS & Android Kit](https://devoria.fr/ro/kits/ios): Creează-ți aplicația de iPhone și Android cu Claude Code: codul de pornire al aplicațiilor mele, drumul până în store-uri și toate kiturile. 529 RON.

[Diagnostic: ce te desparte de aplicația ta de iPhone](https://devoria.fr/ro/diagnostic): 7 întrebări, 60 de secunde: afli ce te blochează de fapt să-ți publici aplicația de iPhone, traseul tău în 4 etape și kitul potrivit pentru tine.
