# Missing Compliance v TestFlight: ako ho opraviť natrvalo

> Missing Compliance znamená, že Apple čaká na tvoje vyhlásenie o šifrovaní. Odblokuj build v App Store Connect a nastav kľúč, aby sa to už neopakovalo.

Pôvodná stránka: [Missing Compliance v TestFlight: ako ho opraviť natrvalo](https://devoria.fr/sk/blog/missing-compliance-testflight-oprava)
Autor: [Mehdi Azizi](https://devoria.fr/sk/mehdi-azizi)
Zverejnenie: 2026-11-06
Posledná revízia obsahu: 2026-11-06


**Missing Compliance nie je chyba: je to build, ktorý čaká na tvoju odpoveď ohľadom šifrovania.** Kým neodpovieš, build zostáva pre tvojich testerov zablokovaný. Pri tomto builde odpovieš na otázky v karte TestFlight v App Store Connect. Pri ďalších nastavíš kľúč ITSAppUsesNonExemptEncryption v Info.plist, alebo `ios.config.usesNonExemptEncryption` v app.json, ak používaš Expo, a tento stav sa už nevráti.

Moje iOS appky robím v Expo. V app.json appky Solys má kľúč hodnotu `false` a je nastavený dvakrát: v `ios.config` aj v `ios.infoPlist`. Tento návod vychádza zo stránok Apple o [stavoch buildov](https://developer.apple.com/help/app-store-connect/reference/app-uploads/app-build-statuses/) a o [exportnej zhode beta buildov](https://developer.apple.com/help/app-store-connect/test-a-beta-version/provide-export-compliance-information-for-beta-builds/), ktoré som si znova prečítal 6. novembra 2026.

## Čo znamená Missing Compliance

Zoznam stavov buildov od Apple to definuje jednou vetou: chýba dokumentácia k exportnej zhode a očakáva sa akcia z tvojej strany. Apple ho zobrazuje žltou, čo je farba prebiehajúceho procesu, ktorý závisí od teba alebo od Apple, a jeho popis upresňuje, že sa čaká na tvoju akciu.

Prečo sa Apple pýta? Vysvetľuje to [stránka o pravidlách exportu šifrovania](https://developer.apple.com/documentation/security/complying-with-encryption-export-regulations): keď posielaš build do TestFlightu alebo na App Store, posielaš ho na server v USA. Ak sa tvoja appka distribuuje mimo USA a Kanady, spadá pod americké exportné právo, bez ohľadu na to, v akej krajine sídli tvoja firma. A hneď ako appka šifrovanie používa, obsahuje alebo integruje, Apple to považuje za export šifrovacieho softvéru.

**Výsledok: pri každej novej verzii ti App Store Connect položí otázky o exportnej zhode, pokiaľ na ne už neodpovedá tvoj Info.plist.** Preto prvý Expo build skoro vždy skončí v stave Missing Compliance.

## Ako odblokovať čakajúci build

Kroky pochádzajú zo stránky Apple o exportnej zhode beta buildov. Potrebuješ rolu Account Holder, Admin alebo App Manager.

1. V Apps otvor svoju appku a potom kartu TestFlight.
2. V bočnom paneli pod Builds vyber platformu.
3. V stĺpci Build klikni na ikonu alebo číslo príslušného buildu.
4. Klikni na Provide Export Compliance Information a odpovedz na otázky.
5. Ak od teba Apple chce dokumentáciu, klikni na Go to App Encryption Page a pošli ju. Inak klikni na Save.

Apple popisuje aj skratku: vedľa buildu otvorí odkaz Manage tie isté otázky a cez Choose File môžeš priložiť už schválenú dokumentáciu. Po uložení prejde build do stavu Ready to Submit, alebo rovno do Testing, ak ide internej skupine. Ready to Test príde až po beta revízii pre externých testerov.

**Odkaz Manage sa nedá kliknúť?** Najprv si skontroluj svoju rolu v tíme: Apple vyhradzuje odpoveď rolám Account Holder, Admin a App Manager, účet Developer alebo Marketing odpovedať nemôže. Inú príčinu Apple nedokumentuje. Ak si build práve poslal, počkaj na e-mail o dokončení spracovania, ktorý podrobne opisuje návod o [čísle buildu a verzii](https://devoria.fr/sk/blog/app-store-connect-build-number-verzia-cislo-buildu), a potom stránku obnov.

## Už nikdy neodpovedať: kľúč v projekte

Apple to hovorí na stránke o beta buildoch: v Info.plist môžeš uviesť, že tvoja appka šifrovanie nepoužíva alebo je oň oslobodená, a už nemusíš odpovedať pri každom odoslaní. Kľúč sa volá [ITSAppUsesNonExemptEncryption](https://developer.apple.com/documentation/bundleresources/information-property-list/itsappusesnonexemptencryption). Xcode ho zobrazuje pod názvom App Uses Non-Exempt Encryption.

| Tvoj nástroj       | Súbor        | Kde                            | Hodnota |
| ------------------ | ------------ | ------------------------------ | ------- |
| Expo (EAS Build)   | `app.json`   | `expo.ios.config`              | false   |
| Expo, iná 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 sa kľúč volá `usesNonExemptEncryption` a [referencia konfigurácie](https://docs.expo.dev/versions/latest/config/app/) upresňuje, že zapíše kľúč Apple do Info.plist buildu a že `ios.config` slúži iba pre build: v produkčnom manifeste sa neobjaví.

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

V Expo prijíma `ios.infoPlist` kľúč aj pod jeho názvom od Apple, s rovnakou hodnotou: to je ten druhý riadok v app.json appky Solys. V natívnom projekte sa rovnaké vyhlásenie zmestí do jedného riadku v Info.plist: kľúč App Uses Non-Exempt Encryption, čo je názov, ktorý zobrazuje Xcode, s hodnotou NO. Hodnota je boolean, nie reťazec.

**Kľúč začne platiť od ďalšieho buildu.** Už odoslaný build zostane v Missing Compliance, kým neodpovieš v App Store Connect: tieto dve akcie sa nenahrádzajú, dopĺňajú sa.

## false alebo true: ako sa rozhodnúť

Apple definuje hodnotu NO takto: tvoja appka, vrátane knižníc tretích strán, nepoužíva žiadne šifrovanie, alebo iba šifrovanie oslobodené od povinnosti dokumentácie. Inak je to YES.

Čo je podľa stránky o pravidlách exportu zvyčajne oslobodené: šifrovanie zabudované v systéme, napríklad HTTPS pripojenia cez URLSession. Čo oslobodené nie je: vlastné šifrovanie, ktoré si napísal alebo pribalil. [Prehľad exportnej zhody](https://developer.apple.com/help/app-store-connect/manage-app-information/overview-of-export-compliance/) pridáva dôležitú pripomienku: za výklad zodpovedáš ty, aj za jeho následky, ak si oslobodenie nárokuješ neoprávnene.

Pre Expo appku, ktorá volá API cez HTTPS, ukladá nastavenia a predáva predplatné, je `false` bežná odpoveď. Pre appku, ktorá sama šifruje správy, súbory alebo trezor, je odpoveď `true` a Apple očakáva dokumentáciu.

> Nedávaj `false` automaticky. Prejdi si závislosti: knižnica na end-to-end šifrovanie alebo vlastné šifrované úložisko ťa posunie na stranu dokumentácie.

## Ak tvoja appka používa neoslobodené šifrovanie

[Stránka o dokumentácii šifrovania](https://developer.apple.com/help/app-store-connect/manage-app-information/determine-and-upload-app-encryption-documentation/) opisuje postup. V App Information vedľa App Encryption Documentation otvorí tlačidlo na pridanie otázky, potom cez Choose File nahráš dokument a dáš Save. Apple žiada, aby si mal predtým vyplnený popis appky a nastavenú jej dostupnosť, aby mohol posúdiť, či dokumentácia stačí. Pri kompletných podkladoch počíta zhruba s dvoma pracovnými dňami.

Po schválení dokumentácie ti Apple dá hodnotu, ktorú vložíš do kľúča `ITSEncryptionExportComplianceCode` v Info.plist. S ňou už otázky pri každom odoslaní nebudú. Počas posudzovania má tvoj build stav Waiting for Export Compliance Review alebo In Compliance Review: od teba sa nečaká žiadna akcia.

Dve veci, na ktoré Apple upozorňuje, jednu na stránke o pravidlách exportu a druhú v prehľade exportnej zhody:

- **Aj pri oslobodenom šifrovaní môže byť vyžadovaná výročná správa o samoklasifikácii pre americkú vládu.** Vyžadovaná nie je, ak používaš neoslobodené šifrovanie a dokumentáciu si Apple poskytol.
- **Francúzsko tiež kontroluje import a export šifrovacích apps.** Prehľad od Apple uvádza ako dotknuté oblasti bezpečné úložisko, bezpečnú komunikáciu a antivírusy, s výnimkami pre bankové a zdravotnícke appky, a odkazuje na ANSSI.

## Čo sa deje ďalej v TestFlighte

Odblokovaný build pokračuje bežným životom TestFlight buildu, ktorý opisuje návod [TestFlight na testovanie iPhone appky](https://devoria.fr/sk/blog/testflight-otestovat-iphone-aplikaciu): interní testeri hneď, externí testeri po beta revízii a expirácia po 90 dňoch, podľa zoznamu stavov buildov. Ďalšie možné zastavenia pri odosielaní z Expo, napríklad už použité číslo buildu alebo odmietnutý súbor, nájdeš v [chybách pri odosielaní z EAS do App Store Connect](https://devoria.fr/sk/blog/eas-submit-ios-caste-chyby-oprava) a celý postup v návode [ako publikovať Expo appku na App Store cez EAS](https://devoria.fr/sk/blog/eas-submit-ios-publikovat-expo-appku-app-store).

[iOS & Android Kit](https://devoria.fr/sk/kits/ios) obsahuje môj štartovací Expo kód s týmto kľúčom už nastaveným a postup od prvého buildu až po stránku na App Store. Ak chceš vedieť, čo ti ešte blokuje publikovanie, [bezplatná diagnostika](https://devoria.fr/sk/diagnostic) ti odpovie po pár otázkach a pošle ti môj checklist proti zamietnutiu od Apple. Kompletné kroky nájdeš v článku [ako publikovať aplikáciu na App Store](https://devoria.fr/sk/expertise/zverejnit-aplikaciu-v-app-store).

## Často kladené otázky

### Čo znamená Missing Compliance v TestFlighte?

Build čaká na tvoje vyhlásenie o exportnej zhode, teda na tvoju odpoveď o používaní šifrovania. Apple ho zaraďuje medzi stavy, ktoré vyžadujú akciu z tvojej strany. Kým neodpovieš, build sa k testerom nedostane.

### Prečo sa odkaz Manage pri Missing Compliance nedá kliknúť?

Skontroluj si rolu: Apple vyhradzuje odpoveď rolám Account Holder, Admin a App Manager. Inú príčinu Apple nedokumentuje. Ak build práve dorazil, obnov stránku po e-maile o dokončení spracovania.

### Moja appka používa iba HTTPS, mám pri šifrovaní odpovedať áno?

Apple uvádza, že šifrovanie zabudované v systéme, napríklad HTTPS pripojenia cez URLSession, je zvyčajne oslobodené od povinnosti dokumentácie. V tom prípade má kľúč ITSAppUsesNonExemptEncryption hodnotu NO, pokiaľ žiadna knižnica tretej strany nepridáva vlastné šifrovanie.

### Treba odpovedať na otázky o šifrovaní pri každom builde?

Áno, pokiaľ tvoj Info.plist neobsahuje kľúč ITSAppUsesNonExemptEncryption. S ním už App Store Connect otázky nekladie. V Expo ho nastavíš v app.json cez `ios.config.usesNonExemptEncryption`.

### Kde v app.json v Expo deklarovať šifrovanie?

V app.json pod `expo.ios.config`, s `"usesNonExemptEncryption": false`, ak tvoja appka nepoužíva žiadne neoslobodené šifrovanie. EAS Build zapíše kľúč do Info.plist buildu. Platí od ďalšieho buildu, nie pre ten už odoslaný.

### Blokuje Missing Compliance aj odoslanie na App Store?

Otázky o exportnej zhode sa kladú pri každej novej verzii, beta aj App Store. Build, ktorý na ne neodpovedal, sa nedá distribuovať. Kľúč v Info.plist vyrieši oba prípady naraz.

### Musím robiť výročnú správu o samoklasifikácii?

Apple upozorňuje, že používanie oslobodeného šifrovania môže aj tak vyžadovať výročnú správu o samoklasifikácii pre americkú vládu, a odkazuje na oficiálny postup. Ak tvoja appka používa neoslobodené šifrovanie a dokumentáciu si Apple poskytol, táto správa nie je potrebná.


## Tvoj projekt

[Review Kit](https://devoria.fr/sk/kits/app-review): Môj checklist na App Store review, moje opravené zamietnutia od Apple, checklist pre Google Play a tri skilly pre Claude Code. 49 €.

[iOS & Android Kit](https://devoria.fr/sk/kits/ios): Vytvor si appku pre iPhone a Android s Claude Code: štartovací kód mojich appiek, cesta až do obchodov a všetky kity. 99 €.

[Diagnostika: čo ťa delí od tvojej iPhone appky](https://devoria.fr/sk/diagnostic): 7 otázok, 60 sekúnd: zistíš, čo ti naozaj bráni zverejniť tvoju iPhone appku, dostaneš cestu v 4 krokoch a kit, ktorý ti sedí.
