# Missing Compliance в TestFlight: как исправить навсегда

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

Оригинальная страница: [Missing Compliance в TestFlight: как исправить навсегда](https://devoria.fr/ru/blog/missing-compliance-testflight-fix)
Автор: [Mehdi Azizi](https://devoria.fr/ru/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/ru/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: около двух рабочих дней, если пакет полный.

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

Два момента, которые отмечает Apple, один на странице о правилах экспорта, другой в обзоре соответствия:

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

## Что дальше происходит в TestFlight

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

В [iOS & Android Kit](https://devoria.fr/ru/kits/ios) есть мой стартовый код на Expo с уже прописанным ключом и путь от первого билда до страницы в App Store. Если хочешь понять, что ещё блокирует твою публикацию, [бесплатная диагностика](https://devoria.fr/ru/diagnostic) ответит за несколько вопросов и пришлёт мой чек-лист против отказов Apple. Все шаги подробно в гайде [как опубликовать приложение в App Store](https://devoria.fr/ru/expertise/publish-app-on-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/ru/kits/app-review): Мой чек-лист для ревью в App Store, исправленные отказы Apple, чек-лист для Google Play и три скилла для Claude Code. 55 $.

[iOS & Android Kit](https://devoria.fr/ru/kits/ios): Создай своё приложение для iPhone и Android с Claude Code: стартовый код моих приложений, путь до публикации в сторах и все киты. 109 $.

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