Bug:
When SpatialTrackingSession and ARKitSession + WorldTrackingProvider are running concurrently, any WorldAnchor added via WorldTrackingProvider.addAnchor() triggers .added followed immediately by .removed—without any user call to removeAnchor(). The anchor never persists in allAnchors.
import SwiftUI
import RealityKit
import ARKit
struct ImmersiveView: View {
@State private var worldTracking: WorldTrackingProvider?
@State private var arSession: ARKitSession?
@State private var processWorldTrackingUpdatesTask: Task<Void, Never>?
var body: some View {
RealityView { content in
let configuration = SpatialTrackingSession.Configuration(tracking: [.world])
if let unavailableCapabilities = await SpatialTrackingSession().run(configuration) {
if unavailableCapabilities.anchor.contains(.world) {
fatalError("World tracking is not available on this device.")
}
}
let worldTracking = WorldTrackingProvider()
let arSession = ARKitSession()
self.arSession = arSession
try! await arSession.run([worldTracking])
self.worldTracking = worldTracking
processWorldTrackingUpdatesTask = Task { @MainActor [weak worldTracking] in
guard let worldTracking else { return }
for await update in worldTracking.anchorUpdates {
let worldAnchor = update.anchor
switch update.event {
case .added:
print("Anchor added: \(worldAnchor.id)")
case .updated:
print("Anchor updated: \(worldAnchor.id)")
case .removed:
fatalError("Anchor removed unexpectedly — this should not happen in this demo scenario.")
}
}
}
}
.task {
try? await Task.sleep(for: .seconds(3))
guard let worldTracking else { return }
do {
try await worldTracking.addAnchor(.init(originFromAnchorTransform: Transform.identity.matrix))
} catch {
print("Error adding anchor: \(error)")
}
}
}
}
Expected: Anchors persist until explicitly removed or out of range.
Actual: SpatialTrackingSession interferes with WorldTrackingProvider's anchor lifecycle, causing immediate removal.
This was originally reported in 2025 (https://developer.apple.com/forums/thread/773351) , but remains unfixed in visionOS 27.0 beta. I've re-filed as FB23420195.
4
1
80