diff --git a/.goreleaser.yml b/.goreleaser.yml index be1d983..e488753 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -32,7 +32,7 @@ brews: tap: owner: cirruslabs name: homebrew-cli - caveats: See the Github repository for more information + caveats: See the GitHub repository for more information homepage: https://github.com/cirruslabs/tart description: Run macOS VMs on Apple Silicon skip_upload: auto diff --git a/Package.swift b/Package.swift index 302c721..1b4abe9 100644 --- a/Package.swift +++ b/Package.swift @@ -1,4 +1,4 @@ -// swift-tools-version:5.6 +// swift-tools-version:5.7 import PackageDescription let package = Package( diff --git a/Sources/tart/VM+Recovery.swift b/Sources/tart/VM+Recovery.swift index 999676a..18c18b4 100644 --- a/Sources/tart/VM+Recovery.swift +++ b/Sources/tart/VM+Recovery.swift @@ -5,6 +5,7 @@ import Dynamic // Kudos to @saagarjha's VirtualApple for finding about _VZVirtualMachineStartOptions extension VZVirtualMachine { + @available(macOS 12, *) func start(_ recovery: Bool) async throws { if !recovery { // just use the regular API diff --git a/Sources/tart/VM.swift b/Sources/tart/VM.swift index 1f7f4ed..edd4ffb 100644 --- a/Sources/tart/VM.swift +++ b/Sources/tart/VM.swift @@ -167,7 +167,19 @@ class VM: NSObject, VZVirtualMachineDelegate, ObservableObject { try softnet.run() } - try await virtualMachine.start(recovery) + DispatchQueue.main.sync { + Task { + if #available(macOS 13, *) { + // new API introduced in Ventura + let startOptions = VZMacOSVirtualMachineStartOptions() + startOptions.startUpFromMacOSRecovery = recovery + try await virtualMachine.start(options: startOptions) + } else { + // use method that also available on Monterey + try await virtualMachine.start(recovery) + } + } + } await withTaskCancellationHandler(operation: { sema.wait()