Stop using @unchecked Sendable

While migrating a large SDK to the Swift 6 language mode, I wanted to avoid blanket @unchecked Sendable on our existing lock-guarded types. The pattern I landed on: implement SerialExecutor over NSRecursiveLock (jobs run inline on the calling thread under the lock), then back a nested @globalActor with it so the enclosing type can stay a class with a synchronous API while its state becomes compiler-isolated.

The write-up covers the executor, recursive-lock reentrancy and owner restoration, checkIsolated() / isIsolatingCurrentContext(), and a synchronous run entry point.

I'd genuinely value any feedback:

1 Like

Clickbait title.

2 Likes