Is it possible not to use handtracking and not to request hand-tracking authority?

We created a vision pro application which uses gaze & tap interaction.
But, after app awakes, app requests enable to use hand-tracking on prompt.
We only use SpatialUIInputManager and XRInteractionManager components for manupilate UI.

Is it possible not to use hand-tracking and prevent to display prompt for checking authority of hand-tracking on device?

We try to set HandTrackingUsageDescription empty, but app will crash when it starts on device.

After exporting XCode project and check swift code “UnityPolySpatialAppDelegate”.
In this file, authority requesting code is written but it is disabled.
So, which code does authority requesting ?

The VisionOSLoader will start the hand subsystem immediately as your app starts, which registers the VisionOSHandProvider on VisionOSSessionSubsystem as a required provider. As soon as the session starts, it will request hand tracking authorization. So the answer to “where is the code that requests authorization?” is VisionOSSessionSubsystem.

For Virtual Reality apps, the session is required for head tracking, which essentially means the session is required at app start (you never want to render without head tracking), thus you will be prompted immediately for hand tracking authorization.

For a Mixed Reality app, you don’t need an ARSession in your start-up scene, and you can elect to enable it later on after the app starts up, or when you transition into Unbounded mode (and thus have an ImmersiveSpace open). All of this is to say–you may not need to prompt the user immediately on app start, but you will need to prompt them eventually when starting an ARKit session, even if you do not plan to use hand tracking. if you don’t include this usage description, you will not be able to start the session because the required hand data provider will not be authorized.

If you do not plan to use ARKit features at all in your app, you can disable the Apple visionOS loader in Project Settings > XR Plug-in Management, which will disable the project validation errors and the error you see here. In that configuration, it is totally fine to build your app without these usage descriptions set.

We understand that this is inconvenient, and we’re working on adding a setting to allow you to opt out of automatically starting the hand subsystem in the loader. That will allow apps to enable ARKit without requiring hand tracking authorization.

1 Like


Thank you for your quick response!!!
Your explanation is kindly and easy to understand for me :slight_smile:

you can disable the Apple visionOS loader in Project Settings > XR Plug-in Management

I have a question about your explanation.
You said “disable Apple VisionOS loader”, it seems that there is no function/object named “Loader”.
Is it correct that “Loader” means “Plug-in Proivders” ?

Yup! I guess we should put the name “loader” somewhere in that UI :slight_smile:
The providers provide loaders… :wink:

1 Like

Quick update on this thread. We now expose a build setting called Initialize Hand Tracking on Start-Up, which will allow you to either disable hand tracking permanently, or allow your app to start without hand tracking enabled. If you want to use this setting and enable/disable hand tracking later on via code, check out the VR sample (go to the Samples tab for the Apple visionOS XR Plugin in the PackageManger UI) to see how to start and stop the hand subsystem. The button labeled “Create/Destroy Hand Subsystem” will do what it says when you press it. It mostly boils down to calling VisionOSLoader.CreateHandSubsystem etc.

Check out SampleUIController in the sample since there are a few more steps to this, but it’s pretty straightforward.

1 Like