Что делать, если отсутствует манифест конфиденциальности iOS? Проверка архива 2026

Руководство для разработчиков, которым нужно понять причину уведомления о манифесте конфиденциальности iOS и определить, какой компонент исправлять. Вы разберёте разницу между отсутствующим и неверным файлом, проверите сторонний SDK и подтвердите наличие манифеста в итоговом Archive.

Что делать, если отсутствует манифест конфиденциальности iOS? Проверка архива 2026

Содержание

В App Store Connect появилось уведомление о PrivacyInfo.xcprivacy, и вы не понимаете, виновато приложение или сторонняя библиотека?

Сначала сопоставьте код ошибки и путь из уведомления с содержимым собранного пакета: определите, отсутствует файл, неверно оформлен или не предоставлен SDK. Не переносите сведения о сторонней библиотеке в манифест приложения; после исправления проверьте конечный Archive и заново проверьте загружаемый результат.

Эта инструкция предназначена разработчикам, получившим ITMS-91061 или похожее уведомление о манифесте конфиденциальности.
Она поможет командам с CocoaPods, Swift Package и XCFramework проследить, какая зависимость попала в сборку.
Если вы отвечаете за удалённую сборочную среду или CI, используйте проверку Archive как отдельный этап выпуска.

Что именно сообщает уведомление о манифесте конфиденциальности iOS

Сообщение App Store Connect — это диагностическая зацепка, а не универсальное указание «добавить файл в проект». Сначала прочитайте его целиком: важны код, формулировка проблемы и путь к компоненту. По ним вы определяете, затронуто ли приложение, встроенный SDK или структура самого манифеста.

Apple описывает требования к определённым сторонним SDK и уведомления, связанные с отсутствующим манифестом, на странице требований к сторонним SDK. Если в сообщении есть ITMS-91061, не ограничивайтесь поиском файла с таким именем в исходниках: проверяйте именно пакет, на который указывает путь. Уведомление может относиться к библиотеке, встроенной в приложение, хотя файл манифеста самого приложения уже существует.

Также отделяйте проверку загрузки от результата рассмотрения приложения. Apple описывает состояния обработки загруженной сборки отдельно от статусов приложения и отправки на рассмотрение. Поэтому успешная проверка загружаемого результата сама по себе не означает, что приложение одобрено App Review.

Признак Что проверять Следующий шаг Риск неверного исправления
В пакете нет PrivacyInfo.xcprivacy Само приложение и указанный компонент SDK Установить, кому принадлежит пакет, и добавить либо обновить нужный манифест Добавить файл только в проект, но не включить его в сборку
Файл найден, но проверка сообщает об ошибке Формат plist, типы значений, обязательные поля и допустимые значения Сверить структуру с техническими материалами Apple Подставить значения наугад и получить новый дефект
Уведомление указывает на SDK или framework Путь, источник и фактически встроенную версию зависимости Обновить SDK или получить исправление у поставщика Описать поведение чужой библиотеки в манифесте приложения
В исходниках всё исправлено, но уведомление повторяется Содержимое текущего Archive и разрешённые версии зависимостей Исправить входные данные сборки и создать новый Archive Отправить старый архив, полагаясь на состояние редактора проекта

Эта таблица разделяет четыре типовые ситуации, но решает их не по названию ошибки в отдельности: окончательный вывод зависит от пути компонента и содержимого собранного пакета. Apple отдельно публикует состояния обработки загруженных сборок; сверяйте их с фактическим сообщением, а не с тем, чего вы ожидаете от статуса.

Первый этап: установите, кому принадлежит файл

Название PrivacyInfo.xcprivacy само по себе не говорит, кто обязан предоставить конкретный экземпляр файла. В приложении может быть собственный манифест, а у встроенной зависимости — отдельный. Документация Apple описывает, как добавлять манифест к приложению или стороннему SDK, и где он должен находиться внутри соответствующего пакета (инструкция по добавлению манифеста).

Путь из уведомления используйте как направление поиска, а не как формальность. Сопоставьте его с собранной структурой: относится ли указанное имя к framework, пакету зависимости или к основному приложению. При необходимости проследите цепочку от встроенного компонента до менеджера зависимостей, но сверяйте версии с тем, что попало в Archive, а не только с декларацией в Podfile или Package.resolved.

Особенно часто ошибку диагностики вызывает подмена ответственности: у приложения есть файл, поэтому разработчик считает, что требование выполнено. Но если сообщение указывает на библиотеку, манифест приложения не заменяет файл внутри пакета этой библиотеки. И обратная ситуация тоже возможна: у SDK есть корректный файл, но манифест приложения не добавлен в нужный target.

Второй этап: проверьте, что собственный манифест включён в сборку

В Xcode различайте три состояния: файл лежит в каталоге исходников; файл включён в нужный target; файл действительно находится в конечном пакете приложения. Первые два ещё не подтверждают третье. Поэтому не делайте вывод по одному лишь отображению файла в Project Navigator.

Сверьте назначение файла с target приложения и настройками включения ресурсов. Затем проверьте собранный продукт: манифест приложения должен находиться в пакете самого приложения, а файл SDK — в пакете соответствующего компонента. Точную ожидаемую структуру для приложения и SDK сверяйте с описанием файлов манифеста Apple. Если каталог проекта содержит несколько targets, убедитесь, что вы проверяете тот, из которого создан отправленный Archive.

Не копируйте манифест вручную в несколько мест только ради исчезновения сообщения. Дублирование файлов без понимания их владельца усложняет сборку и может оставить неверный манифест в одном из пакетов. Сначала установите, какой именно bundle проверяется, затем исправляйте соответствующий target или зависимость.

Третий этап: проследите путь стороннего SDK

Когда сообщение указывает на SDK, найдите этот компонент в конечном продукте. Это может быть встроенный framework, XCFramework или библиотека, пришедшая через CocoaPods либо Swift Package. Запишите имя компонента, его фактическую версию и источник, после чего сравните эти сведения с декларациями зависимостей в репозитории. Зафиксированная версия в конфигурации не доказывает, что именно она вошла в проблемный архив.

Проверьте, есть ли в пакете SDK собственный PrivacyInfo.xcprivacy. Если уведомление относится к конкретному SDK, а файл действительно отсутствует, запросите у поставщика версию с корректным манифестом или обновите зависимость до поддерживаемого исправленного выпуска.

Не подменяйте этот шаг заполнением манифеста приложения данными SDK. В собственный файл следует вносить сведения, относящиеся к вашему приложению, а не угадывать причины использования API или практики обработки данных сторонней библиотекой. Для API, требующих обоснования, используйте документацию Apple о Required Reason API, а не предположения по названию метода или описанию пакета.

Четвёртый этап: отличите ошибку структуры от отсутствующего файла

Если файл существует в нужном пакете, переходите к проверке содержимого. Apple разбирает типовые причины неверного манифеста в техническом материале TN3181: диагностика недействительного манифеста конфиденциальности. Сверяйте с ним структуру plist, тип каждого значения, наличие требуемых полей и соответствие значений допустимым вариантам.

Синтаксическая проверка — только начальный фильтр. В среде macOS можно выполнить:

plutil -lint путь/к/PrivacyInfo.xcprivacy

Если команда обнаружила ошибку формата, сначала исправьте её, затем повторите проверку. Если синтаксис корректен, это ещё не доказывает соответствие правилам Apple: отдельные проблемы связаны со значением или смыслом поля. Просмотрите содержимое командой:

plutil -p путь/к/PrivacyInfo.xcprivacy

Сопоставляйте поля с описанием формата манифеста Apple и материалом TN3181. Для данных о Required Reason API сверяйтесь с официальной документацией Apple. Не добавляйте трекинговые домены, причины использования API или сведения о сборе данных «для надёжности»: неподтверждённое значение не исправляет ошибку и способно неверно описать приложение.

Пятый этап: подтвердите исправление в конечном Archive

После исправления исходников создайте новый Archive и осмотрите именно его. Для архива Xcode сначала найдите приложение внутри каталога Products/Applications, затем проверьте файл манифеста в корне его пакета и отдельно изучите встроенные framework. Например, поиск файлов можно выполнить так:

find "/путь/к/Приложение.xcarchive/Products/Applications" \
  -name PrivacyInfo.xcprivacy -print

Сам факт, что команда нашла файл, не подтверждает его владельца или корректность. Сопоставьте найденные пути с уведомлением: присутствует ли манифест в указанном приложении или SDK, соответствует ли он нужному компоненту и нет ли в архиве старой копии зависимости. Затем выполните синтаксическую проверку каждого релевантного файла и сравните результат с требованиями Apple.

Если в Archive осталась старая версия SDK, проверьте разрешение зависимостей и входные данные сборки. Одного изменения файла в исходниках недостаточно, если повторная сборка использует ранее разрешённый пакет, кешированный продукт или другой target. После изменения зависимости создайте новый Archive; не отправляйте на проверку прежний файл, даже если проект в редакторе уже выглядит исправленным.

Для воспроизводимой проверки сохраните путь к Archive, версию зависимости и вывод команд. Это облегчает разбор повторного уведомления: вы сможете установить, менялся ли сам манифест, пакет SDK или только исходный проект. Проверяйте и конкретную сборку, которую собираетесь загрузить, а не соседний архив с похожим именем.

Как оценить качество исправления перед повторной отправкой

Используйте короткую оценку по четырём направлениям — это не гарантия одобрения, а способ обнаружить слабое место до отправки:

Если не выполнен первый пункт, начинать с редактирования plist рано. Если отсутствует последний, исходники ещё не доказывают, что отправляемый продукт исправлен. А если все пункты выполнены, но сообщение повторяется, сравните путь из нового уведомления с путями в новом Archive: возможно, изменился не тот компонент или в сборку попал другой вариант зависимости.

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

Частые вопросы

С чего начать при ITMS-91061?

Прочитайте уведомление целиком и установите, к какому компоненту относится указанный путь. Затем проверьте конечный пакет приложения и соответствующую зависимость. Если путь ведёт к SDK, выясните его фактическую версию и наличие собственного манифеста. Это поможет не спутать отсутствие файла у библиотеки с ошибкой манифеста приложения.

Как поступить, если у SDK нет PrivacyInfo.xcprivacy?

Подтвердите, что файла нет именно в пакете SDK, который попал в Archive, а не только в исходном репозитории. После этого запросите исправленную версию у поставщика или обновите зависимость. Добавление описания SDK в манифест приложения не создаёт файл внутри библиотеки и не подтверждает, что её данные и API описаны правильно.

Как убедиться, что файл находится в Archive?

Найдите PrivacyInfo.xcprivacy внутри каталога приложения в Archive, затем отдельно проверьте встроенные framework. Сверьте расположение с пакетом, указанным в уведомлении, и запустите проверку plist. Сохраните список путей и сведения о версиях зависимостей: так вы сможете подтвердить, что отправляете именно проверенный результат сборки.

Всегда ли ошибка манифеста означает, что файла нет?

Нет. Файл может присутствовать, но не пройти проверку из-за неверного формата, типа значения, отсутствующего поля или недопустимого содержимого. Сначала подтвердите его наличие в нужном bundle, а затем проверяйте структуру и значения по TN3181 и документации Apple. Исправление должно соответствовать конкретному сообщению, а не предположению о причине.

Для повторяемой сборки нужна доступная среда macOS

Если вы сейчас собираете проект на Windows или Linux, ограничение в том, что Xcode Archive нельзя воспроизвести в той же среде; локальный Mac, в свою очередь, может быть занят другой работой, не иметь свободного места или требовать отдельного обслуживания как постоянная машина сборки. Для проверки уведомления важен не только исходный проект, но и возможность снова разрешить зависимости, собрать приложение и осмотреть Archive в macOS.

Если вам нужно временно воспроизвести этот путь на реальном Mac, сравните текущий способ сборки с удалённой средой, прежде чем покупать отдельный компьютер. Каталог узлов Mac VPSMAC поможет оценить вариант удалённого доступа для тестовой сборки и повторной проверки архива. Если вам важно предварительно сравнить конкретную локацию, посмотрите также узел в Кремниевой долине. Это не отменяет проверки SDK и не обещает прохождения App Review: решение об устранении ошибки по-прежнему подтверждается содержимым конкретного Archive. Для регулярных выпусков сопоставьте аренду с покупкой собственного Mac и с имеющейся CI-средой; если сборки редкие и у вас уже есть подходящий Mac, отдельная аренда может быть не нужна.

Частые вопросы

С чего начать, если App Store Connect показывает ITMS-91061?

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

Что делать, если сторонний SDK поставляется без PrivacyInfo.xcprivacy?

Установите точное имя и версию SDK по пути из уведомления, затем проверьте требования Apple и документацию поставщика. Если манифеста действительно нет, запросите исправленный выпуск или обновите зависимость до версии с корректным файлом. Временная копия манифеста в приложении не исправляет отсутствие файла внутри SDK и может неверно описать его API или обработку данных.

Как проверить, что манифест попал именно в итоговый Archive?

Проверяйте не только проект Xcode, но и каталог собранного приложения внутри файла Archive. Найдите PrivacyInfo.xcprivacy в корне пакета приложения и отдельно проверьте встроенные Frameworks. После этого выполните проверку формата plist и убедитесь, что в архиве находятся ожидаемые версии зависимостей. Сохраните путь к файлу и результат проверки вместе с записью о сборке.

Чем отсутствующий манифест отличается от манифеста с ошибками?

При отсутствии файла ожидаемый PrivacyInfo.xcprivacy не найден в нужном пакете. При ошибке файл присутствует, но его структура, тип значения или допустимое содержимое не проходят проверку Apple. Это разные неисправности: сначала установите, существует ли файл в конечном пакете, и лишь затем проверяйте его формат и значения по документации.

Дополнительное чтение