# Missing Compliance у TestFlight: як виправити назавжди

> Missing Compliance означає, що Apple чекає твою декларацію про шифрування. Розблокуй білд в App Store Connect і додай ключ, щоб статус більше не з'являвся.

Оригінальна сторінка: [Missing Compliance у TestFlight: як виправити назавжди](https://devoria.fr/uk/blog/missing-compliance-testflight-fix)
Автор: [Mehdi Azizi](https://devoria.fr/uk/mehdi-azizi)
Опубліковано: 2026-11-06
Останнє оновлення змісту: 2026-11-06


**Missing Compliance не є помилкою: це білд, який чекає твоєї відповіді щодо шифрування.** Поки ти не відповіси, білд залишається заблокованим для твоїх тестувальників. Для цього білда ти відповідаєш на запитання у вкладці TestFlight в App Store Connect. Для наступних додаєш ключ ITSAppUsesNonExemptEncryption у свій Info.plist або `ios.config.usesNonExemptEncryption` у свій app.json з Expo, і статус більше не повертається.

Мої iOS-застосунки зроблені на Expo. В app.json Solys ключ має значення `false` і прописаний двічі: в `ios.config` та в `ios.infoPlist`. Цей гайд спирається на сторінки Apple про [статуси білдів](https://developer.apple.com/help/app-store-connect/reference/app-uploads/app-build-statuses/) і про [експортну відповідність бета-білдів](https://developer.apple.com/help/app-store-connect/test-a-beta-version/provide-export-compliance-information-for-beta-builds/), перечитані 6 листопада 2026 року.

## Що означає Missing Compliance

У списку статусів білдів Apple визначає його одним реченням: бракує документації про експортну відповідність, і від тебе очікується дія. Apple показує його жовтим, це колір процесу, що триває і залежить від тебе або від Apple, а в описі уточнює, що від тебе очікується дія.

Чому Apple взагалі про це питає? Це пояснює [сторінка про правила експорту шифрування](https://developer.apple.com/documentation/security/complying-with-encryption-export-regulations): коли ти надсилаєш білд у TestFlight або App Store, ти надсилаєш його на сервер у США. Якщо твій застосунок поширюється за межами США та Канади, на нього поширюється американське експортне право, незалежно від країни твоєї компанії. А щойно застосунок використовує, містить або вбудовує шифрування, Apple вважає це експортом програмного забезпечення для шифрування.

**Результат: з кожною новою версією App Store Connect ставить тобі запитання про відповідність, якщо твій Info.plist уже на них не відповідає.** Саме тому перший білд Expo майже завжди приходить зі статусом Missing Compliance.

## Як розблокувати білд, що чекає

Кроки взято зі сторінки Apple про експортну відповідність бета-білдів. Тобі потрібна роль Account Holder, Admin або App Manager.

1. В Apps відкрий свій застосунок, потім вкладку TestFlight.
2. На бічній панелі в розділі Builds вибери платформу.
3. У колонці Build натисни на іконку або номер потрібного білда.
4. Натисни Provide Export Compliance Information і дай відповіді на запитання.
5. Якщо Apple просить документацію, натисни Go to App Encryption Page, щоб її надіслати. Інакше натисни Save.

Apple описує і швидший шлях: поруч із білдом посилання Manage відкриває ті самі запитання, а Choose File дає змогу прикріпити вже схвалену документацію. Після збереження білд переходить у Ready to Submit або одразу в Testing, якщо він іде внутрішній групі. Ready to Test з'являється лише після бета-рев'ю для зовнішніх тестувальників.

**Посилання Manage не клікається?** Спершу перевір свою роль у команді: Apple дозволяє відповідати лише ролям Account Holder, Admin і App Manager, акаунт Developer або Marketing відповісти не може. Інших причин Apple не документує. Якщо білд щойно надіслано, дочекайся листа про завершення обробки (детально про це в гайді про [номер білда і версію](https://devoria.fr/uk/blog/app-store-connect-build-number-version)) і онови сторінку.

## Більше ніколи не відповідати: ключ у проєкті

Apple пише на сторінці про бета-білди: ти можеш вказати в Info.plist, що твій застосунок не використовує шифрування або звільнений від вимог, і тоді не доведеться відповідати під час кожного надсилання. Ключ називається [ITSAppUsesNonExemptEncryption](https://developer.apple.com/documentation/bundleresources/information-property-list/itsappusesnonexemptencryption). Xcode показує його під назвою App Uses Non-Exempt Encryption.

| Твій інструмент     | Файл         | Де                             | Значення |
| ------------------- | ------------ | ------------------------------ | -------- |
| Expo (EAS Build)    | `app.json`   | `expo.ios.config`              | false    |
| Expo, інший шлях    | `app.json`   | `expo.ios.infoPlist`           | false    |
| Чистий React Native | `Info.plist` | App Uses Non-Exempt Encryption | NO       |
| Xcode, Swift        | `Info.plist` | App Uses Non-Exempt Encryption | NO       |

В Expo ключ називається `usesNonExemptEncryption`, а [довідник конфігурації](https://docs.expo.dev/versions/latest/config/app/) уточнює, що він записує ключ Apple в Info.plist білда, і що `ios.config` використовується лише під час збірки: у продакшн-маніфесті його немає.

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

В Expo `ios.infoPlist` також приймає ключ під його назвою Apple з тим самим значенням: це другий рядок в app.json Solys. У нативному проєкті та сама декларація займає один рядок в Info.plist: ключ App Uses Non-Exempt Encryption (так його показує Xcode) зі значенням NO. Значення є булевим, а не рядком.

**Ключ починає діяти з наступного білда.** Уже надісланий білд залишається в Missing Compliance, доки ти не відповіси в App Store Connect: ці дві дії не замінюють одна одну, вони доповнюють одна одну.

## false чи true: як вирішити

Apple визначає значення NO так: твій застосунок, разом зі сторонніми бібліотеками, не використовує жодного шифрування або використовує лише шифрування, звільнене від вимог щодо документації. Інакше це YES.

Що зазвичай звільнено, згідно зі сторінкою про правила експорту: вбудоване в систему шифрування, наприклад HTTPS-з'єднання через URLSession. Що не звільнено: власне шифрування, яке ти написав або вбудував. [Огляд експортної відповідності](https://developer.apple.com/help/app-store-connect/manage-app-information/overview-of-export-compliance/) додає важливе нагадування: за тлумачення відповідаєш ти, як і за наслідки, якщо безпідставно заявиш про звільнення.

Для застосунку на Expo, який звертається до API через HTTPS, зберігає налаштування і продає підписку, `false` є звичною відповіддю. Для застосунку, який сам шифрує повідомлення, файли чи сховище, відповідь `true`, і Apple чекає документацію.

> Не став `false` за звичкою. Перевір свої залежності: бібліотека наскрізного шифрування або власне зашифроване сховище переводить тебе на бік документації.

## Якщо твій застосунок використовує незвільнене шифрування

[Сторінка про документацію щодо шифрування](https://developer.apple.com/help/app-store-connect/manage-app-information/determine-and-upload-app-encryption-documentation/) описує процес. В App Information, поруч з App Encryption Documentation, кнопка додавання відкриває запитання, потім Choose File для документа, потім Save. Apple просить заздалегідь заповнити опис застосунку і налаштувати його доступність, щоб оцінити, чи достатньо документації. Орієнтовний строк близько двох робочих днів, якщо пакет повний.

Після схвалення документації Apple надає значення, яке треба вписати в ключ `ITSEncryptionExportComplianceCode` твого Info.plist. З ним більше жодних запитань під час кожного надсилання. Під час перевірки білд показує Waiting for Export Compliance Review або In Compliance Review: від тебе жодних дій не очікується.

Два моменти, на які вказує Apple, один на сторінці про правила експорту, інший в огляді відповідності:

- **Навіть зі звільненим шифруванням може знадобитися щорічний звіт про самокласифікацію для уряду США.** Він не потрібен, якщо ти використовуєш незвільнене шифрування і надав документацію Apple.
- **Франція також контролює імпорт і експорт застосунків із шифруванням.** Огляд Apple називає серед відповідних сфер захищене зберігання, захищені комунікації та антивіруси, із винятками для банківських і медичних застосунків, і відсилає до ANSSI.

## Що далі відбувається в TestFlight

Розблокований білд живе звичайним життям білда TestFlight, описаним у гайді [TestFlight для тестування застосунку на iPhone](https://devoria.fr/uk/blog/testflight-testuvannya-zastosunku-iphone): внутрішні тестувальники одразу, зовнішні після бета-рев'ю, а через 90 днів білд спливає, згідно зі списком статусів білдів. Інші можливі зупинки під час надсилання з Expo, як-от уже використаний номер білда чи відхилений файл, описані в [помилках надсилання EAS в App Store Connect](https://devoria.fr/uk/blog/eas-submit-ios-errors-fix), а весь ланцюжок у статті [як опублікувати застосунок Expo в App Store з EAS](https://devoria.fr/uk/blog/eas-submit-ios-publish-expo-app-store).

[iOS & Android Kit](https://devoria.fr/uk/kits/ios) містить мій стартовий код на Expo з уже прописаним ключем і шлях від першого білда до сторінки в App Store. Якщо хочеш дізнатися, що ще блокує твою публікацію, [безкоштовна діагностика](https://devoria.fr/uk/diagnostic) відповість за кілька запитань і надішле тобі мій чекліст проти відмов Apple. Повні кроки описано в розділі [як опублікувати застосунок в App Store](https://devoria.fr/uk/expertise/publish-an-app-on-the-app-store).

## Поширені запитання

### Що означає Missing Compliance у TestFlight?

Білд чекає твоєї декларації про експортну відповідність, тобто відповіді щодо використання шифрування. Apple відносить його до статусів, які вимагають дії з твого боку. Білд не потрапить до тестувальників, доки ти не відповіси.

### Чому посилання Manage у Missing Compliance не клікається?

Перевір свою роль: Apple дозволяє відповідати лише ролям Account Holder, Admin і App Manager. Інших причин Apple не документує. Якщо білд щойно надійшов, онови сторінку після листа про завершення обробки.

### Мій застосунок використовує лише HTTPS, чи треба відповідати «так» щодо шифрування?

Apple зазначає, що вбудоване в систему шифрування, наприклад HTTPS-з'єднання через URLSession, зазвичай звільнене від вимог щодо документації. У такому разі ключ ITSAppUsesNonExemptEncryption має значення NO, за умови, що жодна стороння бібліотека не додає власного шифрування.

### Чи треба відповідати на запитання про шифрування для кожного білда?

Так, доки твій Info.plist не містить ключа ITSAppUsesNonExemptEncryption. З ним App Store Connect більше не ставить запитань. В Expo він налаштовується в app.json через `ios.config.usesNonExemptEncryption`.

### Де вказати шифрування в app.json з Expo?

В app.json, у `expo.ios.config`, зі значенням `"usesNonExemptEncryption": false`, якщо твій застосунок не використовує незвільненого шифрування. EAS Build записує ключ в Info.plist білда. Він діє з наступного білда, а не для вже надісланого.

### Чи блокує Missing Compliance також подання в App Store?

Запитання про експортну відповідність ставляться для кожної нової версії, як бета, так і для App Store. Білд без відповіді не можна поширювати. Ключ в Info.plist вирішує обидва випадки одразу.

### Чи треба мені подавати щорічний звіт про самокласифікацію?

Apple зазначає, що використання звільненого шифрування все одно може вимагати щорічного звіту про самокласифікацію для уряду США, і відсилає до офіційної процедури. Якщо твій застосунок використовує незвільнене шифрування і ти надав документацію Apple, цей звіт не потрібен.


## Твій проєкт

[Review Kit](https://devoria.fr/uk/kits/app-review): Мій чекліст для перевірки в App Store, виправлені відмови Apple, чекліст для Google Play і три скіли для Claude Code. 2 499 ₴.

[iOS & Android Kit](https://devoria.fr/uk/kits/ios): Створи свій застосунок для iPhone і Android з Claude Code: стартовий код моїх застосунків, шлях до публікації в сторах і всі кіти. 4 999 ₴.

[Діагностика: що відділяє тебе від твого застосунку для iPhone](https://devoria.fr/uk/diagnostic): 7 запитань, 60 секунд: ти дізнаєшся, що насправді заважає тобі опублікувати застосунок для iPhone, отримаєш свій шлях у 4 кроки і кіт, який тобі підходить.
