visionOS

RSS for tag

Discuss developing for spatial computing and Apple Vision Pro.

Posts under visionOS tag

200 Posts

Post

Replies

Boosts

Views

Activity

Why Does Apple Vision Pro Still Lack 3DoF / Head-Locked Display Support After Nearly 3 Years?
Why is this still not supported on Apple Vision Pro? For a premium device that has been on the market for nearly three years and costs thousands of dollars, it's difficult to understand why Apple still hasn't provided a basic option to disable spatial anchoring when it isn't needed. This limitation becomes particularly frustrating in moving environments such as cars, buses, trains, airplanes, and cruise ships. Users have repeatedly reported issues with virtual windows drifting, shifting, becoming unstable, or losing tracking entirely. Apple introduced Travel Mode to address some of these challenges, but reports of tracking problems persist, and certain environments remain unsupported. Why should something as simple as watching a movie or using a virtual monitor require constant 6DoF spatial tracking? Not every use case requires a fully spatial experience. Sometimes users simply want a stable virtual screen without the operating system constantly attempting to anchor it to their surroundings. At a minimum, visionOS should provide three display options: 6DoF Spatial Mode: The existing experience, with windows anchored to the physical environment. 3DoF Rotation-Only Mode: Virtual screens respond to head rotation without relying on positional tracking. Head-Locked Mode: A screen remains positioned directly in front of the user without requiring environmental anchoring. Other headsets have offered simplified tracking options for years. It's disappointing that a product at this price point still lacks comparable flexibility. Users shouldn't have to struggle with spatial tracking just to watch a movie, browse Safari, or use Mac Virtual Display, particularly when the hardware is capable of delivering an otherwise excellent viewing experience. Apple Vision Pro has been available for nearly three years. Why is such a fundamental display option still missing? Is there an actual technical limitation preventing Apple from implementing this, or has it simply not been prioritized? At this stage in the product's lifecycle, this shouldn't remain an unresolved limitation. Apple should provide users with greater control over display tracking rather than forcing every use case into the same spatial computing model. I'd like to hear whether Apple has any plans to address this in future visionOS releases.
0
0
12
12m
Eye tracking data access for researchers
Hi, Is there a way for researchers to get or request access to eye tracking data from the Apple Vision Pro within the boundaries of the app to be developed? I'm currently involved in research where access to eye tracking data would be beneficial (I'm aware of many existing discussions about this, but I was still wondering if there might be an option, particularly for research labs.) Thank you for your answer.
3
1
900
3h
FoveatedStreamingSession headset and controller location smoothing, Velocity for OpenXR
Hi, We build a PC VR streaming app for Apple Vision Pro. It has two VR paths: our own stream (our transport, VideoToolbox decode, our compositor layer) and FoveatedStreamingSession with CloudXR, which we use for titles that benefit from foveation. On our own path we filter the head and controller poses and send velocity. Getting both right took a lot of on-device tuning, and they made a large difference to comfort and to physics-based games. On the FoveatedStreamingSession path, the pose path from tracking to the endpoint runs inside the system, so an app has no way to apply, adjust or even inspect either one. We would like to ask for that control. 1. Pose smoothing for the head and controllers What we measured on device: Vision Pro tracking picks up very small, heartbeat-rate motion (around 1.2 Hz, millimetre scale). Locally that is invisible. After a streaming round trip it comes back as a visible world shake, because the remote frame is rendered at a pose about 50 ms old and reprojection has to cover the difference. Our A/B tests showed the tremor is largely rotational. Reprojection did not fully absorb it at our latency: turning off only the rotation filter brought the shake back right away. What fixed it for us: a One-Euro filter on the head pose, applied on the client before the pose is sent, with the frame anchored at the exact pose it was rendered with, so reprojection still covers the gap to the real head at no added latency. The values we settled on after live tuning: ComponentMin cutoffBetaPosition0.1 Hz12Rotation0.5 Hz12The right values depended on the content, the user and the end-to-end latency, which is why we are asking for control rather than one fixed default. Controllers need their own settings, because the right balance between lag and steadiness differs between fast games and precise work such as aiming or drawing. What we would like on FoveatedStreamingSession: Separate smoothing settings for the head and for tracked accessories, with position and rotation set independently. A choice of system default, off, or custom parameters. A One-Euro style minimum cutoff plus speed coefficient would cover our case. Documentation of what filtering, if any, the system applies today, so apps don't filter on top of it. 2. Velocity for the head and controllers Physics titles (throws, grab-and-pull, swings) take their motion from the linear and angular velocity in the OpenXR space velocity (XrSpaceVelocity), not from changes in position. If velocity arrives as zero, throws drop at the user's feet. If it arrives noisy, the PC runtime's own extrapolation to photon time amplifies the noise, and the controllers shake at rest. We hit both cases on our own path. What fixed them: Pass the accessory anchor's velocity through. Set the pose time offset from the client's own prediction, so the PC side does not predict twice. Apply a small deadband (about 0.05 m/s linear and 10°/s angular, matching common open-source streamers). What we would like on FoveatedStreamingSession: Documentation of whether linear and angular velocity are sent to the endpoint for the head and for tracked accessories, and in which reference frame. We could not find a frame statement for AccessoryAnchor velocity in the docs or the SDK interface. Game title testing appears as though these values not being sent. App control over velocity: on/off, a gain, a deadband, and a filter (or the same smoothing settings as above). The prediction offset the session uses when it sends poses, so apps and endpoints can avoid predicting twice. 3. A possible API shape (only a sketch to try to convey the requested need) extension FoveatedStreamingSession { struct PoseFiltering: Sendable, Equatable { static var systemDefault: PoseFiltering { get } static var off: PoseFiltering { get } static func oneEuro(positionMinCutoff: Double, positionBeta: Double, rotationMinCutoff: Double, rotationBeta: Double) -> PoseFiltering } struct VelocityReporting: Sendable, Equatable { var isEnabled: Bool var linearGain: Float var angularGain: Float var linearDeadband: Float // m/s var angularDeadband: Float // rad/s var filtering: PoseFiltering } var headPoseFiltering: PoseFiltering { get set } var accessoryPoseFiltering: PoseFiltering { get set } var accessoryVelocityReporting: VelocityReporting { get set } var posePredictionInterval: TimeInterval { get } }Being able to change these during a session (not only before connect) would let users tune them from the app's own settings while wearing the headset, which is how we found our values.
2
0
386
18h
Built-in environments in the visionOS simulator
Should Environments like White Sands and Mount Hood work in the visionOS simulator? In a fresh visionOS 27.2 simulator, selecting an Environment from Home View does nothing. I saw the same behavior with visionOS 27.0. After selecting the Moon, Control Center still shows White Sands. Moving the immersion slider in Control Center changes the position of Device Hub’s sidebar slider, but that slider remains disabled and no environment appears. This happens before installing or running my app. The simulated room scenes work. The simulator logs show that the environment catalog downloads successfully, but the scenic assets are marked state=notPresent. Trying to increase immersion produces: Default environment identifier Wolf is no longer available on disk. Resetting to system default. Invalid environment Wolf requested, it does not exist or is not in correct state (Unavailable). Failed to load environment: Error Domain=RealityEnvironmentError Code=407 "Environment action not performed." (Wolf is the internal identifier for White Sands.) Is this an expected simulator limitation, a known issue, or is there a way to download and enable these environments?
1
0
337
1d
Can visionOS Performance Trace measure RealityKit frame deadlines without Instruments?
We have an immersive RealityView/RealityKit scene on Vision Pro and want to measure renderer frame deadlines, misses, and per-frame CPU/GPU timing without Instruments. Apple's “Performance Trace: visionOS” instructions describe collecting a sysdiagnose for Feedback after installing a temporary logging profile and restarting. We could not find a supported local readout or field map in those instructions. Does the archive contain attributable RealityKit renderer frame deadlines, completion or miss events, and per-frame CPU/GPU measurements? If so, what supported tool, command, or export can decode them without Instruments or xctrace? Which archive member and fields contain the measurements, and what are their clock, units, and app/scene/layer attribution? A small redacted decoded example would help us verify the method before another headset run. If the archive does not provide those measurements, is there another Apple-supported method for the existing RealityKit renderer?
2
0
408
6d
Presenting the system share sheet from a full ImmersiveSpace on visionOS 26
We are building a visionOS 26 app (deployment target visionOS 26.0). Inside a full immersive space, the user takes a spatial photo. The photo is shown on a RealityView attachment. We need the system share sheet( AirDrop, Messages, Mail, Copy, Save Image, and the item preview with Done) to appear when the user taps Share on that attachment. The immersive space is: ImmersiveSpace(id: "ImmersiveView") { ImmersiveView() } .immersionStyle(selection: $panoImageView, in: .full) .upperLimbVisibility(.visible) The review UI is a RealityView attachment, not a window: Attachment(id: "panoramaFrameCaptureReview") { PanoramaFrameCaptureReviewView(model: frameCapture) { guard let path = frameCapture.shareURL?.path else { return } dismissWindow(id: "PanoramaPhotoShare") Task { @MainActor in try? await Task.sleep(nanoseconds: 180_000_000) openWindow(id: "PanoramaPhotoShare", value: path) } } } The shared item is a stereo HEIC written with Image I/O (kCGImagePropertyGroupTypeStereoPair, left/right images, HEIF camera extrinsics and SimplifiedPinhole intrinsics). The same data displays correctly with ImagePresentationComponent and saves to Photos as a spatial photo. Share is the only part that fails. Attempt 1. ShareLink on the attachment Tapping Share does nothing. On entry to the immersive space the system logs: Presentations are not currently supported in Immersive contexts. Attempt 2. UIActivityViewController from the attachment’s hosting controller let activity = UIActivityViewController(activityItems: [fileURL], applicationActivities: nil) var presenter: UIViewController = self while let parent = presenter.parent { presenter = parent } presenter.present(activity, animated: true) presenter is UIHostingController<RootView>. The console then says: Skipping popover presentations transition, missing window or scene for <UIActivityViewController>. Failed to request default share mode for fileURL:...heic error:Error Domain=NSOSStatusErrorDomain Code=-10814 No share UI appears. presentedViewController is non-nil, so a “did it present?” check does not detect the failure. Attempt 3. A real WindowGroup whose only job is to present UIActivityViewController WindowGroup(id: "PanoramaPhotoShare", for: String.self) { path in if let path = path.wrappedValue { PanoramaPhotoShareWindow(path: path) } } .windowStyle(.plain) .defaultSize(width: 20, height: 20) .defaultWindowPlacement { _, _ in WindowPlacement(.utilityPanel) } struct PanoramaPhotoShareWindow: View { let path: String @Environment(.dismissWindow) private var dismissWindow var body: some View { PanoramaPhotoSharePresenter(url: URL(fileURLWithPath: path)) { dismissWindow(id: "PanoramaPhotoShare") } .frame(width: 8, height: 8) .background(.clear) } } final class PanoramaPhotoShareController: UIViewController { override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) guard view.window != nil, let url else { return } let activity = UIActivityViewController(activityItems: [url], applicationActivities: nil) activity.completionWithItemsHandler = { _, _, _, _ in self.onFinish?() } present(activity, animated: true) } } Tapping Share opens this window and the app crashes immediately. We removed the feature so users are not crashed. An earlier build that also put a ShareLink in that window logged: Attempt to present <UIActivityViewController> on <UIHostingController<...PanoramaPhotoShareWindow...>> which is already presenting <UIActivityViewController>. Question What is the supported way, on visionOS 26, to present the system share sheet while a .full ImmersiveSpace stays open? If a window is required, how should that window present the sheet without crashing, and without showing a second window that only contains another Share button?
1
0
756
6d
Locked in Syndrome
Hi all, I have a friend who has 'locked in syndrome' for three years. He only has movement of his eyes. I realised that there are ways Pete can communicate using 'eye gaze' software, but I do believe that the future is Vision Pro as he will not only be able to move towards communicating with others, but it will help him experience a world outside of his hospital bed again in 3d. Here are the things we need to overcome to help him on his way... Pete wouldn't be able to use the Vision Pro headset by himself, so I would need access in the same way that people in the Apple Store have access when demoing the headset to people. Pete has movement of his eyes, but not his head so there would need to be adjustments. It would also be good to secure the headset more, so that if Pete sneezes it doesn't need resetting. I can imagine that Apple would be keen on working on these things because not only do people like Pete need an improved experience of life on this planet, but there is a big market of people such as Pete out there. So if anyone knows how to move forward with any of these things, or who I can get in contact with at Apple HQ, I would be keen to learn. Thanks.
2
0
1.1k
6d
visionOS 27 beta 4 (24M5326g) stuck: update fails with MSU 806 MADownloadDaemonNotReady, all Apple services hang
My Apple Vision Pro is still on visionOS 27.0 beta 4 (24M5326g) and can't update or use any Apple service. Safari works. Software Update offers visionOS 27.2 (24N6120) but stays at "Update Requested". The OTAUpdate log shows: MobileSoftwareUpdateErrorDomain 806 "Failed to download update brain asset, MADownLoadResult:MADownloadDaemonNotReady". App Store can't connect, Apple TV and Games say a network connection is required, iCloud doesn't work, and Media & Purchases hangs at "Signing in to Apple Media Services". Other devices on the same network work normally. Reset All Settings didn't help. devicectl device sysdiagnose fails with CoreDeviceCLISupport.DiagnoseError 0. I don't have a Developer Strap. Has anyone recovered a Vision Pro stuck on an early beta like this without one? Filed as FB25386556.
0
0
438
1w
Reality kit Entities Appearing to Lag in a Full or Progressive Style Immersive Space When Opened with Environment Turned On
PLATFORM AND VERSION Vision OS Development environment: Xcode 16.2, macOS 15.2 Run-time configuration: visionOS 2.3 (On Real Device, Not simulator) Please someone confirm I'm not crazy and this issue is actually out of my control. Spent hours trying to fix my app and running profiles because thought it was an issue related to my apps performance. Finally considered chance it was issue with API itself and made sample app to isolate problem, and it still existed in it. The issue is when a model entity moves around in a full space that was launched when the system environment immersion was turned up before opening it, the entities looks very choppy as they move around. If you take off the headset while still in the space, and put it back on, this fixes it and then they move smoothly as they should. In addition, you can also leave the space, and then turn the system environment immersion all the way down before launching the full space again, this will also make the entity moves smoothly as it should. If you launch a mixed immersion style instead of a full immersion style, this issue never arrises. The issue only arrises if you launch the space with either a full style, or progressive style, while the system immersion level is turned on. STEPS TO REPRODUCE https://github.com/nathan-707/ChoppyEntitySample Open my test project, its a small, modified vision os project template that shows it clearly. otherwise: create immersive space with either full or progressive immersion style. setup a entity in kinematic mode, apply a velocity to it to make it pass over your head when the space appears. if you opened the space while the Apple Vision Pros system environment was turned up, the entity will look choppy. if you take the headset off while in the same space, and put it back on, it will fix the issue and it will look smooth. alternatively if you open the space with the system immersion environment all the way down, you will also not run into the issue. Again, issue also does not happen if space launched is in mixed style.
2
1
1.1k
1w
Immersive space sometimes opens with a broken world origin (world anchors fail with error 200, recenter times out)
Hi all, We're seeing an intermittent issue in a native SwiftUI + RealityKit app on Vision Pro (visionOS 27.0.1, still there on 27.2). When we open a mixed ImmersiveSpace, roughly 1 in 10–30 opens, everything ends up offset from where it should be. Sometimes it's 50 cm, sometimes several meters, sometimes it's rotated. Holding the Digital Crown to recenter fixes it immediately. We are attaching things to the camera, like we have a window following the user and that is offset in these rare cases which makes the app not usable. In the device logs, a good open looks like this: backboardd (recenter) Setting new world origin with anchor ... backboardd ARWorldTrackingProcessor: Added world anchor ... successfully (x4) backboardd (recenter) Finished (error: (null)) setting set new world origin ... A bad open looks like this: backboardd (recenter) Setting new world origin with anchor ... arkitd SLAMAnchorUpdate: Failed to add anchor request ... NSPOSIXErrorDomain Code=4 backboardd ARWorldTrackingProcessor: Failed to add world anchor ... com.apple.arkit Code=200 "Adding an object failed." (x4) backboardd (recenter) timeout exceeded. Forcing fade in. Like whenever the bad state occurs it is because adding a world anchor seems to fail. I haven't tested with visionOS26 but the same app didnt run into that problem ever. So the system seems to fail adding its own origin anchors, gives up after 2 seconds and shows the space anyway. Has anyone else run into this? And is there any way to detect it from the app or trigger a recenter in code? Thanks!
2
0
661
1w
High fidelity gaming on Apple Vision Pro
I'm looking to find the best setup for a game on AVP that gives the best quality environment with gameplay but there seems to be a mix of possible solutions each with their own drawback. My ideal scenario is a high fidelity room/environment while making use of the PS VR2 Sense controllers to track the user's hands and give them more inputs via the controllers. Eg they hold a weapon tracked to the controllers with the buttons able to use the weapon, shooting and hitting enemies in the room. I want to aim more for highest qualtiy gaming than cartoony so opted for foveated streaming from the Mac as my ideal, but this seems limited to only having some base inputs from the hands and no controller inputs for hand and positional tracking from the controller movement (as they need the data from the Vision Pro camera but the game is technically running on the Mac and streamed to the VP) The only real solution for what I want here is to go via RealityKit as a native Vision Pro app but this reduces the game quality I had in mind as the entire thing is now rendering on the VP instead of the Mac. Am I missing something here or is this a real limitation today? To reitarate I'm looking for: highest fidelity game quality (rendering as much as possible on the Mac) tracking the VR2 Sense controller's positions (to track a weapon) in 3D space
1
0
1.1k
2w
Foveated streaming QR code Authentication alternative
I was wondering whether there is a way to authenticate a CloudXR connection without using a QR code in a local deployment scenario. If the server is running in a headless environment, QR code-based authentication would not be practical. I reviewed the documentation but could not find any information on alternative authentication methods. Is a non-QR authentication workflow similar to the remote case supported?
2
0
1.5k
3w
Metal Compositor Service & Persona (VisionOS)
Hello, I'm currently trying to make a collaborative app. But it just works only on Reality View, when I tried to use Compositor Layer like below, the personas disappeared. ImmersiveSpace(id: "ImmersiveSpace-Metal") { CompositorLayer(configuration: MetalLayerConfiguration()) { layerRenderer in SpatialRenderer_InitAndRun(layerRenderer) } } Is there any potential solution too see Personas in Metal view? Thanks in advance!
3
0
2k
3w
Main Camera development request blocked by Individual-to-Organization conversion
We are developing MadnessBot as a business-only Vision Pro automotive inspection app for professional mechanics and repair shops, intended for private business distribution. Main Camera access is essential for analyzing the vehicle and component in front of the technician. A native development app is running on our physical headset, and chat plus OBDLink CX diagnostics have been tested. Our existing Apple Developer Program membership is enrolled as Individual. We contacted Developer Support on October 6, 2026, with a follow-up on October 9, for assistance converting it to Organization. The conversion form asks for the type of tax ID historically associated with the Individual membership; the Account Holder does not know that record and has asked Support to verify it before selecting an answer. The enterprise API request form remains inaccessible until organization enrollment is confirmed. We have not submitted a camera entitlement request yet. Our planned initial request is Development Only Main Camera access for registered test devices. Feedback reference: FB25132939. Could the Enterprise APIs for visionOS team help route this prerequisite blocker to membership support, or advise the correct escalation path so we can complete conversion and apply for Development Only access?
0
0
1.6k
Oct ’26
MFMailComposeViewController in visionOS does not have a cancel button
When i use the MFMailComposeViewController in visionOS, there is no cancel button for the controller. The button at the bottom closes the app. Is anyone else experiencing this? if([MFMailComposeViewController canSendMail]) { MFMailComposeViewController* controller = [[MFMailComposeViewController alloc] init]; controller.mailComposeDelegate = (id <MFMailComposeViewControllerDelegate>)view; [controller setToRecipients:toAddresses]; [controller setSubject:subject]; [controller setMessageBody:body isHTML:isHtml]; [view presentViewController:controller animated:YES completion:nil]; }
15
1
2.1k
Oct ’26
RealityKit VideoMaterial renders 8-bit HEVC HLG/BT.2020 360° video with a purple tint in the visionOS Simulator (device is fine)
We paint a looping 360° video on the inside of a sphere with VideoMaterial(avPlayer:): an AVQueuePlayer plus AVPlayerLooper, a ModelEntity with an inward-facing equirectangular mesh, inside a .mixed ImmersiveSpace. No shaders, no VideoPlayerComponent. We could not find an official Apple sample that puts a VideoMaterial on a 360° sphere; this is the plain pattern from the VideoMaterial(avPlayer:) reference and the one used in threads like 734081. On Apple Vision Pro hardware the video renders correctly. In the visionOS Simulator (27.0, 26.5 and earlier 26.x, Xcode 27.0) the whole frame has a strong purple/magenta cast. Audio and timing are fine. The video (which we cannot share, so here is its metadata, image sample of issue on simulator provided below): MP4, HEVC Main, 8-bit 4:2:0, 3840x1920, tagged BT.2020 primaries, HLG transfer (ARIB STD-B67), BT.2020 non-constant matrix, both in the colr atom and in the SPS VUI. ffprobe -show_format -show_streams (trimmed): [STREAM] index=0 codec_name=hevc profile=Main codec_type=video codec_tag_string=hvc1 width=3840 height=1920 pix_fmt=yuv420p color_range=tv color_space=bt2020nc color_transfer=arib-std-b67 color_primaries=bt2020 r_frame_rate=30000/1001 avg_frame_rate=679200/22663 duration=37.771667 bit_rate=25030607 [SIDE_DATA] side_data_type=Stereo 3D type=2D horizontal_field_of_view=360000/1000 [/SIDE_DATA] [/STREAM] [STREAM] index=1 codec_name=aac profile=LC codec_type=audio codec_tag_string=mp4a sample_fmt=fltp sample_rate=48000 channels=2 channel_layout=stereo duration=37.758333 bit_rate=128176 [/STREAM] [FORMAT] nb_streams=2 format_name=mov,mp4,m4a,3gp,3g2,mj2 duration=37.778333 bit_rate=25160348 TAG:major_brand=mp42 TAG:minor_version=1 TAG:compatible_brands=isommp41mp42 [/FORMAT] AVFoundation's view of the track, from CMFormatDescriptionGetExtension on the loaded video track: primaries=ITU_R_2020 transfer=ITU_R_2100_HLG matrix=ITU_R_2020 bitsPerComponent=8 The playback code, reduced to the essentials: let item = AVPlayerItem(url: fileURL) let looper = AVPlayerLooper(player: player, templateItem: item) // retained player.actionAtItemEnd = .advance let material = VideoMaterial(avPlayer: player) let sphere = ModelEntity( mesh: try equirectSphere(radius: 12), // lat/long grid, normals inward, materials: [material] // UVs (u, 1 - v), inward winding ) sphere.position = [0, 1.5, 0] rootEntity.addChild(sphere) // rootEntity was added in RealityView { } player.play() What we have ruled out in a minimal sample project: Apple's own 360° HLS example (360 Lighthouse, HEVC Main 10, 10-bit, BT.709 SDR) plays with correct colours in the same sphere, same code, same simulator session. Rewriting our file's colr atom to BT.709 (three bytes, no re-encode) is honoured by AVFoundation (the track's CMFormatDescription then reports ITU_R_709_2 for primaries, transfer and matrix) but the tint stays. So the remaining differences between the failing file and Apple's working stream are 8-bit Main vs 10-bit Main 10, HLG/BT.2020 in the bitstream VUI vs BT.709, and local MP4 vs HLS. The minimal sample project (without the video) is available on request. Is this a known limitation of the simulator's VideoMaterial path with 8-bit HLG content, and is there a recommended way to get device-equivalent colour in the simulator? Feedback filed as FB24997147. Here is a sample of the result on the simulator of a cement column, painted white, but rendered purple on simulator:
1
0
3.4k
Oct ’26
Revealed keyboard drifts in progressive immersion, and no immersion style gives windows-in-front + Crown + passthrough cutouts
Environment: Apple Vision Pro, visionOS 27.0.1 (24M372). Magic Keyboard, with Settings › Awareness & Safety › Reveal Keyboards set to Always. Our app puts the user in an opaque virtual room while they work at their real desk, using app windows and Mac Virtual Display. A virtual desk is placed on the real desk. It is world-locked: positioned once from a PlaneAnchor (PlaneDetectionProvider), then a plain entity at fixed ImmersiveSpace coordinates. No AnchorEntity or WorldAnchor is involved. We offer two modes: .mixed, and .progressive for Digital Crown control. Each gives us only half of what desk work needs. 1. The revealed keyboard drifts in progressive immersion (FB25006789) In .progressive, the physical keyboard shown by keyboard awareness does not stay registered with the virtual desk. After the keyboard has been out of view for a few seconds (for example, while looking at a Mac Virtual Display window), it looks "floaty" when you look back: as the head turns, it slides against the desk. Turning right, the keyboard moves left farther than the desk does. What we checked: It happens in .progressive at any Crown amount, and in .full. With identical content in .mixed (no app passthrough cutout, so again only keyboard awareness shows the keyboard), it is much steadier. On 27.0.1, PlaneAnchor and DeviceAnchor coordinateSpace(correction: .rendered) are exactly equal to their .none transforms: 0 mm, 0°, scale 1. That held over 835 per-frame samples with ±50° yaw and up to 36 cm of head movement. So the rendered correction gives the app nothing to compensate with. The app's desk transform is constant while the drift is visible. upperLimbVisibility(.automatic) vs .visible and a .portrait progressive aspect ratio make no difference. Possibly related: https://developer.apple.com/forums/thread/796557 (FB19666209). 2. No immersion style combines what desk work needs (FB25006837) We need, at the same time: windows (our own and Mac Virtual Display) never covered by the room's walls, furniture or trees; the Digital Crown to bring the real surroundings back in; a passthrough cutout over the real desk, and a well-registered keyboard. .mixed: ✓ OcclusionMaterial cutouts reveal passthrough. ✓ The keyboard stays registered. ✗ RealityKit entities can render in front of windows, including Mac Virtual Display and window chrome. breakthroughEffect doesn't cover whole windows or Mac Virtual Display. ✗ The Crown can't adjust immersion. .progressive: ✓ Windows always stay in front of immersive content (as an Apple engineer confirmed in https://developer.apple.com/forums/thread/764556). ✓ The Crown adjusts immersion. ✗ OcclusionMaterial reveals nothing inside the portal, so there is no desk cutout. ✗ The keyboard drifts (issue 1). Because of issue 1 we have switched our default back to .mixed, and lost windows-in-front. Questions Is keyboard awareness in .progressive/.full expected to be registered less accurately than in .mixed? Is there a supported way to keep it registered with world-locked content, or to get the pose at which the system draws it? In .mixed, is there a supported way to keep windows (including Mac Virtual Display) in front of an app's immersive content? Or, in .progressive, a supported way to show passthrough in an app-defined region inside the portal? Any pointers or workarounds are appreciated.
0
0
1.6k
Sep ’26
visionOS 27.0 simulator restarts (backboardd EXC_BREAKPOINT in DRValidateIndices) on MeshResource.generate(from:) for a valid multi-part mesh
Since moving to Xcode 27.0 (27A266a) with the visionOS 27.0 simulator runtime (24M362), generating a mesh with several parts through MeshResource.generate(from: MeshResource.Contents) makes the simulator go black for a couple of seconds and restart. The app does not crash; the simulator's render server does: Thread ... Crashed :: com.apple.CoreRE.ResourceFetchManager-service-queue 0 DirectResource specialized static IndexValidation._validate_neon(_:vertexCount:) 1 DirectResource DRValidateIndices 2 CoreRE re::(anonymous namespace)::validatePrivateData(id<REMeshPayload>, unsigned char const*, unsigned long) 3 CoreRE -[REMultiBufferMeshPayload initWithCoder:] 4 Foundation _decodeObject Environment: MacBook Pro (M1 Pro, 16 GB), macOS 27.0 (26A428), Xcode 27.0 (27A266a), visionOS 27.0 SDK (24M361); failing runtime visionOS 27.0 simulator (24M362); working: the visionOS 26.5 simulator runtime (23O470) under the same Xcode, and an Apple Vision Pro on visionOS 27. What I have established: It reproduces with a fully synthetic mesh: one model, three parts (1330 / 20 / 24 vertices, 9513 / 72 / 120 indices), random positions, normals, UVs and triangle indices. Only the part layout matters. The mesh is valid: every part's indices are within its own vertex count, counts are multiples of three, attribute buffers match. RealityKit's app-side validator agrees and lets it through (it does reject a broken part with REMeshPartDescriptor: index buffer payload range is invalid), then the render server's validator traps on the accepted payload. Single-part meshes of any size, primitives, and compiled .reality scenes are fine. Same mesh, same Xcode: fine on a simulator device created on the 26.5 runtime, fine on a visionOS 27 device. Only the 27.0 simulator runtime traps. FB number: FB24831983. Workarounds so far: a simulator device on the 26.5 runtime, or generating one MeshResource per part. Has anyone seen DRValidateIndices trapping on the 27.0 simulator?
1
0
2.7k
Sep ’26
ToolbarItem(placement: .topBarPinnedTrailing) is not shown if it is the only toolbar element.
If .topBarPinnedTrailing is used for the placement of a ToolbarItem, if this item is the only one in the toolbar then it is not displayed. This .topBarPinnedTrailing appeared in iOS 27.0 to allow a button to be always visible in the toolbar if when there are overflows with many buttons in the toolbar. A toolbar button should always be visible, this behaviour is a bug. It is a great issue on iPhone Duo which has less space for buttons in the toolbars, this attribute was designed to be sure the button using this attribute would always be visible. Bug is also there on Mac Catalyst and visionOS. A feedback was created FB24882292 /// Shows a View with a toolbar with a .topBarPinnedTrailing button. /// If the tool is the only one, it is not displayed. It is designed to be always visible, but it can be missing on the screen. /// If there are one or more additional buttons, then the .topBarPinnedTrailing is well displayed. /// /// Bug reproduced on iPhone 18 Pro Max simulator 27.0, iPhone Duo simulator iOS 27.1, /// Mac Catalyst 27.0, Vision Pro simulator visionOS 27.0 /// > Warning : to test this ContentView, embed it in a NavigationStack. struct ContentView: View { @State private var twoButtons = false var body: some View { VStack { Text("A toolbar should be always visible") .padding() Button { twoButtons.toggle() } label: { Text(twoButtons ? "Remove second tool" : "Add second tool") } } .toolbar { // ‼️ this button is missing if it is the only one. // ‼️ This is due to .topBarPinnedTrailing which makes it disappear if it is alone. ToolbarItem(placement: .topBarPinnedTrailing) { Button { print("topBarPinnedTrailing pressed") } label: { Label { Text("topBarPinnedTrailing") } icon: { Image(systemName: "ladybug.fill") } .labelStyle(.iconOnly) } } if twoButtons { ToolbarItem(placement: .topBarTrailing) { Button { //Barre d'icône ajouter une scène print("topBarLeading pressed") twoButtons = false } label: { Label { Text("topBarLeading") } icon: { Image(systemName: "minus") } .labelStyle(.iconOnly) } } } } } }
3
0
712
Sep ’26
Why Does Apple Vision Pro Still Lack 3DoF / Head-Locked Display Support After Nearly 3 Years?
Why is this still not supported on Apple Vision Pro? For a premium device that has been on the market for nearly three years and costs thousands of dollars, it's difficult to understand why Apple still hasn't provided a basic option to disable spatial anchoring when it isn't needed. This limitation becomes particularly frustrating in moving environments such as cars, buses, trains, airplanes, and cruise ships. Users have repeatedly reported issues with virtual windows drifting, shifting, becoming unstable, or losing tracking entirely. Apple introduced Travel Mode to address some of these challenges, but reports of tracking problems persist, and certain environments remain unsupported. Why should something as simple as watching a movie or using a virtual monitor require constant 6DoF spatial tracking? Not every use case requires a fully spatial experience. Sometimes users simply want a stable virtual screen without the operating system constantly attempting to anchor it to their surroundings. At a minimum, visionOS should provide three display options: 6DoF Spatial Mode: The existing experience, with windows anchored to the physical environment. 3DoF Rotation-Only Mode: Virtual screens respond to head rotation without relying on positional tracking. Head-Locked Mode: A screen remains positioned directly in front of the user without requiring environmental anchoring. Other headsets have offered simplified tracking options for years. It's disappointing that a product at this price point still lacks comparable flexibility. Users shouldn't have to struggle with spatial tracking just to watch a movie, browse Safari, or use Mac Virtual Display, particularly when the hardware is capable of delivering an otherwise excellent viewing experience. Apple Vision Pro has been available for nearly three years. Why is such a fundamental display option still missing? Is there an actual technical limitation preventing Apple from implementing this, or has it simply not been prioritized? At this stage in the product's lifecycle, this shouldn't remain an unresolved limitation. Apple should provide users with greater control over display tracking rather than forcing every use case into the same spatial computing model. I'd like to hear whether Apple has any plans to address this in future visionOS releases.
Replies
0
Boosts
0
Views
12
Activity
12m
Eye tracking data access for researchers
Hi, Is there a way for researchers to get or request access to eye tracking data from the Apple Vision Pro within the boundaries of the app to be developed? I'm currently involved in research where access to eye tracking data would be beneficial (I'm aware of many existing discussions about this, but I was still wondering if there might be an option, particularly for research labs.) Thank you for your answer.
Replies
3
Boosts
1
Views
900
Activity
3h
FoveatedStreamingSession headset and controller location smoothing, Velocity for OpenXR
Hi, We build a PC VR streaming app for Apple Vision Pro. It has two VR paths: our own stream (our transport, VideoToolbox decode, our compositor layer) and FoveatedStreamingSession with CloudXR, which we use for titles that benefit from foveation. On our own path we filter the head and controller poses and send velocity. Getting both right took a lot of on-device tuning, and they made a large difference to comfort and to physics-based games. On the FoveatedStreamingSession path, the pose path from tracking to the endpoint runs inside the system, so an app has no way to apply, adjust or even inspect either one. We would like to ask for that control. 1. Pose smoothing for the head and controllers What we measured on device: Vision Pro tracking picks up very small, heartbeat-rate motion (around 1.2 Hz, millimetre scale). Locally that is invisible. After a streaming round trip it comes back as a visible world shake, because the remote frame is rendered at a pose about 50 ms old and reprojection has to cover the difference. Our A/B tests showed the tremor is largely rotational. Reprojection did not fully absorb it at our latency: turning off only the rotation filter brought the shake back right away. What fixed it for us: a One-Euro filter on the head pose, applied on the client before the pose is sent, with the frame anchored at the exact pose it was rendered with, so reprojection still covers the gap to the real head at no added latency. The values we settled on after live tuning: ComponentMin cutoffBetaPosition0.1 Hz12Rotation0.5 Hz12The right values depended on the content, the user and the end-to-end latency, which is why we are asking for control rather than one fixed default. Controllers need their own settings, because the right balance between lag and steadiness differs between fast games and precise work such as aiming or drawing. What we would like on FoveatedStreamingSession: Separate smoothing settings for the head and for tracked accessories, with position and rotation set independently. A choice of system default, off, or custom parameters. A One-Euro style minimum cutoff plus speed coefficient would cover our case. Documentation of what filtering, if any, the system applies today, so apps don't filter on top of it. 2. Velocity for the head and controllers Physics titles (throws, grab-and-pull, swings) take their motion from the linear and angular velocity in the OpenXR space velocity (XrSpaceVelocity), not from changes in position. If velocity arrives as zero, throws drop at the user's feet. If it arrives noisy, the PC runtime's own extrapolation to photon time amplifies the noise, and the controllers shake at rest. We hit both cases on our own path. What fixed them: Pass the accessory anchor's velocity through. Set the pose time offset from the client's own prediction, so the PC side does not predict twice. Apply a small deadband (about 0.05 m/s linear and 10°/s angular, matching common open-source streamers). What we would like on FoveatedStreamingSession: Documentation of whether linear and angular velocity are sent to the endpoint for the head and for tracked accessories, and in which reference frame. We could not find a frame statement for AccessoryAnchor velocity in the docs or the SDK interface. Game title testing appears as though these values not being sent. App control over velocity: on/off, a gain, a deadband, and a filter (or the same smoothing settings as above). The prediction offset the session uses when it sends poses, so apps and endpoints can avoid predicting twice. 3. A possible API shape (only a sketch to try to convey the requested need) extension FoveatedStreamingSession { struct PoseFiltering: Sendable, Equatable { static var systemDefault: PoseFiltering { get } static var off: PoseFiltering { get } static func oneEuro(positionMinCutoff: Double, positionBeta: Double, rotationMinCutoff: Double, rotationBeta: Double) -> PoseFiltering } struct VelocityReporting: Sendable, Equatable { var isEnabled: Bool var linearGain: Float var angularGain: Float var linearDeadband: Float // m/s var angularDeadband: Float // rad/s var filtering: PoseFiltering } var headPoseFiltering: PoseFiltering { get set } var accessoryPoseFiltering: PoseFiltering { get set } var accessoryVelocityReporting: VelocityReporting { get set } var posePredictionInterval: TimeInterval { get } }Being able to change these during a session (not only before connect) would let users tune them from the app's own settings while wearing the headset, which is how we found our values.
Replies
2
Boosts
0
Views
386
Activity
18h
Built-in environments in the visionOS simulator
Should Environments like White Sands and Mount Hood work in the visionOS simulator? In a fresh visionOS 27.2 simulator, selecting an Environment from Home View does nothing. I saw the same behavior with visionOS 27.0. After selecting the Moon, Control Center still shows White Sands. Moving the immersion slider in Control Center changes the position of Device Hub’s sidebar slider, but that slider remains disabled and no environment appears. This happens before installing or running my app. The simulated room scenes work. The simulator logs show that the environment catalog downloads successfully, but the scenic assets are marked state=notPresent. Trying to increase immersion produces: Default environment identifier Wolf is no longer available on disk. Resetting to system default. Invalid environment Wolf requested, it does not exist or is not in correct state (Unavailable). Failed to load environment: Error Domain=RealityEnvironmentError Code=407 "Environment action not performed." (Wolf is the internal identifier for White Sands.) Is this an expected simulator limitation, a known issue, or is there a way to download and enable these environments?
Replies
1
Boosts
0
Views
337
Activity
1d
Can visionOS Performance Trace measure RealityKit frame deadlines without Instruments?
We have an immersive RealityView/RealityKit scene on Vision Pro and want to measure renderer frame deadlines, misses, and per-frame CPU/GPU timing without Instruments. Apple's “Performance Trace: visionOS” instructions describe collecting a sysdiagnose for Feedback after installing a temporary logging profile and restarting. We could not find a supported local readout or field map in those instructions. Does the archive contain attributable RealityKit renderer frame deadlines, completion or miss events, and per-frame CPU/GPU measurements? If so, what supported tool, command, or export can decode them without Instruments or xctrace? Which archive member and fields contain the measurements, and what are their clock, units, and app/scene/layer attribution? A small redacted decoded example would help us verify the method before another headset run. If the archive does not provide those measurements, is there another Apple-supported method for the existing RealityKit renderer?
Replies
2
Boosts
0
Views
408
Activity
6d
Presenting the system share sheet from a full ImmersiveSpace on visionOS 26
We are building a visionOS 26 app (deployment target visionOS 26.0). Inside a full immersive space, the user takes a spatial photo. The photo is shown on a RealityView attachment. We need the system share sheet( AirDrop, Messages, Mail, Copy, Save Image, and the item preview with Done) to appear when the user taps Share on that attachment. The immersive space is: ImmersiveSpace(id: "ImmersiveView") { ImmersiveView() } .immersionStyle(selection: $panoImageView, in: .full) .upperLimbVisibility(.visible) The review UI is a RealityView attachment, not a window: Attachment(id: "panoramaFrameCaptureReview") { PanoramaFrameCaptureReviewView(model: frameCapture) { guard let path = frameCapture.shareURL?.path else { return } dismissWindow(id: "PanoramaPhotoShare") Task { @MainActor in try? await Task.sleep(nanoseconds: 180_000_000) openWindow(id: "PanoramaPhotoShare", value: path) } } } The shared item is a stereo HEIC written with Image I/O (kCGImagePropertyGroupTypeStereoPair, left/right images, HEIF camera extrinsics and SimplifiedPinhole intrinsics). The same data displays correctly with ImagePresentationComponent and saves to Photos as a spatial photo. Share is the only part that fails. Attempt 1. ShareLink on the attachment Tapping Share does nothing. On entry to the immersive space the system logs: Presentations are not currently supported in Immersive contexts. Attempt 2. UIActivityViewController from the attachment’s hosting controller let activity = UIActivityViewController(activityItems: [fileURL], applicationActivities: nil) var presenter: UIViewController = self while let parent = presenter.parent { presenter = parent } presenter.present(activity, animated: true) presenter is UIHostingController<RootView>. The console then says: Skipping popover presentations transition, missing window or scene for <UIActivityViewController>. Failed to request default share mode for fileURL:...heic error:Error Domain=NSOSStatusErrorDomain Code=-10814 No share UI appears. presentedViewController is non-nil, so a “did it present?” check does not detect the failure. Attempt 3. A real WindowGroup whose only job is to present UIActivityViewController WindowGroup(id: "PanoramaPhotoShare", for: String.self) { path in if let path = path.wrappedValue { PanoramaPhotoShareWindow(path: path) } } .windowStyle(.plain) .defaultSize(width: 20, height: 20) .defaultWindowPlacement { _, _ in WindowPlacement(.utilityPanel) } struct PanoramaPhotoShareWindow: View { let path: String @Environment(.dismissWindow) private var dismissWindow var body: some View { PanoramaPhotoSharePresenter(url: URL(fileURLWithPath: path)) { dismissWindow(id: "PanoramaPhotoShare") } .frame(width: 8, height: 8) .background(.clear) } } final class PanoramaPhotoShareController: UIViewController { override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) guard view.window != nil, let url else { return } let activity = UIActivityViewController(activityItems: [url], applicationActivities: nil) activity.completionWithItemsHandler = { _, _, _, _ in self.onFinish?() } present(activity, animated: true) } } Tapping Share opens this window and the app crashes immediately. We removed the feature so users are not crashed. An earlier build that also put a ShareLink in that window logged: Attempt to present <UIActivityViewController> on <UIHostingController<...PanoramaPhotoShareWindow...>> which is already presenting <UIActivityViewController>. Question What is the supported way, on visionOS 26, to present the system share sheet while a .full ImmersiveSpace stays open? If a window is required, how should that window present the sheet without crashing, and without showing a second window that only contains another Share button?
Replies
1
Boosts
0
Views
756
Activity
6d
Locked in Syndrome
Hi all, I have a friend who has 'locked in syndrome' for three years. He only has movement of his eyes. I realised that there are ways Pete can communicate using 'eye gaze' software, but I do believe that the future is Vision Pro as he will not only be able to move towards communicating with others, but it will help him experience a world outside of his hospital bed again in 3d. Here are the things we need to overcome to help him on his way... Pete wouldn't be able to use the Vision Pro headset by himself, so I would need access in the same way that people in the Apple Store have access when demoing the headset to people. Pete has movement of his eyes, but not his head so there would need to be adjustments. It would also be good to secure the headset more, so that if Pete sneezes it doesn't need resetting. I can imagine that Apple would be keen on working on these things because not only do people like Pete need an improved experience of life on this planet, but there is a big market of people such as Pete out there. So if anyone knows how to move forward with any of these things, or who I can get in contact with at Apple HQ, I would be keen to learn. Thanks.
Replies
2
Boosts
0
Views
1.1k
Activity
6d
visionOS 27 beta 4 (24M5326g) stuck: update fails with MSU 806 MADownloadDaemonNotReady, all Apple services hang
My Apple Vision Pro is still on visionOS 27.0 beta 4 (24M5326g) and can't update or use any Apple service. Safari works. Software Update offers visionOS 27.2 (24N6120) but stays at "Update Requested". The OTAUpdate log shows: MobileSoftwareUpdateErrorDomain 806 "Failed to download update brain asset, MADownLoadResult:MADownloadDaemonNotReady". App Store can't connect, Apple TV and Games say a network connection is required, iCloud doesn't work, and Media & Purchases hangs at "Signing in to Apple Media Services". Other devices on the same network work normally. Reset All Settings didn't help. devicectl device sysdiagnose fails with CoreDeviceCLISupport.DiagnoseError 0. I don't have a Developer Strap. Has anyone recovered a Vision Pro stuck on an early beta like this without one? Filed as FB25386556.
Replies
0
Boosts
0
Views
438
Activity
1w
Reality kit Entities Appearing to Lag in a Full or Progressive Style Immersive Space When Opened with Environment Turned On
PLATFORM AND VERSION Vision OS Development environment: Xcode 16.2, macOS 15.2 Run-time configuration: visionOS 2.3 (On Real Device, Not simulator) Please someone confirm I'm not crazy and this issue is actually out of my control. Spent hours trying to fix my app and running profiles because thought it was an issue related to my apps performance. Finally considered chance it was issue with API itself and made sample app to isolate problem, and it still existed in it. The issue is when a model entity moves around in a full space that was launched when the system environment immersion was turned up before opening it, the entities looks very choppy as they move around. If you take off the headset while still in the space, and put it back on, this fixes it and then they move smoothly as they should. In addition, you can also leave the space, and then turn the system environment immersion all the way down before launching the full space again, this will also make the entity moves smoothly as it should. If you launch a mixed immersion style instead of a full immersion style, this issue never arrises. The issue only arrises if you launch the space with either a full style, or progressive style, while the system immersion level is turned on. STEPS TO REPRODUCE https://github.com/nathan-707/ChoppyEntitySample Open my test project, its a small, modified vision os project template that shows it clearly. otherwise: create immersive space with either full or progressive immersion style. setup a entity in kinematic mode, apply a velocity to it to make it pass over your head when the space appears. if you opened the space while the Apple Vision Pros system environment was turned up, the entity will look choppy. if you take the headset off while in the same space, and put it back on, it will fix the issue and it will look smooth. alternatively if you open the space with the system immersion environment all the way down, you will also not run into the issue. Again, issue also does not happen if space launched is in mixed style.
Replies
2
Boosts
1
Views
1.1k
Activity
1w
Immersive space sometimes opens with a broken world origin (world anchors fail with error 200, recenter times out)
Hi all, We're seeing an intermittent issue in a native SwiftUI + RealityKit app on Vision Pro (visionOS 27.0.1, still there on 27.2). When we open a mixed ImmersiveSpace, roughly 1 in 10–30 opens, everything ends up offset from where it should be. Sometimes it's 50 cm, sometimes several meters, sometimes it's rotated. Holding the Digital Crown to recenter fixes it immediately. We are attaching things to the camera, like we have a window following the user and that is offset in these rare cases which makes the app not usable. In the device logs, a good open looks like this: backboardd (recenter) Setting new world origin with anchor ... backboardd ARWorldTrackingProcessor: Added world anchor ... successfully (x4) backboardd (recenter) Finished (error: (null)) setting set new world origin ... A bad open looks like this: backboardd (recenter) Setting new world origin with anchor ... arkitd SLAMAnchorUpdate: Failed to add anchor request ... NSPOSIXErrorDomain Code=4 backboardd ARWorldTrackingProcessor: Failed to add world anchor ... com.apple.arkit Code=200 "Adding an object failed." (x4) backboardd (recenter) timeout exceeded. Forcing fade in. Like whenever the bad state occurs it is because adding a world anchor seems to fail. I haven't tested with visionOS26 but the same app didnt run into that problem ever. So the system seems to fail adding its own origin anchors, gives up after 2 seconds and shows the space anyway. Has anyone else run into this? And is there any way to detect it from the app or trigger a recenter in code? Thanks!
Replies
2
Boosts
0
Views
661
Activity
1w
High fidelity gaming on Apple Vision Pro
I'm looking to find the best setup for a game on AVP that gives the best quality environment with gameplay but there seems to be a mix of possible solutions each with their own drawback. My ideal scenario is a high fidelity room/environment while making use of the PS VR2 Sense controllers to track the user's hands and give them more inputs via the controllers. Eg they hold a weapon tracked to the controllers with the buttons able to use the weapon, shooting and hitting enemies in the room. I want to aim more for highest qualtiy gaming than cartoony so opted for foveated streaming from the Mac as my ideal, but this seems limited to only having some base inputs from the hands and no controller inputs for hand and positional tracking from the controller movement (as they need the data from the Vision Pro camera but the game is technically running on the Mac and streamed to the VP) The only real solution for what I want here is to go via RealityKit as a native Vision Pro app but this reduces the game quality I had in mind as the entire thing is now rendering on the VP instead of the Mac. Am I missing something here or is this a real limitation today? To reitarate I'm looking for: highest fidelity game quality (rendering as much as possible on the Mac) tracking the VR2 Sense controller's positions (to track a weapon) in 3D space
Replies
1
Boosts
0
Views
1.1k
Activity
2w
Foveated streaming QR code Authentication alternative
I was wondering whether there is a way to authenticate a CloudXR connection without using a QR code in a local deployment scenario. If the server is running in a headless environment, QR code-based authentication would not be practical. I reviewed the documentation but could not find any information on alternative authentication methods. Is a non-QR authentication workflow similar to the remote case supported?
Replies
2
Boosts
0
Views
1.5k
Activity
3w
Metal Compositor Service & Persona (VisionOS)
Hello, I'm currently trying to make a collaborative app. But it just works only on Reality View, when I tried to use Compositor Layer like below, the personas disappeared. ImmersiveSpace(id: "ImmersiveSpace-Metal") { CompositorLayer(configuration: MetalLayerConfiguration()) { layerRenderer in SpatialRenderer_InitAndRun(layerRenderer) } } Is there any potential solution too see Personas in Metal view? Thanks in advance!
Replies
3
Boosts
0
Views
2k
Activity
3w
Main Camera development request blocked by Individual-to-Organization conversion
We are developing MadnessBot as a business-only Vision Pro automotive inspection app for professional mechanics and repair shops, intended for private business distribution. Main Camera access is essential for analyzing the vehicle and component in front of the technician. A native development app is running on our physical headset, and chat plus OBDLink CX diagnostics have been tested. Our existing Apple Developer Program membership is enrolled as Individual. We contacted Developer Support on October 6, 2026, with a follow-up on October 9, for assistance converting it to Organization. The conversion form asks for the type of tax ID historically associated with the Individual membership; the Account Holder does not know that record and has asked Support to verify it before selecting an answer. The enterprise API request form remains inaccessible until organization enrollment is confirmed. We have not submitted a camera entitlement request yet. Our planned initial request is Development Only Main Camera access for registered test devices. Feedback reference: FB25132939. Could the Enterprise APIs for visionOS team help route this prerequisite blocker to membership support, or advise the correct escalation path so we can complete conversion and apply for Development Only access?
Replies
0
Boosts
0
Views
1.6k
Activity
Oct ’26
MFMailComposeViewController in visionOS does not have a cancel button
When i use the MFMailComposeViewController in visionOS, there is no cancel button for the controller. The button at the bottom closes the app. Is anyone else experiencing this? if([MFMailComposeViewController canSendMail]) { MFMailComposeViewController* controller = [[MFMailComposeViewController alloc] init]; controller.mailComposeDelegate = (id <MFMailComposeViewControllerDelegate>)view; [controller setToRecipients:toAddresses]; [controller setSubject:subject]; [controller setMessageBody:body isHTML:isHtml]; [view presentViewController:controller animated:YES completion:nil]; }
Replies
15
Boosts
1
Views
2.1k
Activity
Oct ’26
RealityKit VideoMaterial renders 8-bit HEVC HLG/BT.2020 360° video with a purple tint in the visionOS Simulator (device is fine)
We paint a looping 360° video on the inside of a sphere with VideoMaterial(avPlayer:): an AVQueuePlayer plus AVPlayerLooper, a ModelEntity with an inward-facing equirectangular mesh, inside a .mixed ImmersiveSpace. No shaders, no VideoPlayerComponent. We could not find an official Apple sample that puts a VideoMaterial on a 360° sphere; this is the plain pattern from the VideoMaterial(avPlayer:) reference and the one used in threads like 734081. On Apple Vision Pro hardware the video renders correctly. In the visionOS Simulator (27.0, 26.5 and earlier 26.x, Xcode 27.0) the whole frame has a strong purple/magenta cast. Audio and timing are fine. The video (which we cannot share, so here is its metadata, image sample of issue on simulator provided below): MP4, HEVC Main, 8-bit 4:2:0, 3840x1920, tagged BT.2020 primaries, HLG transfer (ARIB STD-B67), BT.2020 non-constant matrix, both in the colr atom and in the SPS VUI. ffprobe -show_format -show_streams (trimmed): [STREAM] index=0 codec_name=hevc profile=Main codec_type=video codec_tag_string=hvc1 width=3840 height=1920 pix_fmt=yuv420p color_range=tv color_space=bt2020nc color_transfer=arib-std-b67 color_primaries=bt2020 r_frame_rate=30000/1001 avg_frame_rate=679200/22663 duration=37.771667 bit_rate=25030607 [SIDE_DATA] side_data_type=Stereo 3D type=2D horizontal_field_of_view=360000/1000 [/SIDE_DATA] [/STREAM] [STREAM] index=1 codec_name=aac profile=LC codec_type=audio codec_tag_string=mp4a sample_fmt=fltp sample_rate=48000 channels=2 channel_layout=stereo duration=37.758333 bit_rate=128176 [/STREAM] [FORMAT] nb_streams=2 format_name=mov,mp4,m4a,3gp,3g2,mj2 duration=37.778333 bit_rate=25160348 TAG:major_brand=mp42 TAG:minor_version=1 TAG:compatible_brands=isommp41mp42 [/FORMAT] AVFoundation's view of the track, from CMFormatDescriptionGetExtension on the loaded video track: primaries=ITU_R_2020 transfer=ITU_R_2100_HLG matrix=ITU_R_2020 bitsPerComponent=8 The playback code, reduced to the essentials: let item = AVPlayerItem(url: fileURL) let looper = AVPlayerLooper(player: player, templateItem: item) // retained player.actionAtItemEnd = .advance let material = VideoMaterial(avPlayer: player) let sphere = ModelEntity( mesh: try equirectSphere(radius: 12), // lat/long grid, normals inward, materials: [material] // UVs (u, 1 - v), inward winding ) sphere.position = [0, 1.5, 0] rootEntity.addChild(sphere) // rootEntity was added in RealityView { } player.play() What we have ruled out in a minimal sample project: Apple's own 360° HLS example (360 Lighthouse, HEVC Main 10, 10-bit, BT.709 SDR) plays with correct colours in the same sphere, same code, same simulator session. Rewriting our file's colr atom to BT.709 (three bytes, no re-encode) is honoured by AVFoundation (the track's CMFormatDescription then reports ITU_R_709_2 for primaries, transfer and matrix) but the tint stays. So the remaining differences between the failing file and Apple's working stream are 8-bit Main vs 10-bit Main 10, HLG/BT.2020 in the bitstream VUI vs BT.709, and local MP4 vs HLS. The minimal sample project (without the video) is available on request. Is this a known limitation of the simulator's VideoMaterial path with 8-bit HLG content, and is there a recommended way to get device-equivalent colour in the simulator? Feedback filed as FB24997147. Here is a sample of the result on the simulator of a cement column, painted white, but rendered purple on simulator:
Replies
1
Boosts
0
Views
3.4k
Activity
Oct ’26
Revealed keyboard drifts in progressive immersion, and no immersion style gives windows-in-front + Crown + passthrough cutouts
Environment: Apple Vision Pro, visionOS 27.0.1 (24M372). Magic Keyboard, with Settings › Awareness & Safety › Reveal Keyboards set to Always. Our app puts the user in an opaque virtual room while they work at their real desk, using app windows and Mac Virtual Display. A virtual desk is placed on the real desk. It is world-locked: positioned once from a PlaneAnchor (PlaneDetectionProvider), then a plain entity at fixed ImmersiveSpace coordinates. No AnchorEntity or WorldAnchor is involved. We offer two modes: .mixed, and .progressive for Digital Crown control. Each gives us only half of what desk work needs. 1. The revealed keyboard drifts in progressive immersion (FB25006789) In .progressive, the physical keyboard shown by keyboard awareness does not stay registered with the virtual desk. After the keyboard has been out of view for a few seconds (for example, while looking at a Mac Virtual Display window), it looks "floaty" when you look back: as the head turns, it slides against the desk. Turning right, the keyboard moves left farther than the desk does. What we checked: It happens in .progressive at any Crown amount, and in .full. With identical content in .mixed (no app passthrough cutout, so again only keyboard awareness shows the keyboard), it is much steadier. On 27.0.1, PlaneAnchor and DeviceAnchor coordinateSpace(correction: .rendered) are exactly equal to their .none transforms: 0 mm, 0°, scale 1. That held over 835 per-frame samples with ±50° yaw and up to 36 cm of head movement. So the rendered correction gives the app nothing to compensate with. The app's desk transform is constant while the drift is visible. upperLimbVisibility(.automatic) vs .visible and a .portrait progressive aspect ratio make no difference. Possibly related: https://developer.apple.com/forums/thread/796557 (FB19666209). 2. No immersion style combines what desk work needs (FB25006837) We need, at the same time: windows (our own and Mac Virtual Display) never covered by the room's walls, furniture or trees; the Digital Crown to bring the real surroundings back in; a passthrough cutout over the real desk, and a well-registered keyboard. .mixed: ✓ OcclusionMaterial cutouts reveal passthrough. ✓ The keyboard stays registered. ✗ RealityKit entities can render in front of windows, including Mac Virtual Display and window chrome. breakthroughEffect doesn't cover whole windows or Mac Virtual Display. ✗ The Crown can't adjust immersion. .progressive: ✓ Windows always stay in front of immersive content (as an Apple engineer confirmed in https://developer.apple.com/forums/thread/764556). ✓ The Crown adjusts immersion. ✗ OcclusionMaterial reveals nothing inside the portal, so there is no desk cutout. ✗ The keyboard drifts (issue 1). Because of issue 1 we have switched our default back to .mixed, and lost windows-in-front. Questions Is keyboard awareness in .progressive/.full expected to be registered less accurately than in .mixed? Is there a supported way to keep it registered with world-locked content, or to get the pose at which the system draws it? In .mixed, is there a supported way to keep windows (including Mac Virtual Display) in front of an app's immersive content? Or, in .progressive, a supported way to show passthrough in an app-defined region inside the portal? Any pointers or workarounds are appreciated.
Replies
0
Boosts
0
Views
1.6k
Activity
Sep ’26
visionOS 27.0 simulator restarts (backboardd EXC_BREAKPOINT in DRValidateIndices) on MeshResource.generate(from:) for a valid multi-part mesh
Since moving to Xcode 27.0 (27A266a) with the visionOS 27.0 simulator runtime (24M362), generating a mesh with several parts through MeshResource.generate(from: MeshResource.Contents) makes the simulator go black for a couple of seconds and restart. The app does not crash; the simulator's render server does: Thread ... Crashed :: com.apple.CoreRE.ResourceFetchManager-service-queue 0 DirectResource specialized static IndexValidation._validate_neon(_:vertexCount:) 1 DirectResource DRValidateIndices 2 CoreRE re::(anonymous namespace)::validatePrivateData(id<REMeshPayload>, unsigned char const*, unsigned long) 3 CoreRE -[REMultiBufferMeshPayload initWithCoder:] 4 Foundation _decodeObject Environment: MacBook Pro (M1 Pro, 16 GB), macOS 27.0 (26A428), Xcode 27.0 (27A266a), visionOS 27.0 SDK (24M361); failing runtime visionOS 27.0 simulator (24M362); working: the visionOS 26.5 simulator runtime (23O470) under the same Xcode, and an Apple Vision Pro on visionOS 27. What I have established: It reproduces with a fully synthetic mesh: one model, three parts (1330 / 20 / 24 vertices, 9513 / 72 / 120 indices), random positions, normals, UVs and triangle indices. Only the part layout matters. The mesh is valid: every part's indices are within its own vertex count, counts are multiples of three, attribute buffers match. RealityKit's app-side validator agrees and lets it through (it does reject a broken part with REMeshPartDescriptor: index buffer payload range is invalid), then the render server's validator traps on the accepted payload. Single-part meshes of any size, primitives, and compiled .reality scenes are fine. Same mesh, same Xcode: fine on a simulator device created on the 26.5 runtime, fine on a visionOS 27 device. Only the 27.0 simulator runtime traps. FB number: FB24831983. Workarounds so far: a simulator device on the 26.5 runtime, or generating one MeshResource per part. Has anyone seen DRValidateIndices trapping on the 27.0 simulator?
Replies
1
Boosts
0
Views
2.7k
Activity
Sep ’26
ToolbarItem(placement: .topBarPinnedTrailing) is not shown if it is the only toolbar element.
If .topBarPinnedTrailing is used for the placement of a ToolbarItem, if this item is the only one in the toolbar then it is not displayed. This .topBarPinnedTrailing appeared in iOS 27.0 to allow a button to be always visible in the toolbar if when there are overflows with many buttons in the toolbar. A toolbar button should always be visible, this behaviour is a bug. It is a great issue on iPhone Duo which has less space for buttons in the toolbars, this attribute was designed to be sure the button using this attribute would always be visible. Bug is also there on Mac Catalyst and visionOS. A feedback was created FB24882292 /// Shows a View with a toolbar with a .topBarPinnedTrailing button. /// If the tool is the only one, it is not displayed. It is designed to be always visible, but it can be missing on the screen. /// If there are one or more additional buttons, then the .topBarPinnedTrailing is well displayed. /// /// Bug reproduced on iPhone 18 Pro Max simulator 27.0, iPhone Duo simulator iOS 27.1, /// Mac Catalyst 27.0, Vision Pro simulator visionOS 27.0 /// > Warning : to test this ContentView, embed it in a NavigationStack. struct ContentView: View { @State private var twoButtons = false var body: some View { VStack { Text("A toolbar should be always visible") .padding() Button { twoButtons.toggle() } label: { Text(twoButtons ? "Remove second tool" : "Add second tool") } } .toolbar { // ‼️ this button is missing if it is the only one. // ‼️ This is due to .topBarPinnedTrailing which makes it disappear if it is alone. ToolbarItem(placement: .topBarPinnedTrailing) { Button { print("topBarPinnedTrailing pressed") } label: { Label { Text("topBarPinnedTrailing") } icon: { Image(systemName: "ladybug.fill") } .labelStyle(.iconOnly) } } if twoButtons { ToolbarItem(placement: .topBarTrailing) { Button { //Barre d'icône ajouter une scène print("topBarLeading pressed") twoButtons = false } label: { Label { Text("topBarLeading") } icon: { Image(systemName: "minus") } .labelStyle(.iconOnly) } } } } } }
Replies
3
Boosts
0
Views
712
Activity
Sep ’26