Перейти к содержимому

Как заполнить App Encryption Information в Info.plist

App Store Connect спрашивает о шифровании, когда вы загружаете билд в TestFlight или отправляете версию на App Review. Если ответ не меняется от билда к билду, укажите декларацию о шифровании прямо в Info.plist. Так один и тот же опросник export compliance не будет появляться при каждой загрузке.

Ключ, который обычно нужен, - ITSAppUsesNonExemptEncryption. Его легко прочитать неправильно: он спрашивает не о том, использует ли приложение шифрование вообще. Он спрашивает, использует ли приложение шифрование, не подпадающее под исключение.

Для большинства приложений решение выглядит так:

  • Укажите ITSAppUsesNonExemptEncryption как NO / false, если приложение не использует шифрование или использует только шифрование, освобожденное от подачи документов export compliance.
  • Укажите ITSAppUsesNonExemptEncryption как YES / true, если приложение использует non-exempt encryption.
  • Добавляйте ITSEncryptionExportComplianceCode только после того, как Apple одобрит документы export compliance и выдаст код.
  • Если не добавить ITSAppUsesNonExemptEncryption, App Store Connect может задавать вопросы о шифровании при каждой загрузке нового билда.

Частые случаи, которые обычно подходят под false: приложение использует только HTTPS через сетевые API Apple, Keychain, CryptoKit, Security framework, CloudKit, StoreKit, Sign in with Apple или другое шифрование, ограниченное операционной системой Apple. Проверьте это отдельно, если в приложении есть сторонний SDK, который реализует собственную криптографию.

Откройте target приложения в Xcode:

  1. Выберите проект в навигаторе.
  2. Выберите target приложения.
  3. Откройте вкладку Info.
  4. Добавьте новое custom property с именем App Uses Non-Exempt Encryption.
  5. Укажите тип Boolean.
  6. Укажите значение NO или YES.

Xcode запишет это как raw-ключ Info.plist - ITSAppUsesNonExemptEncryption.

Для этого Boolean-ключа NO означает false, а YES означает true.

Если приложение не использует non-exempt encryption, укажите NO в Xcode. Raw-запись в plist должна быть такой:

<key>ITSAppUsesNonExemptEncryption</key>
<false/>

Если приложение использует non-exempt encryption, укажите YES в Xcode. Raw-запись в plist должна быть такой:

<key>ITSAppUsesNonExemptEncryption</key>
<true/>

Проверьте, что значение имеет тип Boolean, а не строку "NO", "YES", "FALSE" или "TRUE".

Когда использовать NO / false

Section titled “Когда использовать NO / false”

Используйте NO в Xcode или false в raw plist, если приложение не использует шифрование или использует только шифрование, которое Apple считает освобожденным от подачи export compliance documentation.

Типичные случаи:

  • приложение подключается к вашему backend по HTTPS;
  • шифрование ограничено API, предоставленными iOS, iPadOS, macOS, watchOS, tvOS или visionOS;
  • приложение хранит учетные данные в Keychain;
  • приложение использует Apple frameworks для авторизации, покупок, iCloud, CloudKit или push-уведомлений;
  • сторонние SDK не добавляют собственное non-exempt encryption.

Это самый частый вариант для обычного consumer-приложения, которое обращается к API по TLS и не реализует собственный security layer.

Когда использовать YES / true

Section titled “Когда использовать YES / true”

Используйте YES в Xcode или true в raw plist, если приложение использует non-exempt encryption. Это может относиться к случаям, когда приложение содержит или подключает шифрование, не ограниченное операционной системой Apple, использует proprietary/unpublished cryptography или требует export compliance documentation по результатам опросника App Store Connect.

Примеры, которые требуют дополнительной проверки:

  • VPN, защищенный мессенджер, password manager, зашифрованное хранилище, security- или antivirus-приложение;
  • proprietary или non-standard encryption algorithms;
  • встроенные crypto-библиотеки, например OpenSSL, libsodium или собственный cryptography module;
  • industry-standard algorithms, реализованные вне операционной системы Apple;
  • функции, где шифрование является основной возможностью продукта.

Если App Store Connect сообщает, что документы нужны, загрузите требуемые документы до отправки билда на TestFlight review или App Review.

Если документы требуются, App Store Connect может выдать код после одобрения export compliance documentation. Укажите это значение в ITSEncryptionExportComplianceCode.

<key>ITSAppUsesNonExemptEncryption</key>
<true/>
<key>ITSEncryptionExportComplianceCode</key>
<string>YOUR_APPROVED_CODE</string>

Не придумывайте это значение самостоятельно. Это должен быть код, который Apple выдала после проверки ваших документов.

Если статус шифрования приложения неочевиден, сначала ответьте на вопросы Apple:

  1. Откройте App Store Connect.
  2. Выберите приложение.
  3. Откройте App Information.
  4. Найдите App Encryption Documentation.
  5. Нажмите кнопку добавления и ответьте на вопросы.

Также можно нажать Manage рядом с билдом, у которого не заполнена информация о шифровании, на экране TestFlight или Distribution.

Когда App Store Connect подтвердит, что документы не нужны, укажите ITSAppUsesNonExemptEncryption как NO / false. Если документы нужны, загрузите их, дождитесь проверки Apple, при необходимости привяжите одобренные документы к билду, затем добавьте compliance code в Info.plist.

Проверить собранное приложение

Section titled “Проверить собранное приложение”

Значение должно попасть в plist, который реально находится внутри загруженного приложения. Если App Store Connect все еще задает те же вопросы о шифровании, проверьте:

  • ключ добавлен не в тот target;
  • Release-конфигурация использует другой Info.plist;
  • build script генерирует или перезаписывает plist во время archive;
  • ключ добавлен как string, а не Boolean;
  • билд был загружен до изменения plist;
  • ITSAppUsesNonExemptEncryption имеет значение YES / true, но обязательные документы еще не одобрены или не привязаны.

Для React Native, Flutter, Unity и других cross-platform проектов редактируйте финальный Info.plist iOS target, а не только framework-level config.

Пример для обычного HTTPS-приложения

Section titled “Пример для обычного HTTPS-приложения”

Многие приложения только обращаются к backend по HTTPS и используют Apple frameworks для локального хранения, покупок, уведомлений и авторизации. В таком случае обычно нужна такая запись:

<key>ITSAppUsesNonExemptEncryption</key>
<false/>

После загрузки нового билда с этим ключом App Store Connect должен перестать просить заполнить export compliance questionnaire при каждой отправке, пока поведение приложения в части шифрования не меняется.