How to present an alert in visionOS immersive space?

My visionOS app uses an immersive view. If the app encounters an error, I want to present an alert.
I tried in a demo app to present such an alert, but it is not shown. Nearly the same code on iOS presents an alert window.
Here is my demo code, based on Apple's Immersive Environment App template:

import SwiftUI
import RealityKit
import RealityKitContent

struct ErrorInfo: LocalizedError, Equatable {
    var errorDescription: String?
    var failureReason: String?
}

struct ImmersiveView: View {
    @State private var presentAlert = false
    
    let error = ErrorInfo(
        errorDescription: "My error",
        failureReason: "No reason"
    )
    
    var body: some View {
        RealityView { content, attachments  in
            let mesh = MeshResource.generateBox(width: 1.0, height: 0.05, depth: 1.0)
            var material = UnlitMaterial()
            material.color.tint = .red
            let boardEntity = ModelEntity(mesh: mesh, materials: [material])
            boardEntity.transform.translation = [0, 0, -3]
            content.add(boardEntity)
        }
        update: { content, attachments in
            // …
        }
        attachments: {
            // …
        }
        .onAppear {
            presentAlert = true
        }
        .alert(
            isPresented: $presentAlert,
            error: error,
            actions: { error in
            }, message: { error in
                Text(error.failureReason!)
            })
    }
}

Since I cannot see any alert, is something wrong with my code? How should an alert be presented in immersive space?

Answered by Vision Pro Engineer in 812508022

Hi @Reinhard_Maenner

I suspect the following error appeared in your debug console:

"Presentations are not currently supported in Volumetric contexts."

The alert modifier uses presentations and the ImmersiveView in the code you shared is in a volumetric context.

A path forward is to open a (non volumetric aka plain) window that uses the alert modifier to present an alert. The answer to this post contains a relevant code snippet.

Accepted Answer

Hi @Reinhard_Maenner

I suspect the following error appeared in your debug console:

"Presentations are not currently supported in Volumetric contexts."

The alert modifier uses presentations and the ImmersiveView in the code you shared is in a volumetric context.

A path forward is to open a (non volumetric aka plain) window that uses the alert modifier to present an alert. The answer to this post contains a relevant code snippet.

How to present an alert in visionOS immersive space?
 
 
Q