Что делать, если отсутствует манифест конфиденциальности iOS? Проверка архива 2026
Руководство для разработчиков, которым нужно понять причину уведомления о манифесте конфиденциальности iOS и определить, какой компонент исправлять. Вы разберёте разницу между отсутствующим и неверным файлом, проверите сторонний SDK и подтвердите наличие манифеста в итоговом Archive.
Содержание
- Что именно сообщает уведомление о манифесте конфиденциальности iOS
- Первый этап: установите, кому принадлежит файл
- Второй этап: проверьте, что собственный манифест включён в сборку
- Третий этап: проследите путь стороннего SDK
- Четвёртый этап: отличите ошибку структуры от отсутствующего файла
- Пятый этап: подтвердите исправление в конечном Archive
- Как оценить качество исправления перед повторной отправкой
- Частые вопросы
- С чего начать при ITMS-91061?
- Как поступить, если у SDK нет PrivacyInfo.xcprivacy?
- Как убедиться, что файл находится в Archive?
- Всегда ли ошибка манифеста означает, что файла нет?
- Для повторяемой сборки нужна доступная среда macOS
В 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 или только исходный проект. Проверяйте и конкретную сборку, которую собираетесь загрузить, а не соседний архив с похожим именем.
Как оценить качество исправления перед повторной отправкой
Используйте короткую оценку по четырём направлениям — это не гарантия одобрения, а способ обнаружить слабое место до отправки:
- Источник проблемы определён: вы связали уведомление с приложением или конкретной зависимостью.
- Владелец манифеста подтверждён: понятно, к какому пакету относится каждый проверяемый файл.
- Формат и значения проверены: синтаксическая проверка дополнена сверкой с материалами Apple.
- Исправленный Archive осмотрен: в нём находится нужная версия компонента и актуальный манифест.
Если не выполнен первый пункт, начинать с редактирования 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. Это разные неисправности: сначала установите, существует ли файл в конечном пакете, и лишь затем проверяйте его формат и значения по документации.