swiftship/internal/skills/data/always-visionos/navigation/SKILL.md
visionOS navigation patterns: WindowGroup, volumes, immersive spaces, NavigationStack, TabView. Use when working on visionOS navigation, scene management, or window transitions. Triggers: navigation, WindowGroup, ImmersiveSpace, TabView, NavigationStack, openWindow.
npx skillsauth add abdullah4ai/apple-dev-docs navigationInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
.defaultSize(width: 800, height: 600)
}
}
WindowGroup(id: "model-viewer") {
Model3DView()
}
.windowStyle(.volumetric)
.defaultSize(width: 0.5, height: 0.5, depth: 0.5, in: .meters)
ImmersiveSpace(id: "immersive") {
ImmersiveView()
}
.immersionStyle(selection: .constant(.mixed), in: .mixed, .full)
@Environment(\.openWindow) var openWindow
@Environment(\.openImmersiveSpace) var openImmersiveSpace
@Environment(\.dismissImmersiveSpace) var dismissImmersiveSpace
Button("Open Model") {
openWindow(id: "model-viewer")
}
Button("Enter Immersive") {
Task {
await openImmersiveSpace(id: "immersive")
}
}
NavigationStack {
List(items) { item in
NavigationLink(value: item) {
ItemRow(item: item)
}
}
.navigationTitle("Items")
.navigationDestination(for: Item.self) { item in
ItemDetailView(item: item)
}
}
TabView {
Tab("Home", systemImage: "house") {
HomeView()
}
Tab("Search", systemImage: "magnifyingglass") {
SearchView()
}
Tab("Settings", systemImage: "gear") {
SettingsView()
}
}
.tabViewStyle(.sidebarAdaptable)
.sheet(isPresented: $showSettings) {
SettingsView()
.presentationDetents([.medium, .large])
}
NavigationSplitView sidebar — use TabView with .tabViewStyle(.sidebarAdaptable) insteadUINavigationController — SwiftUI onlyWindowGroup for 2D windows (default scene type).windowStyle(.volumetric) for 3D bounded contentImmersiveSpace for full spatial experiencesopenWindow(id:) and openImmersiveSpace(id:) for scene transitionsNavigationStack with navigationDestination(for:) for in-window navigationTabView with .tabViewStyle(.sidebarAdaptable) for top-level navigation.presentationDetents on .sheettesting
Use for 3D games: racing, 3D sports, board games, marble maze, tower defense, bowling. SceneKit + SceneView architecture, 3D scene hierarchy, physics, game loop, primitives, materials, cameras, particles, audio.
documentation
Game UI patterns: SwiftUI HUD overlays on SpriteKit, menus (main/pause/game-over), virtual joystick/d-pad, score displays, health bars, tutorial onboarding.
tools
Download free game sprites/textures/3D models and generate procedural assets. Covers nw_download_asset tool, texture factories, sprite atlas organization, 3D model loading, and programmatic asset creation.
testing
Use for 2D games: arcade, puzzle, sports, ping pong, platformer, shooter, 2D racing. SpriteKit + SpriteView architecture, scene hierarchy, physics, game loop, audio, particles, game feel.