tags: [vr-ar]
Manifest setup for AR game publishing in Google Play and App Store
AR app is not regular mobile app. Manifest for Google Play and Info.plist for App Store contain AR-specific keys without which app either fails review or crashes at user's startup if ARCore/ARKit unsupported or uninitialized.
AndroidManifest.xml for ARCore: required and optional modes
Google Play distinguishes two AR dependency modes: required and optional. Determined via <meta-data> in manifest:
<meta-data android:name="com.google.ar.core" android:value="required"/>
At required Google Play auto-hides app on devices where ARCore unsupported, installs ARCore Services automatically at app installation. At optional — app available to everyone, but code must check AR availability before session init via ArCoreApk.getInstance().checkAvailability().
Typical error: set required but forgot camera feature filter:
<uses-feature android:name="android.hardware.camera.ar" android:required="true"/>
Without this line app installs on tablets without needed camera, ARCore won't launch, user gets crash on session.resume() with CameraNotAvailableException.
If app uses Depth API (ARCore Depth), need separate <meta-data> with com.google.ar.core.depth set to required or optional. Depth only works on specific models — check ARCore docs; not marking optional on unsupported devices, app crashes on depth mode activation with UNAVAILABLE_DEVICE_NOT_COMPATIBLE.
Info.plist for ARKit: NSUsageDescription and capabilities
iOS App Store requires explicit camera usage description in Info.plist:
<key>NSCameraUsageDescription</key>
<string>Camera used for augmented reality display</string>
Wording matters: App Store Review Guidelines require specific reason why camera needed. "For AR" — accepted. "For app features" — potential rejection cause.
For apps using ARWorldTrackingConfiguration with frameSemantics (People Occlusion, Body Detection), add ARBodyTrackingConfiguration capability. If using LiDAR (Scene Reconstruction) — add UIRequiredDeviceCapabilities with arkit and ensure minimum iOS 13.0+.
Location in AR: if app places objects by GPS coordinates (geo AR), need NSLocationWhenInUseUsageDescription and potentially NSLocationAlwaysAndWhenInUseUsageDescription. App Store rejects apps requesting always-location without clear need.
Unity AR Foundation: what auto-generates, what to add manually
AR Foundation auto-adds part of required keys to manifest via XR Plug-in Management. Not everything. Depth API capabilities, specific usage descriptions, custom permissions — edit manually in Assets/Plugins/Android/AndroidManifest.xml (Android) or via Xcode Post-Process Script (iOS).
For iOS convenient to use UnityEditor.iOS.Xcode.PlistDocument in PostProcessBuild script — programmatically adds needed keys after Xcode project generation, no risk losing changes on rebuild.
Real project problem example: AR Foundation 5.x with ARKit Face Tracking auto-adds NSFaceIDUsageDescription even if Face Tracking unused in project. App Store Review notes as mismatch to declared functions. Solution — explicitly disable Face Tracking in XR Plug-in Management if not needed.
Setup process
Audit current manifests, identify requirement mismatches with current ARCore and ARKit versions. Configure dependencies (required/optional), permissions, usage descriptions. Test on different device classes — including devices without AR support. Prepare final manifests for submission.
| Task | Estimated timeline |
|---|---|
| Audit + fix existing manifests | 1 working day |
| Setup from scratch (both platforms) | 2–3 working days |
| Iteration after App Store / Google Play rejection | 1–2 days per cycle |
Cost calculated individually after project analysis.





