XR / Spatial Computing

Getting Started: Building Your First Spatial App for Vision Pro

visionOS reuses SwiftUI and RealityKit rather than requiring a whole new framework — the real learning curve is spatial layout and windows that exist in 3D space instead of on a flat screen.

visionOS, Apple’s operating system for Vision Pro, is built on familiar foundations for anyone who’s worked in Apple’s ecosystem before: SwiftUI for interface layout and RealityKit for 3D content — rather than an entirely new, unfamiliar framework to learn from zero. The actual new skill is designing for spatial interfaces, where windows and objects exist at real depth in a room rather than on a flat rectangle.

Watch: I built an Apple Vision Pro app… visionOS tutorial (Beyond Fireship, YouTube)

Step 1: Start with a Window, not a full 3D scene

visionOS apps can run in three presentation styles: a Window (a flat SwiftUI panel floating in space — the closest thing to a familiar app UI), a Volume (a bounded 3D space for displaying 3D content), and a Space (a fully immersive environment that can take over the user’s surroundings). A first project should start as a Window — it’s built almost entirely from standard SwiftUI you likely already know, and it gets a real app running and testable before introducing any 3D-specific concepts at all.

Step 2: Reality Composer Pro is where 3D content gets built

For anything beyond flat SwiftUI panels, Reality Composer Pro (bundled with Xcode) is the tool for assembling and previewing 3D scenes, USDZ models, materials, and particle/audio behaviors before wiring them into code. Building and previewing a scene here, rather than trying to position 3D content purely through code and guesswork, is significantly faster for anyone still developing spatial intuition — it’s a visual editor specifically for the part of the workflow that’s genuinely new relative to flat-screen app development.

Step 3: RealityView is the bridge between SwiftUI and 3D content

RealityView is the SwiftUI component that hosts RealityKit content inside an otherwise-normal SwiftUI view hierarchy — it’s how a Window-based app adds actual 3D entities, anchors, and interactions without leaving the SwiftUI paradigm entirely. Understanding this one component is the key that unlocks combining familiar 2D UI (buttons, text, lists) with genuine 3D content in the same view, which is the pattern most real visionOS apps actually use rather than committing fully to either pure-2D or pure-3D.

Step 4: Test in Simulator early, on-device before shipping

Xcode’s visionOS Simulator lets you iterate without a physical headset for most of early development — a real practical advantage given the hardware’s cost and limited availability. But spatial interactions (gaze-and-pinch input, real-world scale, actual depth perception) are things the simulator can only approximate; testing on real hardware before considering a feature finished is non-negotiable for anything where spatial feel — not just functional correctness — is part of what’s being designed.