mirror of
https://github.com/cirruslabs/tart.git
synced 2026-10-01 11:47:20 +02:00
When built against the macOS 27 (Xcode 27, Swift 6.4) SDK, "tart run" brings up the VM window but the guest never boots. Swift's asynchronous main() entry point implicitly starts an executor that owns the main thread, and as of Swift 6.4 that executor is no longer backed by the Dispatch main queue. Running an AppKit/SwiftUI run loop nested inside it via MainApp.main() leaves the main run loop unable to drain Swift tasks or DispatchQueue.main, so the task that starts the VM is never scheduled, even though the window itself (driven directly by AppKit during launch) still appears. We now keep Root.main() synchronous, so that a command driving a run loop can own the main thread at the top level, exactly like a plain SwiftUI app. With AppKit owning the loop again, MainActor tasks and the Dispatch main queue drain as before. Such commands opt in through a new MainThreadCommand protocol; everything else keeps running asynchronously via a detached task and dispatchMain(). Verified that the guest boots again, and that Ctrl+C still stops the VM gracefully.