[BLOCKER] Is a Launch / Splash Screen Possible for visionOS Fully Immersive Apps?

We’re trying to submit our fully immersive app for visionOS tonight. It appears to take from 30-90 seconds for Unity to finish loading the app. Subsequent launches are faster.

Here’s what we’ve tried.

  1. The Player Settings / Splash Screen settings appear to have no effect. The Virtual Reality Splash screen does not appear. No image or even the Unity logo appear at launch in headset. We tired various image formats including 3849x2160.

  2. Setting a launch screen image in Xcode also does not result in an image at launch.
    Adding images to your Xcode project | Apple Developer Documentation
    UILaunchScreen | Apple Developer Documentation

  3. Perhaps visionOS fully immersive spaces have no launch screen? Instead visionOS is supposed to show App Icon while the experience is loading. However, we don’t see our App Logo appear. Launching | Apple Developer Documentation

Guidance on best practices would be appreciated.

Hi there! Sorry to hear you’re having trouble.

Indeed, the splash screen is not functional on visionOS. It can cause crashes so it is forcibly disabled by the build pre/postprocessor in com.unity.xr.visionos.

Some customers have tried modifying the MainApp.swift code to add a SwiftUI window that appears before launching into the immersive space. However, this comes with its own issues. Mainly, this window can “steal” the audio context, causing audio to sound like it is coming from the window, and stop playing when the window is closed. Calling AudioSettings.Restart after this might be able to bring audio back, but I haven’t been able to confirm this.

As for the app icon and launch image, I think the same problem applies. Because the app launches directly into the immersive space, there is no window on which these images could be displayed.

Have you tried creating your own “splash screen” in a Unity scene? You should be able to set a smaller scene as index 0 in the build scenes, which will allow the app to launch quickly and then from there you can async load the big heavy scene that you are currently using as your startup scene. If this doesn’t reduce the startup time for your app, there may be something else going wrong, like a Resources.LoadAll, or something else that forces all your assets to load right at the start.

30-90 seconds to start sounds like a long time, even for a relatively simple app. Are you timing this with the Xcode debugger attached? Is this on device or in the simulator? If this is a build from Xcode, that time could include deploying/installing and attaching the debugger, which are delays that users won’t experience when installing the app from the App Store (or at least they’ll see a progress bar and know they have to wait for the app to install).

Finally, the long startup time could be a bug in Unity. If you are able to submit your project in a bug report we can take a look and see specifically what is taking so long. Finally, could you submit an “idea” on our roadmap to enable splash screen support? I know it’s not a new feature, but having it in the roadmap allows more users to vote on the idea and signal to us what features need our attention the soonest.

Thanks for reporting the issue, and good luck!

1 Like

Ah… the create micro-scene with JUST the logo trick! (and XR game managers, black skybox, and a timer). We started with a small mostly empty scene, but a logo against black appears to load faster when not attached to the debugger. It’s about 4-6 seconds to be in now (with a 0.7 second timer on the logo scene.)

We submitted today (fingers crossed)!

We’ll see what happens with a downloaded vs run from Xcode buld.

Appreciate the clarification on splash screens / logos @mtschoen . I’ll add the request to the roadmap I’m sure I’m not the only one. Immersive we need a space/screen. (For Mixed Reality IMHO the default should be just a logo surrounded by the pass through video.)