A minimal demo project showcasing a regression in
SpatialEventGestureon iOS 26.0 beta.
- Device: iPhone
- iOS Versions Tested:
- 18.5 (22F76) — ✔️ Works as expected
- 26.0 (23A5260n) beta — ❌ Buggy behavior
- Repo: SpatialEventGesture_Bug_iOS26BetaApp
- Clone or download this project
- Open SpatialEventGesture_Bug_iOS26BetaApp.xcodeproj in Xcode 15.6
- Build & run on a physical iPhone (simulator does not reproduce)
- In the running app, place two fingers on the screen—both remain active
- On iOS 18.5:
- Add a third, fourth, and fifth finger simultaneously or serially → all touches continue to register
- Adding a 6th finger cancels everything (as documented)
- On iOS 26.0 beta:
- Place three fingers on the screen simultaneously → all touches are canceled immediately
- Up to five simultaneous touches should remain active.
- Only when a 6th finger appears—either all at once or one after another—should the system cancel the gesture and deliver a
.cancelledphase.
- Only two simultaneous touches are allowed.
- The moment a 3rd finger touches, all active touches are cancelled.
HStack(spacing: 0) {
let colors: [Color] = [.red, .orange, .yellow, .green, .blue, .indigo]
ForEach(0..<colors.count, id: \.self) { i in
Rectangle()
.foregroundColor(colors[i])
.frame(maxWidth: .infinity, maxHeight: .infinity)
}
}
.gesture(
SpatialEventGesture()
.onChanged { events in
print("Active:", events.filter { $0.phase == .active }.map(\.location))
}
.onEnded { events in
if events.contains(where: { $0.phase == .cancelled }) {
print("⚠️ Gesture cancelled prematurely")
}
}
)