Exporting a project for visionOS
Native Xcode workflow, application roles, icon, tracking and C#/simulator limits.
Check project support
Reckfell 1.0.0 source includes a native visionOS exporter. The current C# exporter does not implement this target. A visionOS export entry or VisionOSXRInterface reference does not establish C# game export. Renaming an iOS preset or enabling the .NET module does not add the missing publishing path.
The native workflow requires a Mac, full Xcode with the visionOS SDK, a matching visionos.zip template archive, a signing Team and access to the target device. Custom templates use custom_template/debug and custom_template/release. Editor, templates and modules must match your build; building visionOS templates is a separate task.
The current preset sets application/min_visionos_version=26.0; build configuration uses xros26.0 targets. Lowering a preset number does not rebuild binaries for an older OS. Export architecture is arm64; device and simulator remain different platforms even with identical architecture names.
Choose the application mode
| Field | Values | Purpose |
|---|---|---|
application/app_role | Window=0, Immersive=1 | Default Window presents an application window. Immersive selects the separate spatial workflow. |
application/immersion_style | Full=0, Mixed=1, Progressive=2 | Initial style for Immersive, defaulting to Mixed. This setting does not create an immersive space for Window. |
Mixed preserves visible surroundings, Full replaces them with virtual content, and Progressive uses an adjustable immersion region. These control composition with surroundings rather than render quality. Do not describe the space as a fixed game-world radius: movement restrictions belong to the platform. Apple immersion styles.
Immersive requires an XROrigin3D/XRCamera3D hierarchy, the active visionOS interface and viewport configuration. A preset value alone is insufficient. The Metal driver, Mobile renderer, tracking, depth and transparency are covered in XR on visionOS. This is native Compositor Services integration rather than OpenXR configuration.
Export an Xcode project
- Add a visionOS preset. Set
application/app_store_team_idto the Team ID and a stableapplication/bundle_identifiermatching your signing configuration. - Choose the role and initial style. For a first launch enable
application/export_project_onlyto diagnose project generation separately from the Xcode build. - Create a separate output directory outside the source project. Export under a simple name such as
Game. Re-export can clean generated directories; preserve manual Xcode changes separately. - Open
Game.xcodeproj, keeping its.pck, XCFramework and generated application directories nearby. Select the scheme, Team and physical target device in Xcode. Complete pairing/Developer Mode setup using Apple's launch instructions. - Use Product > Run and inspect actual display/input. Creating an
.xcodeprojdoes not establish a successful build or launch.
First inspect SDK availability on the target Mac:
xcode-select -p
xcrun --sdk xros --show-sdk-path
xcrun --sdk xrsimulator --show-sdk-pathThese are diagnostic commands rather than an application build. For built-in archiving disable application/export_project_only: the common exporter runs xcodebuild archive, then package export using the configured signing settings. Project/archive/package separation is covered in iOS export; its rendering and C# requirements do not transfer to visionOS.
Icon and permissions
Prepare three 1024×1024 layers: icons/icon_front_layer_1024x1024, icons/icon_middle_layer_1024x1024, and icons/icon_back_layer_1024x1024. The exporter creates AppIcon.solidimagestack. Incorrect sizes are rescaled automatically without improving source quality. If layers are missing, front falls back to the shared icon, while absent middle/back layers become opaque-black placeholders. Inspect the final icon in Xcode rather than just individual images.
Enable xr/visionos/enable_hand_tracking or xr/visionos/enable_controller_tracking only when needed. Provide privacy/hand_tracking_usage_description and privacy/accessory_tracking_usage_description respectively; plist keys are NSHandsTrackingUsageDescription and NSAccessoryTrackingUsageDescription. A description or tracker does not establish user authorization or valid data. Provide input when permission is denied.
Acceptance criteria
For Immersive, inspect stereo rendering, correct scale, camera placement, visible surroundings in Mixed, input and recovery from interruptions on the device. Test user:// saves separately. For release, repeat validation with the release package, correct signing and distribution method.
Current simulator limitation: visionOS disables Vulkan and OpenGL; Simulator builds additionally disable Metal. Successful project generation or simulator library compilation therefore does not establish a working graphics driver. The “switch to Compatibility” recipe available for some iOS templates does not apply here.
Review boundary: this article was reviewed against the native exporter, Swift layer, build configuration and C# plugin target list. No visionOS export, Xcode, signing, launch, tracking or graphics validation was performed on this Windows host. Those results still need to be obtained for your build; engine source was not changed.