# Missing Compliance v TestFlightu: jak to opravit natrvalo

> Missing Compliance znamená, že Apple čeká na tvé prohlášení o šifrování. Odblokuj build v App Store Connect a nastav klíč, ať se to už neopakuje.

Původní stránka: [Missing Compliance v TestFlightu: jak to opravit natrvalo](https://devoria.fr/cs/blog/missing-compliance-testflight-oprava)
Autor: [Mehdi Azizi](https://devoria.fr/cs/mehdi-azizi)
Publikováno: 2026-11-06
Poslední revize obsahu: 2026-11-06


**Missing Compliance není chyba: je to build, který čeká na tvou odpověď ohledně šifrování.** Dokud neodpovíš, zůstane build pro tvé testery zablokovaný. U tohoto buildu odpovíš na otázky v záložce TestFlight v App Store Connect. U dalších buildů nastavíš klíč ITSAppUsesNonExemptEncryption ve svém Info.plist, nebo `ios.config.usesNonExemptEncryption` v app.json, pokud používáš Expo, a stav se už nevrátí.

Svoje iOS appky dělám v Expo. V app.json appky Solys má klíč hodnotu `false` a je tam dvakrát: v `ios.config` a v `ios.infoPlist`. Tenhle návod vychází ze stránek Applu o [stavech buildů](https://developer.apple.com/help/app-store-connect/reference/app-uploads/app-build-statuses/) a o [exportní shodě beta buildů](https://developer.apple.com/help/app-store-connect/test-a-beta-version/provide-export-compliance-information-for-beta-builds/), které jsem znovu prošel 6. listopadu 2026.

## Co znamená Missing Compliance

Seznam stavů buildů od Applu to definuje jednou větou: chybí dokumentace exportní shody a čeká se na akci od tebe. Apple ho zobrazuje žlutě, tedy barvou probíhajícího procesu, který závisí na tobě nebo na Applu, a v popisu stojí, že se čeká na tvou akci.

Proč se Apple ptá? Vysvětluje to [stránka o pravidlech pro export šifrování](https://developer.apple.com/documentation/security/complying-with-encryption-export-regulations): když posíláš build do TestFlightu nebo na App Store, posíláš ho na server v USA. Pokud se tvoje appka distribuuje mimo USA a Kanadu, spadá pod americké exportní právo, bez ohledu na to, v jaké zemi sídlí tvoje firma. A jakmile appka šifrování používá, obsahuje nebo integruje, Apple to považuje za export šifrovacího softwaru.

**Výsledek: u každé nové verze se tě App Store Connect zeptá na otázky ke shodě, pokud na ně tvůj Info.plist už neodpovídá.** Proto skoro každý první build z Expo skončí v Missing Compliance.

## Jak odblokovat čekající build

Postup je ze stránky Applu o exportní shodě beta buildů. Potřebuješ roli Account Holder, Admin nebo App Manager.

1. V Apps otevři svou appku a pak záložku TestFlight.
2. V postranním panelu pod Builds vyber platformu.
3. Ve sloupci Build klikni na ikonu nebo číslo daného buildu.
4. Klikni na Provide Export Compliance Information a odpověz na otázky.
5. Pokud po tobě Apple chce dokumentaci, klikni na Go to App Encryption Page a pošli ji. Jinak klikni na Save.

Apple popisuje i zkratku: vedle buildu otevře odkaz Manage stejné otázky a přes Choose File můžeš přiložit už schválenou dokumentaci. Po uložení přejde build do stavu Ready to Submit, nebo rovnou do Testing, pokud jde interní skupině. Ready to Test přijde až po beta review pro externí testery.

**Odkaz Manage nejde rozkliknout?** Nejdřív si ověř svou roli v týmu: Apple nechává odpovídat jen role Account Holder, Admin a App Manager, účet Developer nebo Marketing odpovědět nemůže. Jinou příčinu Apple nedokumentuje. Pokud jsi build právě nahrál, počkej na e-mail o dokončení zpracování, popsaný v návodu o [čísle buildu a verzi](https://devoria.fr/cs/blog/app-store-connect-build-number-verze-cislo-buildu), a stránku obnov.

## Už nikdy neodpovídat: klíč v projektu

Apple to píše na stránce o beta buildech: v Info.plist můžeš uvést, že tvoje appka šifrování nepoužívá nebo je z něj vyjmutá, a pak už nemusíš odpovídat při každém odeslání. Klíč se jmenuje [ITSAppUsesNonExemptEncryption](https://developer.apple.com/documentation/bundleresources/information-property-list/itsappusesnonexemptencryption). Xcode ho zobrazuje pod názvem App Uses Non-Exempt Encryption.

| Tvůj nástroj       | Soubor       | Kde                            | Hodnota |
| ------------------ | ------------ | ------------------------------ | ------- |
| Expo (EAS Build)   | `app.json`   | `expo.ios.config`              | false   |
| Expo, jiná cesta   | `app.json`   | `expo.ios.infoPlist`           | false   |
| Čistý React Native | `Info.plist` | App Uses Non-Exempt Encryption | NO      |
| Xcode, Swift       | `Info.plist` | App Uses Non-Exempt Encryption | NO      |

V Expo se klíč jmenuje `usesNonExemptEncryption` a [konfigurační reference](https://docs.expo.dev/versions/latest/config/app/) uvádí, že zapíše klíč Applu do Info.plist buildu a že `ios.config` slouží jen pro build: v produkčním manifestu se neobjeví.

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

V Expo přijímá `ios.infoPlist` klíč i pod jeho názvem od Applu, se stejnou hodnotou: to je ten druhý řádek v app.json appky Solys. V nativním projektu se stejné prohlášení vejde na jeden řádek Info.plist: klíč App Uses Non-Exempt Encryption, jak ho ukazuje Xcode, s hodnotou NO. Hodnota je boolean, ne řetězec.

**Klíč začne platit od příštího buildu.** Už odeslaný build zůstane v Missing Compliance, dokud neodpovíš v App Store Connect: tyhle dva kroky se nenahrazují, doplňují se.

## false, nebo true: jak se rozhodnout

Apple definuje hodnotu NO takhle: tvoje appka, včetně knihoven třetích stran, nepoužívá žádné šifrování, nebo jen šifrování vyjmuté z povinnosti dokumentace. Jinak je to YES.

Co je obvykle vyjmuté, podle stránky o exportních pravidlech: šifrování zabudované v systému, třeba HTTPS spojení přes URLSession. Co vyjmuté není: proprietární šifrování, které sis napsal nebo přibalil. [Přehled exportní shody](https://developer.apple.com/help/app-store-connect/manage-app-information/overview-of-export-compliance/) přidává důležitou připomínku: za výklad odpovídáš ty, a taky za důsledky, pokud si výjimku nárokuješ neprávem.

Pro Expo appku, která volá API přes HTTPS, ukládá nastavení a prodává předplatné, je `false` obvyklá odpověď. Pro appku, která sama šifruje zprávy, soubory nebo trezor, je odpověď `true` a Apple čeká dokumentaci.

> Nedávej `false` automaticky. Projdi si závislosti: knihovna pro end-to-end šifrování nebo vlastní šifrované úložiště tě posune na stranu dokumentace.

## Pokud tvoje appka používá nevyjmuté šifrování

[Stránka o dokumentaci šifrování](https://developer.apple.com/help/app-store-connect/manage-app-information/determine-and-upload-app-encryption-documentation/) popisuje postup. V App Information vedle App Encryption Documentation otevře tlačítko pro přidání otázky, pak přes Choose File nahraješ dokument a dáš Save. Apple chce, abys předtím vyplnil popis appky a nastavil její dostupnost, aby mohl posoudit, jestli dokumentace stačí. Cílí na zhruba dva pracovní dny, když je podklad kompletní.

Po schválení dokumentace ti Apple dá hodnotu, kterou vložíš do klíče `ITSEncryptionExportComplianceCode` ve svém Info.plist. S ní už otázky při každém odeslání nebudou. Během posuzování ukazuje build Waiting for Export Compliance Review nebo In Compliance Review: od tebe se nečeká žádná akce.

Dvě věci, na které Apple upozorňuje, jedna na stránce o exportních pravidlech, druhá v přehledu shody:

- **I při vyjmutém šifrování může být vyžadována roční zpráva o sebeklasifikaci pro americkou vládu.** Není potřeba, pokud používáš nevyjmuté šifrování a dokumentaci jsi Applu poskytl.
- **Francie taky kontroluje import a export appek se šifrováním.** Přehled od Applu uvádí jako dotčené oblasti zabezpečené úložiště, zabezpečenou komunikaci a antiviry, s výjimkami pro bankovní a zdravotnické appky, a odkazuje na ANSSI.

## Co se pak děje v TestFlightu

Odblokovaný build pak žije normálním životem TestFlight buildu, jak to popisuje návod [TestFlight pro testování iPhone appky](https://devoria.fr/cs/blog/testflight-testovani-iphone-aplikace): interní testeři hned, externí testeři po beta review a expirace po 90 dnech, podle seznamu stavů buildů. Další možné zádrhele při odesílání z Expo, třeba už použité číslo buildu nebo odmítnutý soubor, najdeš v [chybách při odesílání z EAS do App Store Connect](https://devoria.fr/cs/blog/eas-submit-ios-caste-chyby-oprava) a celý proces v článku [jak publikovat Expo appku na App Store přes EAS](https://devoria.fr/cs/blog/eas-submit-ios-publikovat-expo-app-app-store).

[iOS & Android Kit](https://devoria.fr/cs/kits/ios) obsahuje můj startovací kód v Expo, s tímhle klíčem už nastaveným, a cestu od prvního buildu až po stránku v App Storu. Jestli chceš vědět, co ti ještě brání v publikaci, [bezplatná diagnostika](https://devoria.fr/cs/diagnostic) ti odpoví po pár otázkách a pošle ti můj checklist proti odmítnutí od Applu. Kompletní kroky jsou v článku [jak publikovat aplikaci na App Store](https://devoria.fr/cs/expertise/jak-vydat-aplikaci-v-app-store).

## Časté dotazy

### Co znamená Missing Compliance v TestFlightu?

Build čeká na tvé prohlášení o exportní shodě, tedy na odpověď, jestli používáš šifrování. Apple ho řadí mezi stavy, které vyžadují akci od tebe. Dokud neodpovíš, build se k testerům nedostane.

### Proč nejde rozkliknout odkaz Manage u Missing Compliance?

Ověř si roli: Apple nechává odpovídat jen role Account Holder, Admin a App Manager. Jinou příčinu Apple nedokumentuje. Pokud build právě dorazil, obnov stránku po e-mailu o dokončení zpracování.

### Moje appka používá jen HTTPS, mám u šifrování odpovědět ano?

Apple uvádí, že šifrování zabudované v systému, třeba HTTPS spojení přes URLSession, je obvykle vyjmuté z povinnosti dokumentace. V tom případě má klíč ITSAppUsesNonExemptEncryption hodnotu NO, pokud žádná knihovna třetí strany nepřidává proprietární šifrování.

### Musím na otázky o šifrování odpovídat u každého buildu?

Ano, dokud tvůj Info.plist neobsahuje klíč ITSAppUsesNonExemptEncryption. S ním se tě App Store Connect už ptát nebude. V Expo ho nastavíš v app.json přes `ios.config.usesNonExemptEncryption`.

### Kde v app.json v Expo deklarovat šifrování?

V app.json pod `expo.ios.config`, s `"usesNonExemptEncryption": false`, pokud tvoje appka nepoužívá žádné nevyjmuté šifrování. EAS Build zapíše klíč do Info.plist buildu. Platí od příštího buildu, ne pro ten už odeslaný.

### Blokuje Missing Compliance i odeslání na App Store?

Otázky k exportní shodě se kladou u každé nové verze, beta i pro App Store. Build, který na ně neodpověděl, nejde distribuovat. Klíč v Info.plist vyřeší oba případy najednou.

### Musím podávat roční zprávu o sebeklasifikaci?

Apple upozorňuje, že i použití vyjmutého šifrování může vyžadovat roční zprávu o sebeklasifikaci pro americkou vládu, a odkazuje na oficiální postup. Pokud tvoje appka používá nevyjmuté šifrování a dokumentaci jsi Applu poskytl, tahle zpráva potřeba není.


## Tvůj projekt

[Review Kit](https://devoria.fr/cs/kits/app-review): Můj checklist pro review v App Store, moje opravená zamítnutí od Applu, checklist pro Google Play a tři skilly pro Claude Code. 1 199 Kč.

[iOS & Android Kit](https://devoria.fr/cs/kits/ios): Vytvoř si aplikaci pro iPhone a Android s Claude Code: startovní kód mých aplikací, cesta až do obchodů a všechny kity. 2 399 Kč.

[Diagnostika: co tě dělí od tvé iPhone aplikace](https://devoria.fr/cs/diagnostic): 7 otázek, 60 sekund: zjistíš, co ti doopravdy brání vydat iPhone aplikaci, dostaneš cestu ve 4 krocích a kit přesně pro tebe.
