Discuss Spatial Computing on Apple Platforms.

Posts under General subtopic

Post

Replies

Boosts

Views

Activity

Adding a ManipulationComponent detaches the whole RealityView content hierarchy on visionOS 27
On visionOS 27 (27.0 Seed 4, 24M5326g), adding a ManipulationComponent to a single entity makes RealityKit remove the RealityView's ENTIRE content hierarchy from the scene and re-add it about 30ms later. Not just the manipulated entity — everything. Same app binary on visionOS 26: never happens. FB24092291. Bisected on the same build and device: two entities, neither with manipulation -> no detach add one entity with a ManipulationComponent -> detach, every time same entity, manipulation swapped for my own drag/rotate/ scale gesture handling -> no detach Everything else is identical between the last two cases — same entity, same collision shape, same InputTargetComponent, same ViewAttachmentComponent, same scene, same view hierarchy. The only variable is whether the component is installed. Setup: an immersive space containing a SwiftUI RealityView. One root entity added to the RealityViewContent in the make closure; all app content built as its descendants. The detach is brief but not harmless: every entity in the hierarchy gets SceneEvents.WillRemoveEntity and then DidAddEntity, so anything keyed to those events runs a full teardown and re-add for content that was never meant to go anywhere. In my app that cascade is what makes the scene visibly empty and rebuild. Nothing in my code removes it. Stack captured from a WillRemoveEntity subscription on the root — frame 0 is my callback, everything above it is framework: SwiftUI (AttributeGraph StatefulRule.withObservation ...) -> RealityFoundation -> CoreRE -> entity removal Ruled out before landing on the component: make runs exactly once, the root re-enters a scene with the same ObjectIdentifier (not a re-host), the hosting controller is never deallocated, there is exactly one RealityViewContent.add(_:) in the whole app, and with Self._printChanges() in the view's body the detach happens in an update pass where the body is not re-evaluated at all. Also ruled out: transient overlay UI (suppressed entirely, still detached) and entity count. Workaround if this is biting you: skip ManipulationComponent on 27 and handle drag/rotate/scale yourself. That is what I am doing for now. If you are debugging something similar: SceneEvents.WillRemoveEntity also fires when an entity merely leaves a scene, so a teardown-looking log is not proof anything was destroyed. Check whether make ran twice and whether the scene identity changed before suspecting your own code.
1
1
67
16h
How do I create Enterprise.license file?
Hello, I did get an email that I now have access to the Enterprise APIs and I should create the license file. However, I can't figure out a way to create the license file. I did go check out that button, it did have the buttons to "renew" the licenses I got a while ago (via email). but no way to create new ones. and I am enrolled in the "Apple Developer Program as an organization " Where can I create Enterprise.license file?
3
0
1.1k
3d
Technical specifications for a macOS immersive 180° video application (Apple Vision Pro)
Hello, I am not a developer, and I am programming a macOS application in Xcode with the help of Claude (Anthropic). Claude writes the code for me, but I need your help regarding the technical specifications. I am not trying to understand every technical detail, nor am I looking for someone to write the code for me. My goal is to obtain the most accurate technical information possible so that I can pass it directly to Claude, who will then generate the corresponding code in Xcode. This application is a personal project. It is not intended to be published on the App Store. Its sole purpose is to automatically process my own videos recorded with two DJI Action 6 cameras. It requires no user settings : the optimal parameters are defined by default within the application, and it directly outputs the final video file. My objective is to create an application that takes as input the two videos from the DJI Action 6 cameras mounted on a rig, and then produces a file that delivers a 180° immersive video with the highest possible quality. Claude has already conducted research in Apple's documentation as well as various online resources to determine the correct output format, encoding parameters, and necessary constraints. Despite this, the current result is not satisfactory. Currently, my application does not directly generate a file in the Apple Immersive format. Instead, it produces a stereoscopic video file containing both the left and right views side-by-side. I then use Moonlink on my Mac Studio and on my Apple Vision Pro, to play this video (the video is on the Mac and sent to the vision pro, wich works perfectly fine on some videos I have found on internet). The file is correctly recognized and can be opened, but the result presents two major issues: Playback is extremely choppy (about one second of playback followed by several seconds of freezing); The image is pinched at the top and bottom, which likely indicates an issue with the format, projection, or how the player interprets the file. I have no preference regarding the final format. If the best solution is to directly generate a file in the Apple Immersive format compatible with the Apple Vision Pro, that works for me. If, on the other hand, the best approach is to produce a high-quality stereoscopic video with the left and right views side-by-side, which can then be interpreted by a player application on the Apple Vision Pro or potentially other headsets, that works for me as well. My sole objective is to obtain: The best possible image quality (even though I am aware it will not match the quality produced by a Blackmagic URSA Cine Immersive camera); Perfectly smooth playback, without any stuttering or freezing; A correctly displayed 180° immersive video. Here are the specifications of my source videos: Two DJI Action 6 cameras. Interpupillary/Inter-axial distance (between optical centers): 6.5 cm. FOV Boost lens mounted on each camera (182° coverage). Video mode: 4K Custom 3840 \times 3840 at 60 fps. Color profile: D-Log M. Color conversion planned in the application via a DJI D-Log M to Rec.709 LUT in .cube format (.cube provided to the app). In FOV Boost mode, DJI enforces Electronic Image Stabilization (EIS) and removes gyroscope data from the MP4 files. Stereoscopic alignment is therefore performed via image analysis within the application (using ORB feature detection). With no FOV Boost I do not reach 180° with is the target. Fixed aperture. Both cameras are triggered simultaneously using the DJI GPS remote control. Fine synchronization is subsequently performed in the application via audio cross-correlation. My question is therefore the following : What exactly are the output specifications that my application should produce (format, codec, resolution, projection, metadata, encoding parameters, and any other technical constraints) in order to achieve the best possible result for a 180° immersive video on the Apple Vision Pro? I will pass all this information directly to Claude so that he can generate the corresponding code in Xcode. Therefore, I am not looking for a code example, but rather the technical specifications to follow. I would also welcome any advice or recommendations that a specialist in Vision Pro, immersive video, or Apple technologies might deem useful to improve the quality of the result or simplify my approach. Thank you in advance for your help. Best regards, Georges attached is a screen capture of the pinched image in the Vision Pro, this happens both at top and bottom, only displayed bottom.
2
0
1k
1w
Vision Pro operating limits and battery in 45°C heat
Hello everyone, ​I’m an R&D software engineer researching the Vision Pro for on-site CAD visualization and quality assurance. This requires using the headset outside in the open air in KSA, where ambient daytime temperatures easily hit 45°C (113°F). ​Before I try deploying this for field work, I have a few specific questions: ​Operating Limits: Will the headset function in 45°C ambient heat, or will it immediately trigger a thermal shutdown? ​Throttling: How aggressively does visionOS throttle performance or dim the displays when running demanding spatial apps in this heat? ​Battery: Will the external battery stop supplying power or refuse to charge under these conditions? ​Workarounds: Are there any known best practices or shading accessories for using the Vision Pro outdoors in extreme climates? ​I know the official operating limit is 30°C, so I'm looking for real-world insights from anyone who has pushed these environmental limits. ​Thank you!
1
0
366
Jul ’26
Access main camera on Apple Vision Pro
From visionOS 2.0 we can access Apple Vision Pro's main camera but only for Enterprise account as it is enterprise API only, I have a normal Developer account and I want to use main camera and want to have a video call feature in app by using main camera of AVP, is it possible to do it using developer account only. Currently using that account I am not able to create entitlement certificate as there is no option.
4
0
963
Jun ’26
How do I dismiss a presented sheet?
I'm developing an app requiring data entry across several devices. My SwiftUI app runs on iOS and iPadOS but I also want to run it on visionOS. I'm using the visionOS simulator. When I enter data in one of my views I use a Form within a .sheet and this works perfectly well on iOS and iPadOS and I can dismiss the sheet by simply tapping the view behind the sheet. On visionOS I click my + button, the sheet appears, I enter the data as usual but after that there is no gesture in the app I can perform with keyboard or mouse that will make the sheet disappear! Do I have to add a "Close" button for visionOS or is there a way to enable the same interaction that works on iPadOS?
2
0
1.3k
Jun ’26
Allow External Apps to Remain Visible in an Immersive Space
Many apps utilize ImmersiveSpace simply to render large-scale, custom geometry (such as curved screens, wide-canvas media players, or specialized data visualizations) that cannot be achieved within a standard volumetric window limitations. However, users often still want to multitask—check Messages, reference Safari, access YouTube, etc. Forcing the user to exit the immersive space just to see their other apps breaks their workflow and creates a disjointed user experience. Proposed Solution: I propose adding a property to ImmersionStyle (or a similar API configuration) such as allowSharedSpaceVisibility. When enabled, this would: Allow the ImmersiveSpace to render its custom RealityKit content as usual and prevent the system from automatically hiding the user's existing Shared Space windows. Do me a solid here VisionOS team and please consider this feedback request. 🙏 FB: FB22973973 FB: FB21630340
1
0
345
Jun ’26
visionOS nearby SharePlay blocks local microphone capture
I created a minimal sample project that reproduces a microphone issue with nearby SharePlay / Window Sharing on Apple Vision Pro. Sample project: https://github.com/JerryNee/mic-demo Screen recording: https://youtu.be/aMj_A_leJWU Issue I first implemented SharePlay through FaceTime and found that local microphone capture was unavailable. That seemed understandable because FaceTime itself uses the microphone. I then moved the app to a nearby SharePlay / Window Sharing session specifically to avoid a FaceTime call, but local microphone capture still fails. Local microphone capture works before starting nearby SharePlay. After starting a nearby SharePlay / Window Sharing session with GroupActivities, the same app fails at: try audioEngine.start() This does not require a FaceTime call. It happens with an in-room nearby SharePlay / Window Sharing session. The screen recording also goes silent when the Share Window UI appears. I checked the MP4 audio track with ffmpeg silencedetect; audio becomes silent at about 00:00:22.60, matching the moment nearby sharing starts: silence_start: 22.600612 silence_end: 55.051927 | silence_duration: 32.451315 Environment Two nearby Apple Vision Pro devices Xcode device list: visionOS 27.0 and visionOS 26.5 Xcode 27.0, build 27A5194q Frameworks: GroupActivities, AVFoundation, Speech Entitlement: com.apple.developer.group-session Microphone and speech recognition permissions granted Steps Run the sample on Apple Vision Pro. Tap Start Listening and speak. Transcription works. Tap Stop Listening. Tap Start Nearby Session. Share with another nearby Apple Vision Pro. Tap Start Listening again while the nearby session is active. audioEngine.start() fails. Ending the nearby session makes microphone capture work again. Minimal microphone code let recognizer = SFSpeechRecognizer() let audioEngine = AVAudioEngine() let request = SFSpeechAudioBufferRecognitionRequest() request.shouldReportPartialResults = true let session = AVAudioSession.sharedInstance() try session.setCategory(.record, mode: .measurement, options: [.duckOthers]) try session.setActive(true) let input = audioEngine.inputNode let format = input.outputFormat(forBus: 0) input.installTap(onBus: 0, bufferSize: 1024, format: format) { buffer, _ in request.append(buffer) } audioEngine.prepare() try audioEngine.start() Minimal nearby SharePlay code struct MicDemoActivity: Codable, GroupActivity, Transferable { static let activityIdentifier = "com.example.mic-demo.nearby-mic-repro" static var transferRepresentation: some TransferRepresentation { CodableRepresentation(contentType: .micDemoActivity) } var metadata: GroupActivityMetadata { var metadata = GroupActivityMetadata() metadata.type = .generic metadata.title = "Mic Demo Nearby Session" return metadata } } for await session in MicDemoActivity.sessions() { session.join() } _ = try await MicDemoActivity().activate() Questions Is local microphone capture expected to be unavailable during a nearby SharePlay / Window Sharing session? Is screen recording audio expected to become silent during nearby sharing? What is the recommended way to support nearby shared UI/state while still allowing local voice input?
1
0
295
Jun ’26
EnvironmentBlendingComponent(.occluded(by: .surroundings)) culling entities entirely?
Hi there! While building my visionOS app, I’ve encountered some strange behaviour with EnvironmentBlendingComponent. Entities using .occluded(by: .surroundings) are culled entirely whenever a Mac Virtual Display or Apple Immersive Environment is behind them, regardless of the entities’ actual depth, and even when the environment is set to coexist. This feels like it could be a bug, although I’m fairly new to visionOS development, so I may be missing something! In a .mixed immersive space with plain passthrough, the component behaves as I would expect: an entity is occluded accurately when a real-world object is placed in front of it. However, when either of the following is visible behind the entity: a Mac Virtual Display window; or an Apple Immersive Environment enabled using the Digital Crown, the entity carrying EnvironmentBlendingComponent disappears completely. This happens even when the entity is physically closer to the viewer than the virtual surface. An otherwise identical entity without the component remains visible. Moving the virtual surface out of the line of sight, disabling the Immersive Environment, or removing the component immediately makes the entity visible again. Is it intended that .occluded(by: .surroundings) treats Mac Virtual Display and Apple Immersive Environments as occluders? The documentation describes this mode as depth-based occlusion against static “real-world objects”, so it isn’t clear whether these system-rendered virtual surfaces should participate. Even if they are intended to participate, the observed behaviour appears depth-independent: the entire entity is hidden when the virtual surface is behind it, rather than only when the surface is closer to the viewer. That seems inconsistent with the documented depth-based behaviour. I can reproduce this on an M5 Apple Vision Pro running visionOS 26.5 using the following minimal example: import SwiftUI import RealityKit import UIKit @main struct OcclusionReproApp: App { var body: some SwiftUI.Scene { WindowGroup { OcclusionReproLauncher() } ImmersiveSpace(id: "immersive") { RealityView { content in // Control: opaque, no component — proves the bare setup renders. let control = ModelEntity( mesh: .generateSphere(radius: 0.12), materials: [SimpleMaterial(color: .green, isMetallic: false)] ) control.position = [-0.25, 1.2, -1.3] // ~1.3 m ahead, eye height // Under test: identical opaque sphere plus the occlusion component. let occluded = ModelEntity( mesh: .generateSphere(radius: 0.12), materials: [SimpleMaterial(color: .red, isMetallic: false)] ) occluded.position = [0.25, 1.2, -1.3] occluded.components.set( EnvironmentBlendingComponent(preferredBlendingMode: .occluded(by: .surroundings)) ) content.add(control) content.add(occluded) } } .immersionStyle(selection: .constant(.mixed), in: .mixed) // Let the app's mixed space coexist with an Apple Immersive Environment, // as visionOS suppresses Environments while an immersive space is open otherwise. // The same bug can be reproduced with just a Mac Virtual Display, but // this provides a second way to reproduce the same behaviour: .immersiveEnvironmentBehavior(.coexist) } } struct OcclusionReproLauncher: View { @Environment(\.openImmersiveSpace) private var openImmersiveSpace var body: some View { Button("Open immersive space") { Task { await openImmersiveSpace(id: "immersive") } } .padding() } } To reproduce (on a Vision Pro, as the Simulator won't provide passthrough): Open the immersive space in plain passthrough. Both spheres should be visible. Place a real object in front of the red sphere. It should be occluded correctly according to depth. Open a Mac Virtual Display or enable an Apple Immersive Environment, with its visible surface behind the red sphere. The red sphere disappears entirely, despite being in front of that surface. The green control sphere remains visible. Move the virtual surface out of view or disable it, and the red sphere reappears. Please let me know if this is expected behaviour, or if I'm doing something wrong - thanks! Jack
3
0
309
Jun ’26
Personas stopped working during full immersive SharePlay Session
I got it working recently that I could be in an immersive environment in my App with another FaceTime participant while we both see each others personas. The room needed to be shared as it has a presentation baked in to it that one person can present. However, since yesterday whenever I enter the immersive SharePlay experience, the personas no longer appear and only a coin of the other person is visible with the text "immersed" beneath it. The room is still shared, so I can change the slides and the other person can see the changes. If one person exits the immersive space, their persona is rendered from my point of view (in the immersive space) but we can't be in there together.
1
0
246
Jun ’26
SpatialPreviewSample project from Spatial Preview framework is unable to stream to Vision Pro
I've been trying to implement the new Spatial Preview framework in my app but I've been unable to make it work. I then tried the official sample: https://developer.apple.com/documentation/spatialpreview/working-with-content-from-your-mac-app-using-spatial-preview But this sample is also not able to stream anything to my Vision Pro. Both my Mac & Vision Pro are on the same network with bluetooth enabled, I'm using Mac Virtual Display but the "Stream USD Scene to a vision pro" does nothing. Mac is on macOS 27 and Vision Pro on visionOS 27, I'm using XCode 27. So everything should be setup correctly here. Log says: {CSInlineDonation[async]: "com.example.apple-samplecode.SpatialPreviewSampleB9WT723MN2" add-update-items:1 delete-items:0}: Failed to request donation Error Domain=CSIndexErrorDomain Code=-1000 "Failed to request donation" UserInfo={NSDebugDescription=Failed to request donation, NSUnderlyingError=0x778d201b30 {Error Domain=NSCocoaErrorDomain Code=4099 "The connection to service named com.apple.SetStoreUpdateService was invalidated from this process." UserInfo={NSDebugDescription=The connection to service named com.apple.SetStoreUpdateService was invalidated from this process.}}} Just submitted a ticket about this issue: FB23028075 Am I doing something wrong here? Anyone got the sample working?
7
0
499
Jun ’26
"Open Website Environment" menu gone?
In visionOS 26 (with Website Environments enabled), there was a two step action to enable the environment: click button on the left of the address bar (1 in image), then click "Open Website Environment" (2 in image). This example was shown again this year in Build next-generation experiences with visionOS 27. But I do no see this working in visionOS 27. Instead, I've needed to add a button for the user to open (and optionally close) the website environment. Is adding a button/control to the web page the new way to activate website environments?
1
0
516
Jun ’26
SharePlay connection issues between gen 1 and gen 2 vision pro's
SharePlay Connectivity Issue: Asymmetric Connection Failures Between Vision Pro Generations Environment: Device 1: 2nd generation Vision Pro Device 2: 1st generation Vision Pro OS Version: visionOS 6 build 23O471 Custom App Version: Both devices running identical version Both devices fully updated to the same OS and app versions Issue Description: SharePlay connections exhibit asymmetric behavior based on invitation direction, despite successful FaceTime connectivity between devices: 2nd gen → 1st gen: SharePlay invitation fails consistently 1st gen → 2nd gen: SharePlay invitation succeeds consistently. FaceTime calls: Successful in both directions Impact: Users cannot reliably initiate SharePlay sessions from newer generation devices to older generation devices. The issue is isolated to SharePlay functionality, as standard FaceTime connectivity works bidirectionally and both devices run identical versions of the custom app.
1
2
762
Jun ’26
New Native Gaussian splats vanish up close
I'm building a MR teleoperation app for the Apple Vision Pro. Instead of 2D camera feeds, I render the robot's remote workspace as 3D Gaussian splats, so the operator can perceive depth and inspect objects from any angle by moving their head. That means the operator needs to lean in close to an object, and sometimes move the viewpoint right up to or through it, without the object dropping out of view. Right now when I use the visionOS 27 splat sample out of the box, the splats disappear when the operator gets too close. As the viewpoint approaches a splatted object the entire splat will vanish. This can be solved partially with chunking the splats, but the operator still can't move inside the splat itself. The entire splat vanishing, and chunking helping, makes me think the splat entity is culled once the camera enters its bounds, rather than individual Gaussians being clipped at the near plane. I don't know the renderer's internals, so I may be wrong about the cause. I believe the sample renders in an ImmersiveSpace, not a bounded volume. Does GaussianSplatComponent expose any control over how splats are culled up close (near plane, clipping, or entity bounds), so the splat stays visible as the viewer moves close to or inside it? If there's no such control today, is there a recommended way to let the viewer move through a splat without it disappearing?
2
3
359
Jun ’26
WebXR Augmented Reality Module
On visionOS 26.5, I noticed the Safari Extension 'WebXR Augmented Reality Module' option. I've enabled this option in Safari Settings, and restarted Safari, but when I try to launch a WebXR experience that supports immersive-ar as option (for example this one: https://www.viverse.com/dPASDhP I don't see the option to Play in AR (like I do with a Quest 3S headset) Does anyone have any examples of websites that can make use of this new WebXR Augmented Reality Module feature flag in Safari, on visionOS?
2
4
850
Jun ’26
Recommended visionOS architecture for opt-in nearby exchange triggered by a physical gesture
I’m exploring a visionOS interaction pattern where nearby Apple Vision Pro users have opted in ahead of time, such as when entering a shared venue, and a physical gesture like a handshake triggers a lightweight exchange of user-approved information between their devices. I’m not asking about identifying strangers, accessing raw camera data, or tracking another person without consent. I’m trying to understand the most automatic Apple-supported architecture for this kind of privacy-preserving nearby interaction. What is the recommended approach on visionOS? Specifically: Can a visionOS app use ARKit hand tracking to detect the current user’s own gesture, then combine that with nearby peer discovery or ranging through Nearby Interaction, Network framework, Multipeer Connectivity, Bluetooth, Wi-Fi, or another supported API? Is there a supported way for two nearby Vision Pro devices to exchange a small user-approved payload after prior opt-in, without requiring users to manually start SharePlay or confirm every individual exchange? If SharePlay or Group Activities is the recommended path for shared spatial context, is there a supported alternative for venue-scale or multi-user interactions that should not be limited to a small active SharePlay group? What are the privacy and App Review boundaries for this pattern? Should developers assume the app cannot identify nearby people, observe another person’s body or hands, or trigger an exchange unless both users have explicit opt-in and clear awareness? If a mostly passive gesture-triggered exchange is not supported today, what is the closest Apple-recommended design pattern?
2
0
400
Jun ’26
Adding a ManipulationComponent detaches the whole RealityView content hierarchy on visionOS 27
On visionOS 27 (27.0 Seed 4, 24M5326g), adding a ManipulationComponent to a single entity makes RealityKit remove the RealityView's ENTIRE content hierarchy from the scene and re-add it about 30ms later. Not just the manipulated entity — everything. Same app binary on visionOS 26: never happens. FB24092291. Bisected on the same build and device: two entities, neither with manipulation -> no detach add one entity with a ManipulationComponent -> detach, every time same entity, manipulation swapped for my own drag/rotate/ scale gesture handling -> no detach Everything else is identical between the last two cases — same entity, same collision shape, same InputTargetComponent, same ViewAttachmentComponent, same scene, same view hierarchy. The only variable is whether the component is installed. Setup: an immersive space containing a SwiftUI RealityView. One root entity added to the RealityViewContent in the make closure; all app content built as its descendants. The detach is brief but not harmless: every entity in the hierarchy gets SceneEvents.WillRemoveEntity and then DidAddEntity, so anything keyed to those events runs a full teardown and re-add for content that was never meant to go anywhere. In my app that cascade is what makes the scene visibly empty and rebuild. Nothing in my code removes it. Stack captured from a WillRemoveEntity subscription on the root — frame 0 is my callback, everything above it is framework: SwiftUI (AttributeGraph StatefulRule.withObservation ...) -> RealityFoundation -> CoreRE -> entity removal Ruled out before landing on the component: make runs exactly once, the root re-enters a scene with the same ObjectIdentifier (not a re-host), the hosting controller is never deallocated, there is exactly one RealityViewContent.add(_:) in the whole app, and with Self._printChanges() in the view's body the detach happens in an update pass where the body is not re-evaluated at all. Also ruled out: transient overlay UI (suppressed entirely, still detached) and entity count. Workaround if this is biting you: skip ManipulationComponent on 27 and handle drag/rotate/scale yourself. That is what I am doing for now. If you are debugging something similar: SceneEvents.WillRemoveEntity also fires when an entity merely leaves a scene, so a teardown-looking log is not proof anything was destroyed. Check whether make ran twice and whether the scene identity changed before suspecting your own code.
Replies
1
Boosts
1
Views
67
Activity
16h
How do I create Enterprise.license file?
Hello, I did get an email that I now have access to the Enterprise APIs and I should create the license file. However, I can't figure out a way to create the license file. I did go check out that button, it did have the buttons to "renew" the licenses I got a while ago (via email). but no way to create new ones. and I am enrolled in the "Apple Developer Program as an organization " Where can I create Enterprise.license file?
Replies
3
Boosts
0
Views
1.1k
Activity
3d
WebXR test for AVPro - Fly anywhere in the world ( using Google 3D Tiles, and headset orientation )
Hi there, I'd appreciate it if someone could test this on their AVPro, and give feedback etc. https://face-flight.com I'm hoping to add WebXR support for as many headsets as possible.
Replies
5
Boosts
0
Views
622
Activity
4d
Technical specifications for a macOS immersive 180° video application (Apple Vision Pro)
Hello, I am not a developer, and I am programming a macOS application in Xcode with the help of Claude (Anthropic). Claude writes the code for me, but I need your help regarding the technical specifications. I am not trying to understand every technical detail, nor am I looking for someone to write the code for me. My goal is to obtain the most accurate technical information possible so that I can pass it directly to Claude, who will then generate the corresponding code in Xcode. This application is a personal project. It is not intended to be published on the App Store. Its sole purpose is to automatically process my own videos recorded with two DJI Action 6 cameras. It requires no user settings : the optimal parameters are defined by default within the application, and it directly outputs the final video file. My objective is to create an application that takes as input the two videos from the DJI Action 6 cameras mounted on a rig, and then produces a file that delivers a 180° immersive video with the highest possible quality. Claude has already conducted research in Apple's documentation as well as various online resources to determine the correct output format, encoding parameters, and necessary constraints. Despite this, the current result is not satisfactory. Currently, my application does not directly generate a file in the Apple Immersive format. Instead, it produces a stereoscopic video file containing both the left and right views side-by-side. I then use Moonlink on my Mac Studio and on my Apple Vision Pro, to play this video (the video is on the Mac and sent to the vision pro, wich works perfectly fine on some videos I have found on internet). The file is correctly recognized and can be opened, but the result presents two major issues: Playback is extremely choppy (about one second of playback followed by several seconds of freezing); The image is pinched at the top and bottom, which likely indicates an issue with the format, projection, or how the player interprets the file. I have no preference regarding the final format. If the best solution is to directly generate a file in the Apple Immersive format compatible with the Apple Vision Pro, that works for me. If, on the other hand, the best approach is to produce a high-quality stereoscopic video with the left and right views side-by-side, which can then be interpreted by a player application on the Apple Vision Pro or potentially other headsets, that works for me as well. My sole objective is to obtain: The best possible image quality (even though I am aware it will not match the quality produced by a Blackmagic URSA Cine Immersive camera); Perfectly smooth playback, without any stuttering or freezing; A correctly displayed 180° immersive video. Here are the specifications of my source videos: Two DJI Action 6 cameras. Interpupillary/Inter-axial distance (between optical centers): 6.5 cm. FOV Boost lens mounted on each camera (182° coverage). Video mode: 4K Custom 3840 \times 3840 at 60 fps. Color profile: D-Log M. Color conversion planned in the application via a DJI D-Log M to Rec.709 LUT in .cube format (.cube provided to the app). In FOV Boost mode, DJI enforces Electronic Image Stabilization (EIS) and removes gyroscope data from the MP4 files. Stereoscopic alignment is therefore performed via image analysis within the application (using ORB feature detection). With no FOV Boost I do not reach 180° with is the target. Fixed aperture. Both cameras are triggered simultaneously using the DJI GPS remote control. Fine synchronization is subsequently performed in the application via audio cross-correlation. My question is therefore the following : What exactly are the output specifications that my application should produce (format, codec, resolution, projection, metadata, encoding parameters, and any other technical constraints) in order to achieve the best possible result for a 180° immersive video on the Apple Vision Pro? I will pass all this information directly to Claude so that he can generate the corresponding code in Xcode. Therefore, I am not looking for a code example, but rather the technical specifications to follow. I would also welcome any advice or recommendations that a specialist in Vision Pro, immersive video, or Apple technologies might deem useful to improve the quality of the result or simplify my approach. Thank you in advance for your help. Best regards, Georges attached is a screen capture of the pinched image in the Vision Pro, this happens both at top and bottom, only displayed bottom.
Replies
2
Boosts
0
Views
1k
Activity
1w
Spatial Audio: <<<< FigAudioSession(AV) >>>> signalled err=-19224 at <>:612
Ok trying to play Spatial Audio on my VisionPro. OS26.4, using Xcode 26.4.1. Every attempt gives me the following error. <<<< FigAudioSession(AV) >>>> signalled err=-19224 at <>:612 I have tried the sample code at https://developer.apple.com/documentation/visionos/playing-spatial-audio-in-visionos and it gives the same error.
Replies
5
Boosts
0
Views
1.3k
Activity
3w
Vision Pro operating limits and battery in 45°C heat
Hello everyone, ​I’m an R&D software engineer researching the Vision Pro for on-site CAD visualization and quality assurance. This requires using the headset outside in the open air in KSA, where ambient daytime temperatures easily hit 45°C (113°F). ​Before I try deploying this for field work, I have a few specific questions: ​Operating Limits: Will the headset function in 45°C ambient heat, or will it immediately trigger a thermal shutdown? ​Throttling: How aggressively does visionOS throttle performance or dim the displays when running demanding spatial apps in this heat? ​Battery: Will the external battery stop supplying power or refuse to charge under these conditions? ​Workarounds: Are there any known best practices or shading accessories for using the Vision Pro outdoors in extreme climates? ​I know the official operating limit is 30°C, so I'm looking for real-world insights from anyone who has pushed these environmental limits. ​Thank you!
Replies
1
Boosts
0
Views
366
Activity
Jul ’26
Access main camera on Apple Vision Pro
From visionOS 2.0 we can access Apple Vision Pro's main camera but only for Enterprise account as it is enterprise API only, I have a normal Developer account and I want to use main camera and want to have a video call feature in app by using main camera of AVP, is it possible to do it using developer account only. Currently using that account I am not able to create entitlement certificate as there is no option.
Replies
4
Boosts
0
Views
963
Activity
Jun ’26
How do I dismiss a presented sheet?
I'm developing an app requiring data entry across several devices. My SwiftUI app runs on iOS and iPadOS but I also want to run it on visionOS. I'm using the visionOS simulator. When I enter data in one of my views I use a Form within a .sheet and this works perfectly well on iOS and iPadOS and I can dismiss the sheet by simply tapping the view behind the sheet. On visionOS I click my + button, the sheet appears, I enter the data as usual but after that there is no gesture in the app I can perform with keyboard or mouse that will make the sheet disappear! Do I have to add a "Close" button for visionOS or is there a way to enable the same interaction that works on iPadOS?
Replies
2
Boosts
0
Views
1.3k
Activity
Jun ’26
Allow External Apps to Remain Visible in an Immersive Space
Many apps utilize ImmersiveSpace simply to render large-scale, custom geometry (such as curved screens, wide-canvas media players, or specialized data visualizations) that cannot be achieved within a standard volumetric window limitations. However, users often still want to multitask—check Messages, reference Safari, access YouTube, etc. Forcing the user to exit the immersive space just to see their other apps breaks their workflow and creates a disjointed user experience. Proposed Solution: I propose adding a property to ImmersionStyle (or a similar API configuration) such as allowSharedSpaceVisibility. When enabled, this would: Allow the ImmersiveSpace to render its custom RealityKit content as usual and prevent the system from automatically hiding the user's existing Shared Space windows. Do me a solid here VisionOS team and please consider this feedback request. 🙏 FB: FB22973973 FB: FB21630340
Replies
1
Boosts
0
Views
345
Activity
Jun ’26
Surface Snapping in visionOS Simulator
How do I snap a window to a surface in the visionOS Simulator?
Replies
2
Boosts
0
Views
314
Activity
Jun ’26
visionOS nearby SharePlay blocks local microphone capture
I created a minimal sample project that reproduces a microphone issue with nearby SharePlay / Window Sharing on Apple Vision Pro. Sample project: https://github.com/JerryNee/mic-demo Screen recording: https://youtu.be/aMj_A_leJWU Issue I first implemented SharePlay through FaceTime and found that local microphone capture was unavailable. That seemed understandable because FaceTime itself uses the microphone. I then moved the app to a nearby SharePlay / Window Sharing session specifically to avoid a FaceTime call, but local microphone capture still fails. Local microphone capture works before starting nearby SharePlay. After starting a nearby SharePlay / Window Sharing session with GroupActivities, the same app fails at: try audioEngine.start() This does not require a FaceTime call. It happens with an in-room nearby SharePlay / Window Sharing session. The screen recording also goes silent when the Share Window UI appears. I checked the MP4 audio track with ffmpeg silencedetect; audio becomes silent at about 00:00:22.60, matching the moment nearby sharing starts: silence_start: 22.600612 silence_end: 55.051927 | silence_duration: 32.451315 Environment Two nearby Apple Vision Pro devices Xcode device list: visionOS 27.0 and visionOS 26.5 Xcode 27.0, build 27A5194q Frameworks: GroupActivities, AVFoundation, Speech Entitlement: com.apple.developer.group-session Microphone and speech recognition permissions granted Steps Run the sample on Apple Vision Pro. Tap Start Listening and speak. Transcription works. Tap Stop Listening. Tap Start Nearby Session. Share with another nearby Apple Vision Pro. Tap Start Listening again while the nearby session is active. audioEngine.start() fails. Ending the nearby session makes microphone capture work again. Minimal microphone code let recognizer = SFSpeechRecognizer() let audioEngine = AVAudioEngine() let request = SFSpeechAudioBufferRecognitionRequest() request.shouldReportPartialResults = true let session = AVAudioSession.sharedInstance() try session.setCategory(.record, mode: .measurement, options: [.duckOthers]) try session.setActive(true) let input = audioEngine.inputNode let format = input.outputFormat(forBus: 0) input.installTap(onBus: 0, bufferSize: 1024, format: format) { buffer, _ in request.append(buffer) } audioEngine.prepare() try audioEngine.start() Minimal nearby SharePlay code struct MicDemoActivity: Codable, GroupActivity, Transferable { static let activityIdentifier = "com.example.mic-demo.nearby-mic-repro" static var transferRepresentation: some TransferRepresentation { CodableRepresentation(contentType: .micDemoActivity) } var metadata: GroupActivityMetadata { var metadata = GroupActivityMetadata() metadata.type = .generic metadata.title = "Mic Demo Nearby Session" return metadata } } for await session in MicDemoActivity.sessions() { session.join() } _ = try await MicDemoActivity().activate() Questions Is local microphone capture expected to be unavailable during a nearby SharePlay / Window Sharing session? Is screen recording audio expected to become silent during nearby sharing? What is the recommended way to support nearby shared UI/state while still allowing local voice input?
Replies
1
Boosts
0
Views
295
Activity
Jun ’26
EnvironmentBlendingComponent(.occluded(by: .surroundings)) culling entities entirely?
Hi there! While building my visionOS app, I’ve encountered some strange behaviour with EnvironmentBlendingComponent. Entities using .occluded(by: .surroundings) are culled entirely whenever a Mac Virtual Display or Apple Immersive Environment is behind them, regardless of the entities’ actual depth, and even when the environment is set to coexist. This feels like it could be a bug, although I’m fairly new to visionOS development, so I may be missing something! In a .mixed immersive space with plain passthrough, the component behaves as I would expect: an entity is occluded accurately when a real-world object is placed in front of it. However, when either of the following is visible behind the entity: a Mac Virtual Display window; or an Apple Immersive Environment enabled using the Digital Crown, the entity carrying EnvironmentBlendingComponent disappears completely. This happens even when the entity is physically closer to the viewer than the virtual surface. An otherwise identical entity without the component remains visible. Moving the virtual surface out of the line of sight, disabling the Immersive Environment, or removing the component immediately makes the entity visible again. Is it intended that .occluded(by: .surroundings) treats Mac Virtual Display and Apple Immersive Environments as occluders? The documentation describes this mode as depth-based occlusion against static “real-world objects”, so it isn’t clear whether these system-rendered virtual surfaces should participate. Even if they are intended to participate, the observed behaviour appears depth-independent: the entire entity is hidden when the virtual surface is behind it, rather than only when the surface is closer to the viewer. That seems inconsistent with the documented depth-based behaviour. I can reproduce this on an M5 Apple Vision Pro running visionOS 26.5 using the following minimal example: import SwiftUI import RealityKit import UIKit @main struct OcclusionReproApp: App { var body: some SwiftUI.Scene { WindowGroup { OcclusionReproLauncher() } ImmersiveSpace(id: "immersive") { RealityView { content in // Control: opaque, no component — proves the bare setup renders. let control = ModelEntity( mesh: .generateSphere(radius: 0.12), materials: [SimpleMaterial(color: .green, isMetallic: false)] ) control.position = [-0.25, 1.2, -1.3] // ~1.3 m ahead, eye height // Under test: identical opaque sphere plus the occlusion component. let occluded = ModelEntity( mesh: .generateSphere(radius: 0.12), materials: [SimpleMaterial(color: .red, isMetallic: false)] ) occluded.position = [0.25, 1.2, -1.3] occluded.components.set( EnvironmentBlendingComponent(preferredBlendingMode: .occluded(by: .surroundings)) ) content.add(control) content.add(occluded) } } .immersionStyle(selection: .constant(.mixed), in: .mixed) // Let the app's mixed space coexist with an Apple Immersive Environment, // as visionOS suppresses Environments while an immersive space is open otherwise. // The same bug can be reproduced with just a Mac Virtual Display, but // this provides a second way to reproduce the same behaviour: .immersiveEnvironmentBehavior(.coexist) } } struct OcclusionReproLauncher: View { @Environment(\.openImmersiveSpace) private var openImmersiveSpace var body: some View { Button("Open immersive space") { Task { await openImmersiveSpace(id: "immersive") } } .padding() } } To reproduce (on a Vision Pro, as the Simulator won't provide passthrough): Open the immersive space in plain passthrough. Both spheres should be visible. Place a real object in front of the red sphere. It should be occluded correctly according to depth. Open a Mac Virtual Display or enable an Apple Immersive Environment, with its visible surface behind the red sphere. The red sphere disappears entirely, despite being in front of that surface. The green control sphere remains visible. Move the virtual surface out of view or disable it, and the red sphere reappears. Please let me know if this is expected behaviour, or if I'm doing something wrong - thanks! Jack
Replies
3
Boosts
0
Views
309
Activity
Jun ’26
Personas stopped working during full immersive SharePlay Session
I got it working recently that I could be in an immersive environment in my App with another FaceTime participant while we both see each others personas. The room needed to be shared as it has a presentation baked in to it that one person can present. However, since yesterday whenever I enter the immersive SharePlay experience, the personas no longer appear and only a coin of the other person is visible with the text "immersed" beneath it. The room is still shared, so I can change the slides and the other person can see the changes. If one person exits the immersive space, their persona is rendered from my point of view (in the immersive space) but we can't be in there together.
Replies
1
Boosts
0
Views
246
Activity
Jun ’26
SpatialPreviewSample project from Spatial Preview framework is unable to stream to Vision Pro
I've been trying to implement the new Spatial Preview framework in my app but I've been unable to make it work. I then tried the official sample: https://developer.apple.com/documentation/spatialpreview/working-with-content-from-your-mac-app-using-spatial-preview But this sample is also not able to stream anything to my Vision Pro. Both my Mac & Vision Pro are on the same network with bluetooth enabled, I'm using Mac Virtual Display but the "Stream USD Scene to a vision pro" does nothing. Mac is on macOS 27 and Vision Pro on visionOS 27, I'm using XCode 27. So everything should be setup correctly here. Log says: {CSInlineDonation[async]: "com.example.apple-samplecode.SpatialPreviewSampleB9WT723MN2" add-update-items:1 delete-items:0}: Failed to request donation Error Domain=CSIndexErrorDomain Code=-1000 "Failed to request donation" UserInfo={NSDebugDescription=Failed to request donation, NSUnderlyingError=0x778d201b30 {Error Domain=NSCocoaErrorDomain Code=4099 "The connection to service named com.apple.SetStoreUpdateService was invalidated from this process." UserInfo={NSDebugDescription=The connection to service named com.apple.SetStoreUpdateService was invalidated from this process.}}} Just submitted a ticket about this issue: FB23028075 Am I doing something wrong here? Anyone got the sample working?
Replies
7
Boosts
0
Views
499
Activity
Jun ’26
"Open Website Environment" menu gone?
In visionOS 26 (with Website Environments enabled), there was a two step action to enable the environment: click button on the left of the address bar (1 in image), then click "Open Website Environment" (2 in image). This example was shown again this year in Build next-generation experiences with visionOS 27. But I do no see this working in visionOS 27. Instead, I've needed to add a button for the user to open (and optionally close) the website environment. Is adding a button/control to the web page the new way to activate website environments?
Replies
1
Boosts
0
Views
516
Activity
Jun ’26
SharePlay connection issues between gen 1 and gen 2 vision pro's
SharePlay Connectivity Issue: Asymmetric Connection Failures Between Vision Pro Generations Environment: Device 1: 2nd generation Vision Pro Device 2: 1st generation Vision Pro OS Version: visionOS 6 build 23O471 Custom App Version: Both devices running identical version Both devices fully updated to the same OS and app versions Issue Description: SharePlay connections exhibit asymmetric behavior based on invitation direction, despite successful FaceTime connectivity between devices: 2nd gen → 1st gen: SharePlay invitation fails consistently 1st gen → 2nd gen: SharePlay invitation succeeds consistently. FaceTime calls: Successful in both directions Impact: Users cannot reliably initiate SharePlay sessions from newer generation devices to older generation devices. The issue is isolated to SharePlay functionality, as standard FaceTime connectivity works bidirectionally and both devices run identical versions of the custom app.
Replies
1
Boosts
2
Views
762
Activity
Jun ’26
Curved windows in visionOS 27
Safari, Freeform and some other apps now support curved windows. It this now available to developers as well? I couldn't find any information about it. Thanks!
Replies
6
Boosts
1
Views
438
Activity
Jun ’26
New Native Gaussian splats vanish up close
I'm building a MR teleoperation app for the Apple Vision Pro. Instead of 2D camera feeds, I render the robot's remote workspace as 3D Gaussian splats, so the operator can perceive depth and inspect objects from any angle by moving their head. That means the operator needs to lean in close to an object, and sometimes move the viewpoint right up to or through it, without the object dropping out of view. Right now when I use the visionOS 27 splat sample out of the box, the splats disappear when the operator gets too close. As the viewpoint approaches a splatted object the entire splat will vanish. This can be solved partially with chunking the splats, but the operator still can't move inside the splat itself. The entire splat vanishing, and chunking helping, makes me think the splat entity is culled once the camera enters its bounds, rather than individual Gaussians being clipped at the near plane. I don't know the renderer's internals, so I may be wrong about the cause. I believe the sample renders in an ImmersiveSpace, not a bounded volume. Does GaussianSplatComponent expose any control over how splats are culled up close (near plane, clipping, or entity bounds), so the splat stays visible as the viewer moves close to or inside it? If there's no such control today, is there a recommended way to let the viewer move through a splat without it disappearing?
Replies
2
Boosts
3
Views
359
Activity
Jun ’26
WebXR Augmented Reality Module
On visionOS 26.5, I noticed the Safari Extension 'WebXR Augmented Reality Module' option. I've enabled this option in Safari Settings, and restarted Safari, but when I try to launch a WebXR experience that supports immersive-ar as option (for example this one: https://www.viverse.com/dPASDhP I don't see the option to Play in AR (like I do with a Quest 3S headset) Does anyone have any examples of websites that can make use of this new WebXR Augmented Reality Module feature flag in Safari, on visionOS?
Replies
2
Boosts
4
Views
850
Activity
Jun ’26
Recommended visionOS architecture for opt-in nearby exchange triggered by a physical gesture
I’m exploring a visionOS interaction pattern where nearby Apple Vision Pro users have opted in ahead of time, such as when entering a shared venue, and a physical gesture like a handshake triggers a lightweight exchange of user-approved information between their devices. I’m not asking about identifying strangers, accessing raw camera data, or tracking another person without consent. I’m trying to understand the most automatic Apple-supported architecture for this kind of privacy-preserving nearby interaction. What is the recommended approach on visionOS? Specifically: Can a visionOS app use ARKit hand tracking to detect the current user’s own gesture, then combine that with nearby peer discovery or ranging through Nearby Interaction, Network framework, Multipeer Connectivity, Bluetooth, Wi-Fi, or another supported API? Is there a supported way for two nearby Vision Pro devices to exchange a small user-approved payload after prior opt-in, without requiring users to manually start SharePlay or confirm every individual exchange? If SharePlay or Group Activities is the recommended path for shared spatial context, is there a supported alternative for venue-scale or multi-user interactions that should not be limited to a small active SharePlay group? What are the privacy and App Review boundaries for this pattern? Should developers assume the app cannot identify nearby people, observe another person’s body or hands, or trigger an exchange unless both users have explicit opt-in and clear awareness? If a mostly passive gesture-triggered exchange is not supported today, what is the closest Apple-recommended design pattern?
Replies
2
Boosts
0
Views
400
Activity
Jun ’26