Настройка манифестов для публикации AR игр в Google Play и App Store

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

От иммерсивных приложений до игровых миров и 3D-сцен

Наша выделенная команда для VR/AR/MR-разработки, Unity-продакшна и 3D-моделирования и анимации с собственными кейсами и презентациями.

Посетить персонализированный сайт
Показано 1 из 1 услугВсе 242 услуг
Настройка манифестов для публикации AR игр в Google Play и App Store
Простая
~2-3 рабочих дня
Часто задаваемые вопросы
Наши компетенции
Какие этапы разработки игры?
Последние работы
  • image_games_mortal_motors_495_0.webp
    Разработка игры для компании Mortal Motors
    683
  • image_games_a_turnbased_strategy_game_set_in_a_fantasy_setting_with_fire_and_sword_603_0.webp
    Пошаговая стратегия в фэнтези сеттинге With Fire And Sword
    860
  • image_games_second_team_604_0.webp
    Разработка игры для компании Second term
    490
  • image_games_phoenix_ii_606_0.webp
    3D-анимация — тизер для игры phoenix 2.
    533

Настройка манифестов для публикации AR игр в Google Play и App Store

AR-приложение — не обычное мобильное приложение. Манифест для Google Play и Info.plist для App Store содержат специфичные для AR ключи, без которых приложение либо не пройдёт ревью, либо упадёт на старте у пользователя, у которого ARCore/ARKit не поддерживается или не инициализирован.

AndroidManifest.xml для ARCore: обязательные и опциональные режимы

Google Play различает два режима AR-зависимости: required и optional. Это определяется через <meta-data> в манифесте:

<meta-data android:name="com.google.ar.core" android:value="required"/>

При required Google Play автоматически скрывает приложение на устройствах, где ARCore не поддерживается, и устанавливает ARCore Services автоматически при установке приложения. При optional — приложение доступно всем, но код обязан проверять доступность AR перед инициализацией сессии через ArCoreApk.getInstance().checkAvailability().

Типичная ошибка: поставили required, но забыли добавить фильтр по камере:

<uses-feature android:name="android.hardware.camera.ar" android:required="true"/>

Без этой строки приложение установится на планшеты без нужной камеры, ARCore не запустится, и пользователь получит краш на session.resume() с CameraNotAvailableException.

Если приложение использует Depth API (ARCore Depth), нужен отдельный <meta-data> с com.google.ar.core.depth значением required или optional. Depth работает только на конкретных моделях — список в документации ARCore; если не пометить как optional на неподдерживаемых устройствах, приложение при попытке активировать depth mode крашится с UNAVAILABLE_DEVICE_NOT_COMPATIBLE.

Info.plist для ARKit: NSUsageDescription и capabilities

iOS App Store требует явного описания использования камеры в Info.plist:

<key>NSCameraUsageDescription</key>
<string>Камера используется для отображения дополненной реальности</string>

Формулировка важна: App Store Review Guidelines требуют конкретного описания, почему нужна камера. «Для AR» — принимается. «Для функций приложения» — потенциальная причина реджекта.

Для приложений, использующих ARWorldTrackingConfiguration с frameSemantics (People Occlusion, Body Detection), добавляется ARBodyTrackingConfiguration capability. Если используется LiDAR (Scene Reconstruction) — нужно добавить UIRequiredDeviceCapabilities с arkit и убедиться, что минимальная версия iOS установлена на 13.0+.

Локация в AR: если приложение размещает объекты по GPS-координатам (geo AR), нужны NSLocationWhenInUseUsageDescription и, при необходимости, NSLocationAlwaysAndWhenInUseUsageDescription. App Store отклоняет приложения, запрашивающие always-location без явной необходимости.

Unity AR Foundation: что генерируется автоматически, что нужно добавить вручную

AR Foundation в Unity автоматически добавляет часть необходимых ключей в манифест через XR Plug-in Management. Но не всё. Depth API capabilities, специфичные usage descriptions и custom permissions — правятся вручную в Assets/Plugins/Android/AndroidManifest.xml (Android) или через Xcode Post-Process Script (iOS).

Для iOS удобно использовать UnityEditor.iOS.Xcode.PlistDocument в PostProcessBuild-скрипте — программно добавляет нужные ключи после генерации Xcode-проекта, без риска потерять изменения при пересборке.

Пример проблемы с реального проекта: AR Foundation 5.x с ARKit Face Tracking автоматически добавляет NSFaceIDUsageDescription в plist, даже если Face Tracking в проекте не используется. App Store Review отмечает это как несоответствие заявленным функциям. Решение — явно отключить Face Tracking в XR Plug-in Management, если он не нужен.

Процесс настройки

Аудит текущих манифестов, выявление несоответствий требованиям текущих версий ARCore и ARKit. Настройка зависимостей (required/optional), permissions, usage descriptions. Проверка на тестовых устройствах разных классов — включая устройства без поддержки AR. Подготовка финальных манифестов для сабмита.

Задача Ориентировочные сроки
Аудит + правка существующих манифестов 1 рабочий день
Настройка с нуля (обе платформы) 2–3 рабочих дня
Итерация после реджекта App Store / Google Play 1–2 дня на цикл

Стоимость рассчитывается индивидуально после анализа проекта.