# Missing Compliance w TestFlight: jak to naprawić na stałe

> Missing Compliance oznacza, że Apple czeka na twoją deklarację szyfrowania. Odblokuj build w App Store Connect i ustaw klucz, żeby status nie wracał.

Oryginalna strona: [Missing Compliance w TestFlight: jak to naprawić na stałe](https://devoria.fr/pl/blog/missing-compliance-testflight-naprawa)
Autor: [Mehdi Azizi](https://devoria.fr/pl/mehdi-azizi)
Publikacja: 2026-11-06
Ostatnia aktualizacja treści: 2026-11-06


**Missing Compliance to nie błąd: to build, który czeka na twoją odpowiedź w sprawie szyfrowania.** Dopóki nie odpowiesz, build jest zablokowany dla twoich testerów. Dla tego builda odpowiadasz na pytania w zakładce TestFlight w App Store Connect. Dla kolejnych dodajesz klucz ITSAppUsesNonExemptEncryption do swojego Info.plist albo `ios.config.usesNonExemptEncryption` do app.json, jeśli używasz Expo, i status już nie wraca.

Moje aplikacje iOS są zrobione w Expo. W app.json Solys klucz ma wartość `false` i jest ustawiony dwa razy: w `ios.config` i w `ios.infoPlist`. Ten poradnik opiera się na stronach Apple o [statusach buildów](https://developer.apple.com/help/app-store-connect/reference/app-uploads/app-build-statuses/) i o [zgodności eksportowej buildów beta](https://developer.apple.com/help/app-store-connect/test-a-beta-version/provide-export-compliance-information-for-beta-builds/), sprawdzonych 6 listopada 2026.

## Co oznacza Missing Compliance

Lista statusów buildów Apple definiuje go jednym zdaniem: brakuje dokumentacji zgodności eksportowej i oczekiwane jest działanie z twojej strony. Apple wyświetla go na żółto, to kolor procesu w toku, który zależy od ciebie albo od Apple, a jego opis precyzuje, że oczekiwane jest działanie z twojej strony.

Dlaczego Apple o to pyta? Wyjaśnia to [strona o przepisach eksportowych dotyczących szyfrowania](https://developer.apple.com/documentation/security/complying-with-encryption-export-regulations): kiedy wysyłasz build do TestFlight albo do App Store, wysyłasz go na serwer w Stanach Zjednoczonych. Jeśli twoja aplikacja jest dystrybuowana poza USA i Kanadą, podlega amerykańskiemu prawu eksportowemu, niezależnie od kraju twojej firmy. A gdy tylko aplikacja używa, zawiera lub integruje szyfrowanie, Apple traktuje to jako eksport oprogramowania szyfrującego.

**Efekt: przy każdej nowej wersji App Store Connect zadaje ci pytania o zgodność, chyba że twój Info.plist już na nie odpowiada.** Dlatego pierwszy build z Expo prawie zawsze trafia w Missing Compliance.

## Odblokuj czekający build

Kroki pochodzą ze strony Apple o zgodności eksportowej buildów beta. Potrzebujesz roli Account Holder, Admin lub App Manager.

1. W Apps otwórz swoją aplikację, a potem zakładkę TestFlight.
2. W pasku bocznym, pod Builds, wybierz platformę.
3. W kolumnie Build kliknij ikonę lub numer danego builda.
4. Kliknij Provide Export Compliance Information i odpowiedz na pytania.
5. Jeśli Apple poprosi o dokumentację, kliknij Go to App Encryption Page, żeby ją wysłać. W przeciwnym razie kliknij Save.

Apple opisuje też skrót: obok builda link Manage otwiera te same pytania, a Choose File pozwala dołączyć już zatwierdzoną dokumentację. Po zapisaniu build przechodzi do Ready to Submit albo od razu do Testing, jeśli idzie do grupy wewnętrznej. Ready to Test pojawia się dopiero po recenzji beta dla testerów zewnętrznych.

**Link Manage nie jest klikalny?** Najpierw sprawdź swoją rolę w zespole: Apple zastrzega odpowiedź dla ról Account Holder, Admin i App Manager, konto Developer czy Marketing nie może odpowiedzieć. Apple nie dokumentuje innej przyczyny. Jeśli build dopiero co został wysłany, poczekaj na e-mail o zakończeniu przetwarzania, opisany w poradniku o [numerze builda i wersji](https://devoria.fr/pl/blog/app-store-connect-build-number-wersja), a potem odśwież stronę.

## Nigdy więcej nie odpowiadaj: klucz w projekcie

Apple mówi to na stronie o buildach beta: możesz zadeklarować w Info.plist, że twoja aplikacja nie używa szyfrowania albo jest z tego zwolniona, i nie musisz już odpowiadać przy każdym zgłoszeniu. Klucz nazywa się [ITSAppUsesNonExemptEncryption](https://developer.apple.com/documentation/bundleresources/information-property-list/itsappusesnonexemptencryption). Xcode wyświetla go pod nazwą App Uses Non-Exempt Encryption.

| Twoje narzędzie     | Plik         | Gdzie                          | Wartość |
| ------------------- | ------------ | ------------------------------ | ------- |
| Expo (EAS Build)    | `app.json`   | `expo.ios.config`              | false   |
| Expo, inna droga    | `app.json`   | `expo.ios.infoPlist`           | false   |
| Czysty React Native | `Info.plist` | App Uses Non-Exempt Encryption | NO      |
| Xcode, Swift        | `Info.plist` | App Uses Non-Exempt Encryption | NO      |

W Expo klucz nazywa się `usesNonExemptEncryption`, a [dokumentacja konfiguracji](https://docs.expo.dev/versions/latest/config/app/) precyzuje, że zapisuje on klucz Apple w Info.plist builda i że `ios.config` służy wyłącznie do builda: nie pojawia się w manifeście produkcyjnym.

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

W Expo `ios.infoPlist` przyjmuje też klucz pod jego nazwą Apple, z tą samą wartością: to druga linia w app.json Solys. W projekcie natywnym ta sama deklaracja to jedna linia w Info.plist: klucz App Uses Non-Exempt Encryption, tak go nazywa Xcode, z wartością NO. Wartość jest typu boolean, nie stringiem.

**Klucz działa od następnego builda.** Build już wysłany zostaje w Missing Compliance, dopóki nie odpowiesz w App Store Connect: te dwa działania się nie zastępują, tylko uzupełniają.

## false czy true: jak zdecydować

Apple definiuje wartość NO tak: twoja aplikacja, łącznie z bibliotekami zewnętrznymi, nie używa żadnego szyfrowania albo tylko szyfrowania zwolnionego z obowiązku dokumentacji. W przeciwnym razie to YES.

Co jest zwykle zwolnione, według strony o przepisach eksportowych: szyfrowanie wbudowane w system, jak połączenia HTTPS przez URLSession. Co nie jest: własne szyfrowanie, które sam napisałeś albo dołączyłeś. [Przegląd zgodności eksportowej](https://developer.apple.com/help/app-store-connect/manage-app-information/overview-of-export-compliance/) dodaje ważne przypomnienie: to ty odpowiadasz za interpretację i jej konsekwencje, jeśli niesłusznie powołasz się na zwolnienie.

Dla aplikacji Expo, która wywołuje API przez HTTPS, przechowuje ustawienia i sprzedaje subskrypcję, `false` to typowa odpowiedź. Dla aplikacji, która sama szyfruje wiadomości, pliki albo sejf, odpowiedź to `true`, a Apple oczekuje dokumentacji.

> Nie wpisuj `false` odruchowo. Przejrzyj swoje zależności: biblioteka szyfrowania end-to-end albo własne szyfrowane przechowywanie danych przerzuca cię na stronę dokumentacji.

## Jeśli twoja aplikacja używa szyfrowania niezwolnionego

[Strona o dokumentacji szyfrowania](https://developer.apple.com/help/app-store-connect/manage-app-information/determine-and-upload-app-encryption-documentation/) opisuje procedurę. W App Information, obok App Encryption Documentation, przycisk dodawania otwiera pytania, potem Choose File dla dokumentu, potem Save. Apple prosi, żeby wcześniej uzupełnić opis aplikacji i ustawić jej dostępność, by ocenić, czy dokumentacja wystarcza. Celuje w około dwa dni robocze, gdy zgłoszenie jest kompletne.

Po zatwierdzeniu dokumentacji Apple podaje wartość do wpisania w klucz `ITSEncryptionExportComplianceCode` w twoim Info.plist. Z nim nie ma już pytań przy każdym wysłaniu. W trakcie weryfikacji twój build pokazuje Waiting for Export Compliance Review albo In Compliance Review: nie musisz nic robić.

Dwie kwestie, na które zwraca uwagę Apple, jedna na stronie o przepisach eksportowych, druga w przeglądzie zgodności:

- **Nawet przy szyfrowaniu zwolnionym może być wymagany coroczny raport samoklasyfikacji dla rządu USA.** Nie jest wymagany, jeśli używasz szyfrowania niezwolnionego i przekazałeś dokumentację Apple.
- **Francja również kontroluje import i eksport aplikacji szyfrujących.** Przegląd Apple wymienia bezpieczne przechowywanie danych, bezpieczną komunikację i antywirusy jako obszary objęte kontrolą, ze zwolnieniami dla aplikacji bankowych i medycznych, i odsyła do ANSSI.

## Co dzieje się dalej w TestFlight

Odblokowany build przechodzi normalną ścieżkę builda TestFlight, opisaną w poradniku [TestFlight do testowania aplikacji na iPhone'a](https://devoria.fr/pl/blog/testflight-testowanie-aplikacji-iphone): testerzy wewnętrzni od razu, testerzy zewnętrzni po recenzji beta, a wygaśnięcie po 90 dniach, według listy statusów buildów. Inne możliwe blokady wysyłki z Expo, jak już użyty numer builda albo odrzucony plik, znajdziesz w [błędach wysyłki EAS do App Store Connect](https://devoria.fr/pl/blog/eas-submit-ios-bledy-naprawa), a cały proces w [publikowaniu aplikacji Expo w App Store z EAS](https://devoria.fr/pl/blog/eas-submit-ios-publikacja-aplikacji-expo-app-store).

[iOS & Android Kit](https://devoria.fr/pl/kits/ios) zawiera mój kod startowy Expo z tym kluczem już ustawionym oraz ścieżkę od pierwszego builda do strony w App Store. Jeśli chcesz wiedzieć, co jeszcze blokuje twoją publikację, [darmowa diagnoza](https://devoria.fr/pl/diagnostic) odpowie ci po kilku pytaniach i wyśle ci moją checklistę przeciw odrzuceniom przez Apple. Wszystkie kroki znajdziesz w [publikowaniu aplikacji w App Store](https://devoria.fr/pl/expertise/publikacja-aplikacji-w-app-store).

## Najczęściej zadawane pytania

### Co oznacza Missing Compliance w TestFlight?

Build czeka na twoją deklarację zgodności eksportowej, czyli odpowiedź w sprawie używania szyfrowania. Apple zalicza go do statusów, które wymagają działania z twojej strony. Build nie trafi do testerów, dopóki nie odpowiesz.

### Dlaczego link Manage przy Missing Compliance nie jest klikalny?

Sprawdź swoją rolę: Apple zastrzega odpowiedź dla ról Account Holder, Admin i App Manager. Apple nie dokumentuje innej przyczyny. Jeśli build dopiero dotarł, odśwież stronę po e-mailu o zakończeniu przetwarzania.

### Moja aplikacja używa tylko HTTPS, czy muszę odpowiedzieć „tak” w sprawie szyfrowania?

Apple podaje, że szyfrowanie wbudowane w system, jak połączenia HTTPS przez URLSession, jest zwykle zwolnione z obowiązku dokumentacji. W takim przypadku klucz ITSAppUsesNonExemptEncryption ma wartość NO, pod warunkiem że żadna zewnętrzna biblioteka nie dodaje własnego szyfrowania.

### Czy trzeba odpowiadać na pytania o szyfrowanie przy każdym buildzie?

Tak, dopóki twój Info.plist nie zawiera klucza ITSAppUsesNonExemptEncryption. Z nim App Store Connect przestaje zadawać pytania. W Expo ustawiasz go w app.json przez `ios.config.usesNonExemptEncryption`.

### Gdzie zadeklarować szyfrowanie w app.json w Expo?

W app.json, pod `expo.ios.config`, z `"usesNonExemptEncryption": false`, jeśli twoja aplikacja nie używa żadnego niezwolnionego szyfrowania. EAS Build zapisuje klucz w Info.plist builda. Działa od następnego builda, nie na tym już wysłanym.

### Czy Missing Compliance blokuje też zgłoszenie do App Store?

Pytania o zgodność eksportową pojawiają się przy każdej nowej wersji, beta czy App Store. Build bez odpowiedzi nie może być dystrybuowany. Klucz w Info.plist rozwiązuje oba przypadki naraz.

### Czy muszę składać coroczny raport samoklasyfikacji?

Apple zaznacza, że używanie szyfrowania zwolnionego może mimo to wymagać corocznego raportu samoklasyfikacji dla rządu USA, i odsyła do oficjalnej procedury. Jeśli twoja aplikacja używa szyfrowania niezwolnionego i przekazałeś dokumentację Apple, ten raport nie jest potrzebny.


## Twój projekt

[Review Kit](https://devoria.fr/pl/kits/app-review): Moja checklista do App Store Review, poprawione odrzucenia od Apple, checklista do Google Play i trzy skille Claude Code. 219 zł.

[iOS & Android Kit](https://devoria.fr/pl/kits/ios): Stwórz swoją aplikację na iPhone'a i Androida z Claude Code: kod startowy moich aplikacji, droga aż do sklepów i wszystkie kity. 439 zł.

[Diagnoza: co dzieli cię od twojej aplikacji na iPhone'a](https://devoria.fr/pl/diagnostic): 7 pytań, 60 sekund: wiesz, co naprawdę blokuje publikację twojej aplikacji na iPhone'a, masz plan w 4 krokach i kit dopasowany do ciebie.
