fix(apple): disarm CHHapticEngine handlers with no-ops, not nil

stoppedHandler/resetHandler are non-optional closures on the CI SDK
((StoppedReason)->() and ()->()), so assigning nil fails to compile
(apple.yml). Assign no-op closures to disarm them before engine.stop()
-- same re-entrancy guard intent, type-correct.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-18 21:20:37 +00:00
parent c358b510e5
commit 26084969a9
@@ -186,9 +186,10 @@ private final class RumbleRenderer: @unchecked Sendable {
private func teardown() {
for m in [low, high].compactMap({ $0 }) {
// Drop the handlers before stopping so stop() can't re-enter teardown via stoppedHandler.
m.engine.stoppedHandler = nil
m.engine.resetHandler = nil
// Disarm the handlers before stopping so stop() can't re-enter teardown via them.
// (Both properties are non-optional closures on this SDK, so assign no-ops, not nil.)
m.engine.stoppedHandler = { _ in }
m.engine.resetHandler = {}
try? m.player.stop(atTime: CHHapticTimeImmediate)
m.engine.stop()
}