diff --git a/Configuration/QEMUConstant.swift b/Configuration/QEMUConstant.swift index 75a6d9ae..be78c41e 100644 --- a/Configuration/QEMUConstant.swift +++ b/Configuration/QEMUConstant.swift @@ -424,20 +424,20 @@ extension QEMUArchitecture { default: return true } } - + var hasHypervisorSupport: Bool { - guard jb_has_hypervisor() else { + guard UTMCapabilities.current.contains(.hasHypervisorSupport) else { + return false + } + if UTMCapabilities.current.contains(.isAarch64) { + return self == .aarch64 + } else if UTMCapabilities.current.contains(.isX86_64) { + return self == .x86_64 + } else { return false } - #if arch(arm64) - return self == .aarch64 - #elseif arch(x86_64) - return self == .x86_64 - #else - return false - #endif } - + /// TSO is supported on jailbroken iOS devices with Hypervisor support var hasTSOSupport: Bool { #if os(iOS) || os(visionOS) diff --git a/Configuration/UTMConfigurationDrive.swift b/Configuration/UTMConfigurationDrive.swift index 61103ac9..57122602 100644 --- a/Configuration/UTMConfigurationDrive.swift +++ b/Configuration/UTMConfigurationDrive.swift @@ -15,7 +15,6 @@ // import Foundation -import QEMUKitInternal /// Settings for single disk device protocol UTMConfigurationDrive: Codable, Hashable, Identifiable { @@ -101,13 +100,17 @@ extension UTMConfigurationDrive { try handle.close() }.value } - + private func createQcow2Image(at newURL: URL, size sizeMib: Int) async throws { + #if WITH_REMOTE + fatalError("Not implemented") + #else try await Task.detached { if !QEMUGenerateDefaultQcow2File(newURL as CFURL, sizeMib) { throw UTMConfigurationError.cannotCreateDiskImage } }.value + #endif } #if os(macOS) diff --git a/Configuration/UTMQemuConfiguration+Arguments.swift b/Configuration/UTMQemuConfiguration+Arguments.swift index 75686ffc..2970b137 100644 --- a/Configuration/UTMQemuConfiguration+Arguments.swift +++ b/Configuration/UTMQemuConfiguration+Arguments.swift @@ -362,7 +362,7 @@ import Virtualization // for getting network interfaces "tb-size=\(tbSize)" #if WITH_JIT // use mirror mapping when we don't have JIT entitlements - if !jb_has_jit_entitlement() { + if !UTMCapabilities.current.contains(.hasJitEntitlements) { "split-wx=on" } #endif diff --git a/Platform/Shared/ContentView.swift b/Platform/Shared/ContentView.swift index b85f19ac..4e8efd26 100644 --- a/Platform/Shared/ContentView.swift +++ b/Platform/Shared/ContentView.swift @@ -97,7 +97,7 @@ struct ContentView: View { #endif // ignore error when we are running on a HV only build - if !jb_has_hypervisor() { + if !UTMCapabilities.current.contains(.hasHypervisorSupport) { throw NSLocalizedString("Your version of iOS does not support running VMs while unmodified. You must either run UTM while jailbroken or with a remote debugger attached. See https://getutm.app/install/ for more details.", comment: "ContentView") } } diff --git a/Platform/Shared/VMConfigSystemView.swift b/Platform/Shared/VMConfigSystemView.swift index 3bb397f3..a2c1ce88 100644 --- a/Platform/Shared/VMConfigSystemView.swift +++ b/Platform/Shared/VMConfigSystemView.swift @@ -101,7 +101,7 @@ struct VMConfigSystemView: View { } #endif let actualJitSizeMib = jitSizeMib == 0 ? memorySizeMib / 4 : jitSizeMib - let jitMirrorMultiplier = jb_has_jit_entitlement() ? 1 : 2; + let jitMirrorMultiplier = UTMCapabilities.current.contains(.hasJitEntitlements) ? 1 : 2; let estMemoryUsage = UInt64(memorySizeMib + jitMirrorMultiplier*actualJitSizeMib + baseUsageMib) * bytesInMib if Double(estMemoryUsage) > Double(totalDeviceMemory) * warningThreshold { warningMessage = WarningMessage.overallocatedRam(totalMib: totalDeviceMemory / bytesInMib, estimatedMib: estMemoryUsage / bytesInMib) diff --git a/Platform/Shared/VMNavigationListView.swift b/Platform/Shared/VMNavigationListView.swift index eaeea400..1daa1b89 100644 --- a/Platform/Shared/VMNavigationListView.swift +++ b/Platform/Shared/VMNavigationListView.swift @@ -122,7 +122,7 @@ private struct VMListModifier: ViewModifier { ToolbarItem(placement: .navigationBarLeading) { newButton } - #if !os(visionOS) + #if !os(visionOS) && !WITH_REMOTE ToolbarItem(placement: .navigationBarTrailing) { Button("Settings") { settingsPresented.toggle() @@ -140,7 +140,9 @@ private struct VMListModifier: ViewModifier { if data.showNewVMSheet { VMWizardView() } else if settingsPresented { + #if !WITH_REMOTE UTMSettingsView() + #endif } } .onChange(of: data.showNewVMSheet) { newValue in diff --git a/Platform/Shared/VMWizardStartView.swift b/Platform/Shared/VMWizardStartView.swift index 74da704e..3c9a4774 100644 --- a/Platform/Shared/VMWizardStartView.swift +++ b/Platform/Shared/VMWizardStartView.swift @@ -26,7 +26,7 @@ struct VMWizardStartView: View { #if os(macOS) VZVirtualMachine.isSupported && !processIsTranslated() #else - jb_has_hypervisor() + UTMCapabilities.current.contains(.hasHypervisorSupport) #endif } diff --git a/Platform/UTMData.swift b/Platform/UTMData.swift index e15710c3..f899c64e 100644 --- a/Platform/UTMData.swift +++ b/Platform/UTMData.swift @@ -1033,6 +1033,43 @@ extension UTMDataError: LocalizedError { } // MARK: - Remote Client + +/// Declare host capabilities to any remote client +struct UTMCapabilities: OptionSet, Codable { + let rawValue: UInt + + /// If set, no trick is needed to get JIT working as the process is entitled. + static let hasJitEntitlements = Self(rawValue: 1 << 0) + + /// If set, virtualization is supported by this host. + static let hasHypervisorSupport = Self(rawValue: 1 << 1) + + /// If set, host is aarch64 + static let isAarch64 = Self(rawValue: 1 << 2) + + /// If set, host is x86_64 + static let isX86_64 = Self(rawValue: 1 << 3) + + static fileprivate(set) var current: Self = { + var current = Self() + #if WITH_JIT + if jb_has_jit_entitlement() { + current.insert(.hasJitEntitlements) + } + if jb_has_hypervisor() { + current.insert(.hasHypervisorSupport) + } + #endif + #if arch(arm64) + current.insert(.isAarch64) + #endif + #if arch(x86_64) + current.insert(.isX86_64) + #endif + return current + }() +} + #if WITH_REMOTE @MainActor class UTMRemoteData: UTMData { @@ -1050,6 +1087,9 @@ class UTMRemoteData: UTMData { override func listRefresh() async { busyWorkAsync { + if let capabilities = await self.remoteClient.server.capabilities { + UTMCapabilities.current = capabilities + } try await self.listRefreshFromRemote() } } diff --git a/Platform/iOS/Display/VMDisplayViewController.swift b/Platform/iOS/Display/VMDisplayViewController.swift index 9991faa8..c631ca08 100644 --- a/Platform/iOS/Display/VMDisplayViewController.swift +++ b/Platform/iOS/Display/VMDisplayViewController.swift @@ -55,7 +55,7 @@ public extension VMDisplayViewController { parent.setChildViewControllerForPointerLock(self) UIPress.pressResponderOverride = self } - #if !os(visionOS) + #if !os(visionOS) && !WITH_REMOTE if runInBackground { logger.info("Start location tracking to enable running in background") UTMLocationManager.sharedInstance().startUpdatingLocation() diff --git a/Platform/iOS/UTMSettingsView.swift b/Platform/iOS/UTMSettingsView.swift index c65d0fa8..11621fec 100644 --- a/Platform/iOS/UTMSettingsView.swift +++ b/Platform/iOS/UTMSettingsView.swift @@ -19,12 +19,20 @@ import SwiftUI struct UTMSettingsView: View { @Environment(\.presentationMode) private var presentationMode: Binding + private var hasContainer: Bool { + #if WITH_JIT + jb_has_container() + #else + true + #endif + } + var body: some View { NavigationView { IASKAppSettings() .navigationTitle("Settings") .navigationBarTitleDisplayMode(.inline) - .appSettingsShowPrivacyLink(jb_has_container()) + .appSettingsShowPrivacyLink(hasContainer) .toolbar { ToolbarItem(placement: .navigationBarLeading) { Button("Close") { diff --git a/Remote/UTMRemoteClient.swift b/Remote/UTMRemoteClient.swift index 75b98d56..1a89b73a 100644 --- a/Remote/UTMRemoteClient.swift +++ b/Remote/UTMRemoteClient.swift @@ -202,7 +202,7 @@ extension UTMRemoteClient { } private func _handshake(parameters: M.ClientHandshake.Request) async throws -> M.ClientHandshake.Reply { - return .init(version: UTMRemoteMessageClient.version) + return .init(version: UTMRemoteMessageClient.version, capabilities: .current) } private func _virtualMachineDidTransition(parameters: M.VirtualMachineDidTransition.Request) async throws -> M.VirtualMachineDidTransition.Reply { @@ -222,6 +222,7 @@ extension UTMRemoteClient { typealias M = UTMRemoteMessageServer private let peer: Peer let host: String + private(set) var capabilities: UTMCapabilities? init(peer: Peer, host: String) { self.peer = peer @@ -233,9 +234,11 @@ extension UTMRemoteClient { } func handshake() async throws { - guard try await _handshake(parameters: .init(version: UTMRemoteMessageServer.version)).version == UTMRemoteMessageServer.version else { + let reply = try await _handshake(parameters: .init(version: UTMRemoteMessageServer.version)) + guard reply.version == UTMRemoteMessageServer.version else { throw ClientError.versionMismatch } + capabilities = reply.capabilities } func listVirtualMachines() async throws -> [M.ListVirtualMachines.Information] { diff --git a/Remote/UTMRemoteMessage.swift b/Remote/UTMRemoteMessage.swift index 2d15babd..2cbf68fe 100644 --- a/Remote/UTMRemoteMessage.swift +++ b/Remote/UTMRemoteMessage.swift @@ -56,6 +56,7 @@ extension UTMRemoteMessageServer { struct Reply: Serializable, Codable { let version: Int + let capabilities: UTMCapabilities } } @@ -71,6 +72,7 @@ extension UTMRemoteMessageServer { let isShortcut: Bool let isSuspended: Bool let backend: UTMBackend + let state: UTMVirtualMachineState } struct Reply: Serializable, Codable { @@ -233,6 +235,7 @@ extension UTMRemoteMessageClient { struct Reply: Serializable, Codable { let version: Int + let capabilities: UTMCapabilities } } diff --git a/Remote/UTMRemoteServer.swift b/Remote/UTMRemoteServer.swift index dea9bacd..0019d7ed 100644 --- a/Remote/UTMRemoteServer.swift +++ b/Remote/UTMRemoteServer.swift @@ -588,7 +588,7 @@ extension UTMRemoteServer { } private func _handshake(parameters: M.ServerHandshake.Request) async throws -> M.ServerHandshake.Reply { - return .init(version: UTMRemoteMessageServer.version) + return .init(version: UTMRemoteMessageServer.version, capabilities: .current) } private func _listVirtualMachines(parameters: M.ListVirtualMachines.Request) async throws -> M.ListVirtualMachines.Reply { diff --git a/Services/Swift-Bridging-Header.h b/Services/Swift-Bridging-Header.h index f8c194c3..24b31c47 100644 --- a/Services/Swift-Bridging-Header.h +++ b/Services/Swift-Bridging-Header.h @@ -25,15 +25,21 @@ #include "UTMLegacyQemuConfiguration+Sharing.h" #include "UTMLegacyQemuConfiguration+System.h" #include "UTMLegacyQemuConfigurationPortForward.h" +#include "UTMLogging.h" +#if !defined(WITH_REMOTE) #include "UTMProcess.h" #include "UTMQemuSystem.h" #include "UTMJailbreak.h" -#include "UTMLogging.h" +#else +#include "UTMQemuSystemBackends.h" +#endif #include "UTMLegacyViewState.h" #include "UTMSpiceIO.h" #include "GenerateKey.h" #if TARGET_OS_IPHONE +#if !defined(WITH_REMOTE) #include "UTMLocationManager.h" +#endif #include "VMDisplayViewController.h" //#if !defined(TARGET_OS_VISION) || !TARGET_OS_VISION #include "VMDisplayMetalViewController.h" diff --git a/Services/UTMLogging.m b/Services/UTMLogging.m index 2d7812c5..7e15efa4 100644 --- a/Services/UTMLogging.m +++ b/Services/UTMLogging.m @@ -15,7 +15,9 @@ // #import "UTMLogging.h" +#if !defined(WITH_REMOTE) @import QEMUKitInternal; +#endif static UTMLogging *gLoggingInstance; @@ -42,7 +44,11 @@ void UTMLog(NSString *format, ...) { } - (void)writeLine:(NSString *)line { +#if defined(WITH_REMOTE) + NSLog(@"%@", line); +#else [QEMULogging.sharedInstance writeLine:line]; +#endif } @end diff --git a/Services/UTMQemuSystem.h b/Services/UTMQemuSystem.h index f1fbfa3e..218ef172 100644 --- a/Services/UTMQemuSystem.h +++ b/Services/UTMQemuSystem.h @@ -15,24 +15,9 @@ // #import "UTMProcess.h" +#import "UTMQemuSystemBackends.h" @import QEMUKitInternal; -/// Specify the backend renderer for this VM -typedef NS_ENUM(NSInteger, UTMQEMURendererBackend) { - kQEMURendererBackendDefault = 0, - kQEMURendererBackendAngleGL = 1, - kQEMURendererBackendAngleMetal = 2, - kQEMURendererBackendMax = 3, -}; - -/// Specify the sound backend for this VM -typedef NS_ENUM(NSInteger, UTMQEMUSoundBackend) { - kQEMUSoundBackendDefault = 0, - kQEMUSoundBackendSPICE = 1, - kQEMUSoundBackendCoreAudio = 2, - kQEMUSoundBackendMax = 3, -}; - NS_ASSUME_NONNULL_BEGIN @interface UTMQemuSystem : UTMProcess diff --git a/Services/UTMQemuSystemBackends.h b/Services/UTMQemuSystemBackends.h new file mode 100644 index 00000000..f8eb12d7 --- /dev/null +++ b/Services/UTMQemuSystemBackends.h @@ -0,0 +1,36 @@ +// +// Copyright © 2024 osy. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#ifndef UTMQemuSystemBackends_h +#define UTMQemuSystemBackends_h + +/// Specify the backend renderer for this VM +typedef NS_ENUM(NSInteger, UTMQEMURendererBackend) { + kQEMURendererBackendDefault = 0, + kQEMURendererBackendAngleGL = 1, + kQEMURendererBackendAngleMetal = 2, + kQEMURendererBackendMax = 3, +}; + +/// Specify the sound backend for this VM +typedef NS_ENUM(NSInteger, UTMQEMUSoundBackend) { + kQEMUSoundBackendDefault = 0, + kQEMUSoundBackendSPICE = 1, + kQEMUSoundBackendCoreAudio = 2, + kQEMUSoundBackendMax = 3, +}; + +#endif /* UTMQemuSystemBackends_h */ diff --git a/Services/UTMSpiceIO.m b/Services/UTMSpiceIO.m index 2db6e01e..c15c7d47 100644 --- a/Services/UTMSpiceIO.m +++ b/Services/UTMSpiceIO.m @@ -241,14 +241,14 @@ NSString *const kUTMErrorDomain = @"com.utmapp.utm"; - (void)spiceForwardedPortOpened:(CSConnection *)connection port:(CSPort *)port { if ([port.name isEqualToString:@"org.qemu.monitor.qmp.0"]) { - UTMQemuPort *qemuPort = [[UTMQemuPort alloc] initFrom:port]; #if !defined(WITH_REMOTE) + UTMQemuPort *qemuPort = [[UTMQemuPort alloc] initFrom:port]; [self.connectDelegate qemuInterface:self didCreateMonitorPort:qemuPort]; #endif } if ([port.name isEqualToString:@"org.qemu.guest_agent.0"]) { - UTMQemuPort *qemuPort = [[UTMQemuPort alloc] initFrom:port]; #if !defined(WITH_REMOTE) + UTMQemuPort *qemuPort = [[UTMQemuPort alloc] initFrom:port]; [self.connectDelegate qemuInterface:self didCreateGuestAgentPort:qemuPort]; #endif } diff --git a/Services/UTMSpiceVirtualMachine.swift b/Services/UTMSpiceVirtualMachine.swift index 6bcbec13..78647d53 100644 --- a/Services/UTMSpiceVirtualMachine.swift +++ b/Services/UTMSpiceVirtualMachine.swift @@ -15,7 +15,6 @@ // import Foundation -import QEMUKit /// Common methods for all SPICE virtual machines protocol UTMSpiceVirtualMachine: UTMVirtualMachine where Configuration == UTMQemuConfiguration { @@ -61,7 +60,11 @@ protocol UTMSpiceVirtualMachine: UTMVirtualMachine where Configuration == UTMQem // MARK: - USB redirection extension UTMSpiceVirtualMachine { var hasUsbRedirection: Bool { + #if HAS_USB return jb_has_usb_entitlement() + #else + return false + #endif } } diff --git a/UTM.xcodeproj/project.pbxproj b/UTM.xcodeproj/project.pbxproj index 7b85a930..23a689c5 100644 --- a/UTM.xcodeproj/project.pbxproj +++ b/UTM.xcodeproj/project.pbxproj @@ -709,7 +709,6 @@ CEA45ED1263519B5002FA97D /* UTMLocationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = CE059DC7243E9E3400338317 /* UTMLocationManager.m */; platformFilter = ios; }; CEA45ED3263519B5002FA97D /* VMSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE2D954C24AD4F980059923A /* VMSettingsView.swift */; }; CEA45ED8263519B5002FA97D /* VMKeyboardButton.m in Sources */ = {isa = PBXBuildFile; fileRef = CEEB66452284B942002737B2 /* VMKeyboardButton.m */; }; - CEA45EDF263519B5002FA97D /* UTMJailbreak.m in Sources */ = {isa = PBXBuildFile; fileRef = CEB63A7924F469E300CAF323 /* UTMJailbreak.m */; }; CEA45EE8263519B5002FA97D /* VMDisplayMetalViewController+Keyboard.m in Sources */ = {isa = PBXBuildFile; fileRef = CE3ADD66240EFBCA002D6A5F /* VMDisplayMetalViewController+Keyboard.m */; }; CEA45EEA263519B5002FA97D /* UTMExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE2D954624AD4F980059923A /* UTMExtensions.swift */; }; CEA45EEC263519B5002FA97D /* UTMData.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE020BA224AEDC7C00B44AB6 /* UTMData.swift */; }; @@ -891,6 +890,8 @@ CEE7E936287CFDB100282049 /* UTMLegacyQemuConfiguration+Constants.m in Sources */ = {isa = PBXBuildFile; fileRef = CEE7E934287CFDB100282049 /* UTMLegacyQemuConfiguration+Constants.m */; }; CEE7E937287CFDB100282049 /* UTMLegacyQemuConfiguration+Constants.m in Sources */ = {isa = PBXBuildFile; fileRef = CEE7E934287CFDB100282049 /* UTMLegacyQemuConfiguration+Constants.m */; }; CEE7E938287CFDB100282049 /* UTMLegacyQemuConfiguration+Constants.m in Sources */ = {isa = PBXBuildFile; fileRef = CEE7E934287CFDB100282049 /* UTMLegacyQemuConfiguration+Constants.m */; }; + CEE8B4C22B71E0FB0035AE86 /* UTMLogging.m in Sources */ = {isa = PBXBuildFile; fileRef = CE6EDCE1241DA0E900A719DC /* UTMLogging.m */; }; + CEE8B4C32B71E2BA0035AE86 /* UTMLoggingSwift.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE020BAA24AEE00000B44AB6 /* UTMLoggingSwift.swift */; }; CEEC811B24E48EC700ACB0B3 /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEEC811A24E48EC600ACB0B3 /* SettingsView.swift */; }; CEECE13C25E47D9500A2AAB8 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEECE13B25E47D9500A2AAB8 /* AppDelegate.swift */; }; CEF01DB22B6724A300725A0F /* UTMSpiceVirtualMachine.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEF01DB12B6724A300725A0F /* UTMSpiceVirtualMachine.swift */; }; @@ -900,7 +901,6 @@ CEF01DB72B674BF000725A0F /* UTMPipeInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEF01DB62B674BF000725A0F /* UTMPipeInterface.swift */; }; CEF01DB82B674BF000725A0F /* UTMPipeInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEF01DB62B674BF000725A0F /* UTMPipeInterface.swift */; }; CEF01DB92B674BF000725A0F /* UTMPipeInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEF01DB62B674BF000725A0F /* UTMPipeInterface.swift */; }; - CEF01DCD2B67985100725A0F /* UTMPipeInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEF01DB62B674BF000725A0F /* UTMPipeInterface.swift */; }; CEF0300826A25A6900667B63 /* VMWizardView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEF0300526A25A6900667B63 /* VMWizardView.swift */; }; CEF0304E26A2AFBE00667B63 /* BigButtonStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEF0304C26A2AFBE00667B63 /* BigButtonStyle.swift */; }; CEF0304F26A2AFBF00667B63 /* BigButtonStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEF0304C26A2AFBE00667B63 /* BigButtonStyle.swift */; }; @@ -949,7 +949,6 @@ CEF7F59D2AEEDCC400E34952 /* VMData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 847BF9A92A49C783000BD9AA /* VMData.swift */; }; CEF7F59E2AEEDCC400E34952 /* UTMLegacyQemuConfiguration+System.m in Sources */ = {isa = PBXBuildFile; fileRef = CE5425332437C22A00E520F7 /* UTMLegacyQemuConfiguration+System.m */; }; CEF7F59F2AEEDCC400E34952 /* UTMQemuConfigurationNetwork.swift in Sources */ = {isa = PBXBuildFile; fileRef = 843BF82F2844853E0029D60D /* UTMQemuConfigurationNetwork.swift */; }; - CEF7F5A02AEEDCC400E34952 /* UTMProcess.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9D197B226542FE00355E14 /* UTMProcess.m */; }; CEF7F5A12AEEDCC400E34952 /* VMWizardDrivesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEBE820226A4C1B5007AAB12 /* VMWizardDrivesView.swift */; }; CEF7F5A22AEEDCC400E34952 /* VMWindowState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84018688288A44C20050AC51 /* VMWindowState.swift */; }; CEF7F5A42AEEDCC400E34952 /* UTMLegacyQemuConfigurationPortForward.m in Sources */ = {isa = PBXBuildFile; fileRef = CE54252D2436E48D00E520F7 /* UTMLegacyQemuConfigurationPortForward.m */; }; @@ -978,7 +977,6 @@ CEF7F5BB2AEEDCC400E34952 /* UTMReleaseHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE611BE629F50CAD001817BC /* UTMReleaseHelper.swift */; }; CEF7F5BC2AEEDCC400E34952 /* VMConfigNetworkView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE2D955024AD4F980059923A /* VMConfigNetworkView.swift */; }; CEF7F5BD2AEEDCC400E34952 /* UTMLegacyViewState.m in Sources */ = {isa = PBXBuildFile; fileRef = CE6EDCDE241C4A6800A719DC /* UTMLegacyViewState.m */; }; - CEF7F5BE2AEEDCC400E34952 /* UTMLoggingSwift.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE020BAA24AEE00000B44AB6 /* UTMLoggingSwift.swift */; }; CEF7F5BF2AEEDCC400E34952 /* VMWizardOSLinuxView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEF0305726A2AFDE00667B63 /* VMWizardOSLinuxView.swift */; }; CEF7F5C02AEEDCC400E34952 /* VMWizardSummaryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEBE820A26A4C8E0007AAB12 /* VMWizardSummaryView.swift */; }; CEF7F5C12AEEDCC400E34952 /* VMConfigQEMUView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE2D953924AD4F980059923A /* VMConfigQEMUView.swift */; }; @@ -1021,13 +1019,10 @@ CEF7F5E62AEEDCC400E34952 /* VMWizardHardwareView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEF0307326A2B40B00667B63 /* VMWizardHardwareView.swift */; }; CEF7F5E72AEEDCC400E34952 /* UTMRegistry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 841E997428AA1191003C6CB6 /* UTMRegistry.swift */; }; CEF7F5E82AEEDCC400E34952 /* VMDisplayViewControllerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8401868E288A50B90050AC51 /* VMDisplayViewControllerDelegate.swift */; }; - CEF7F5E92AEEDCC400E34952 /* UTMLogging.m in Sources */ = {isa = PBXBuildFile; fileRef = CE6EDCE1241DA0E900A719DC /* UTMLogging.m */; }; CEF7F5EA2AEEDCC400E34952 /* VMConfigConstantPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 848D99A7285DB5550055C215 /* VMConfigConstantPicker.swift */; }; - CEF7F5EB2AEEDCC400E34952 /* UTMQemuImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8453DCB3278CE5410037A0DA /* UTMQemuImage.swift */; }; CEF7F5EC2AEEDCC400E34952 /* VMToolbarModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE2D953824AD4F980059923A /* VMToolbarModifier.swift */; }; CEF7F5ED2AEEDCC400E34952 /* VMCursor.m in Sources */ = {isa = PBXBuildFile; fileRef = CE3ADD692411C661002D6A5F /* VMCursor.m */; }; CEF7F5EE2AEEDCC400E34952 /* VMConfigDriveDetailsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE9375A024BBDDD10074066F /* VMConfigDriveDetailsView.swift */; }; - CEF7F5EF2AEEDCC400E34952 /* UTMQemuSystem.m in Sources */ = {isa = PBXBuildFile; fileRef = CE03D05024D90B4E00F76B84 /* UTMQemuSystem.m */; }; CEF7F5F02AEEDCC400E34952 /* NumberTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = CED234EC254796E500ED0A57 /* NumberTextField.swift */; }; CEF7F5F12AEEDCC400E34952 /* VMToolbarOrnamentModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEA51F862A81EAB700DDD7FA /* VMToolbarOrnamentModifier.swift */; platformFilters = (xros, ); }; CEF7F5F22AEEDCC400E34952 /* VMCommands.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE772AB225C8B7B500E4E379 /* VMCommands.swift */; }; @@ -1035,7 +1030,6 @@ CEF7F5F42AEEDCC400E34952 /* VMConfirmActionModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE6D21DB2553A6ED001D29C5 /* VMConfirmActionModifier.swift */; }; CEF7F5F52AEEDCC400E34952 /* QEMUConstant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 841619B52843226B000034B2 /* QEMUConstant.swift */; }; CEF7F5F62AEEDCC400E34952 /* VMConfigPortForwardForm.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE2D955224AD4F980059923A /* VMConfigPortForwardForm.swift */; }; - CEF7F5F72AEEDCC400E34952 /* UTMLocationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = CE059DC7243E9E3400338317 /* UTMLocationManager.m */; platformFilter = ios; }; CEF7F5F82AEEDCC400E34952 /* DetailedSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8471772727CD3CAB00D3A50B /* DetailedSection.swift */; }; CEF7F5F92AEEDCC400E34952 /* VMToolbarDriveMenuView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84CF5DF4288F558400D01721 /* VMToolbarDriveMenuView.swift */; }; CEF7F5FA2AEEDCC400E34952 /* VMSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE2D954C24AD4F980059923A /* VMSettingsView.swift */; }; @@ -1045,29 +1039,24 @@ CEF7F5FE2AEEDCC400E34952 /* VMKeyboardButton.m in Sources */ = {isa = PBXBuildFile; fileRef = CEEB66452284B942002737B2 /* VMKeyboardButton.m */; }; CEF7F5FF2AEEDCC400E34952 /* UTMDownloadVMTask.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84B36D2427B704C200C22685 /* UTMDownloadVMTask.swift */; }; CEF7F6002AEEDCC400E34952 /* GlobalFileImporter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8432329728C3017F00CFBC97 /* GlobalFileImporter.swift */; }; - CEF7F6012AEEDCC400E34952 /* IASKAppSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84CE3DAD2904C17C00FF068B /* IASKAppSettings.swift */; platformFilter = ios; }; CEF7F6022AEEDCC400E34952 /* VMWizardContent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84C2E8642AA429E800B17308 /* VMWizardContent.swift */; }; CEF7F6032AEEDCC400E34952 /* UTMExternalSceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 841E58CA28937EE200137A20 /* UTMExternalSceneDelegate.swift */; platformFilter = ios; }; - CEF7F6042AEEDCC400E34952 /* UTMJailbreak.m in Sources */ = {isa = PBXBuildFile; fileRef = CEB63A7924F469E300CAF323 /* UTMJailbreak.m */; }; CEF7F6052AEEDCC400E34952 /* UTMQemuConfigurationQEMU.swift in Sources */ = {isa = PBXBuildFile; fileRef = 841619B128431DA5000034B2 /* UTMQemuConfigurationQEMU.swift */; }; CEF7F6062AEEDCC400E34952 /* UTMQemuConfigurationDisplay.swift in Sources */ = {isa = PBXBuildFile; fileRef = 843BF82328441EAD0029D60D /* UTMQemuConfigurationDisplay.swift */; }; CEF7F6072AEEDCC400E34952 /* UTMApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE80111F2AD4E9E8009001C2 /* UTMApp.swift */; platformFilters = (xros, ); }; CEF7F6082AEEDCC400E34952 /* VMConfigDisplayConsoleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8401FDA5269D44E400265F0D /* VMConfigDisplayConsoleView.swift */; }; - CEF7F6092AEEDCC400E34952 /* UTMQemuPort.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84A0A8822A47D52E0038F329 /* UTMQemuPort.swift */; }; CEF7F60A2AEEDCC400E34952 /* VMConfigSerialView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 848D99B728630A780055C215 /* VMConfigSerialView.swift */; }; CEF7F60B2AEEDCC400E34952 /* VMWizardState.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEF0305526A2AFDD00667B63 /* VMWizardState.swift */; }; CEF7F60C2AEEDCC400E34952 /* UTMQemuConfigurationInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = 843BF82B284482C10029D60D /* UTMQemuConfigurationInput.swift */; }; CEF7F60D2AEEDCC400E34952 /* VMDisplayMetalViewController+Keyboard.m in Sources */ = {isa = PBXBuildFile; fileRef = CE3ADD66240EFBCA002D6A5F /* VMDisplayMetalViewController+Keyboard.m */; }; CEF7F60E2AEEDCC400E34952 /* UTMExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE2D954624AD4F980059923A /* UTMExtensions.swift */; }; CEF7F60F2AEEDCC400E34952 /* UTMData.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE020BA224AEDC7C00B44AB6 /* UTMData.swift */; }; - CEF7F6102AEEDCC400E34952 /* UTMSerialPortDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 848F71EB277A2F47006A0240 /* UTMSerialPortDelegate.swift */; }; CEF7F6112AEEDCC400E34952 /* VMConfigSoundView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE2D953A24AD4F980059923A /* VMConfigSoundView.swift */; }; CEF7F6122AEEDCC400E34952 /* UTMLegacyQemuConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = CE31C244225E555600A965DD /* UTMLegacyQemuConfiguration.m */; }; CEF7F6142AEEDCC400E34952 /* VMDetailsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE2D954B24AD4F980059923A /* VMDetailsView.swift */; }; CEF7F6152AEEDCC400E34952 /* VMDisplayMetalViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5286EC94243748C3007E6CBC /* VMDisplayMetalViewController.m */; }; CEF7F6162AEEDCC400E34952 /* UTMQemuConfiguration+Arguments.swift in Sources */ = {isa = PBXBuildFile; fileRef = 848D99C328670F650055C215 /* UTMQemuConfiguration+Arguments.swift */; }; CEF7F6172AEEDCC400E34952 /* Main.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEB63A7524F4654400CAF323 /* Main.swift */; }; - CEF7F6182AEEDCC400E34952 /* UTMSerialPort.swift in Sources */ = {isa = PBXBuildFile; fileRef = 848F71E7277A2A4E006A0240 /* UTMSerialPort.swift */; }; CEF7F6192AEEDCC400E34952 /* VMCardView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE2D954324AD4F980059923A /* VMCardView.swift */; }; CEF7F61A2AEEDCC400E34952 /* VMNavigationListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8432328F28C2CDAD00CFBC97 /* VMNavigationListView.swift */; }; CEF7F61B2AEEDCC400E34952 /* UTMSingleWindowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 841E58CD28937FED00137A20 /* UTMSingleWindowView.swift */; }; @@ -1081,8 +1070,6 @@ CEF7F6232AEEDCC400E34952 /* VMPlaceholderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE2D954224AD4F980059923A /* VMPlaceholderView.swift */; }; CEF7F6242AEEDCC400E34952 /* VMDisplayMetalViewController+Pointer.m in Sources */ = {isa = PBXBuildFile; fileRef = 83FBDD55242FA7BC00D2C5D7 /* VMDisplayMetalViewController+Pointer.m */; }; CEF7F6252AEEDCC400E34952 /* VMDisplayViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = CE72B4AC2463579D00716A11 /* VMDisplayViewController.m */; }; - CEF7F6262AEEDCC400E34952 /* UTMSWTPM.swift in Sources */ = {isa = PBXBuildFile; fileRef = 845F95E22A57628400A016D7 /* UTMSWTPM.swift */; }; - CEF7F6272AEEDCC400E34952 /* UTMSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84CE3DB02904C7A100FF068B /* UTMSettingsView.swift */; platformFilter = ios; }; CEF7F6282AEEDCC400E34952 /* UTMQemuConfigurationSound.swift in Sources */ = {isa = PBXBuildFile; fileRef = 843BF83328450C0B0029D60D /* UTMQemuConfigurationSound.swift */; }; CEF7F6292AEEDCC400E34952 /* VMScroll.m in Sources */ = {isa = PBXBuildFile; fileRef = CE20FAE72448D2BE0059AE11 /* VMScroll.m */; }; CEF7F62A2AEEDCC400E34952 /* VMConfigNetworkPortForwardView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE2D954D24AD4F980059923A /* VMConfigNetworkPortForwardView.swift */; }; @@ -1101,7 +1088,6 @@ CEF7F6382AEEDCC400E34952 /* libgstjpeg.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CE9D195A2265425900355E14 /* libgstjpeg.a */; }; CEF7F6392AEEDCC400E34952 /* libgstaudioresample.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CE9D195B2265425900355E14 /* libgstaudioresample.a */; }; CEF7F63A2AEEDCC400E34952 /* libgstplayback.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CE9D195C2265425900355E14 /* libgstplayback.a */; }; - CEF7F63B2AEEDCC400E34952 /* QEMUKit in Frameworks */ = {isa = PBXBuildFile; productRef = CEF7F5942AEEDCC400E34952 /* QEMUKit */; }; CEF7F63C2AEEDCC400E34952 /* libgstadder.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CE9D195D2265425900355E14 /* libgstadder.a */; }; CEF7F63D2AEEDCC400E34952 /* libgstaudiorate.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CE9D195F2265425900355E14 /* libgstaudiorate.a */; }; CEF7F63F2AEEDCC400E34952 /* libgstvideofilter.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CE9D19602265425900355E14 /* libgstvideofilter.a */; }; @@ -1190,7 +1176,6 @@ CEF7F6BE2AEEDCC400E34952 /* spice-client-glib-2.0.8.framework in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D63FE22653C7500FC7E63 /* spice-client-glib-2.0.8.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; CEF7F6BF2AEEDCC400E34952 /* opus.0.framework in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D640322653C7500FC7E63 /* opus.0.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; CEF7F6C02AEEDCC400E34952 /* gstsdp-1.0.0.framework in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D641622653C7500FC7E63 /* gstsdp-1.0.0.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - CEF7F6C12AEEDCC400E34952 /* swtpm.0.framework in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE064C642A563F4A003C833D /* swtpm.0.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; CEF7F6C42AEEDCC400E34952 /* gstaudio-1.0.0.framework in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D63EF22653C7400FC7E63 /* gstaudio-1.0.0.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; CEF7F6C52AEEDCC400E34952 /* gstcheck-1.0.0.framework in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D641422653C7500FC7E63 /* gstcheck-1.0.0.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; CEF7F6C72AEEDCC400E34952 /* iconv.2.framework in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D641522653C7500FC7E63 /* iconv.2.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; @@ -1212,7 +1197,6 @@ CEF83F8F250094EE00557D15 /* gcrypt.20.framework in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D63F322653C7400FC7E63 /* gcrypt.20.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; CEFE96722B699954000F00C9 /* UTMSocketUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEFE96712B699954000F00C9 /* UTMSocketUtils.swift */; }; CEFE96732B699954000F00C9 /* UTMSocketUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEFE96712B699954000F00C9 /* UTMSocketUtils.swift */; }; - CEFE96742B699954000F00C9 /* UTMSocketUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEFE96712B699954000F00C9 /* UTMSocketUtils.swift */; }; CEFE96752B699954000F00C9 /* UTMSocketUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEFE96712B699954000F00C9 /* UTMSocketUtils.swift */; }; CEFE96772B69A7CC000F00C9 /* VMRemoteSessionState.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEFE96762B69A7CC000F00C9 /* VMRemoteSessionState.swift */; }; CEFE98DF29485237007CB7A8 /* UTM.sdef in Resources */ = {isa = PBXBuildFile; fileRef = CEFE98DE29485237007CB7A8 /* UTM.sdef */; }; @@ -1570,7 +1554,6 @@ CEF7F6BE2AEEDCC400E34952 /* spice-client-glib-2.0.8.framework in Embed Libraries */, CEF7F6BF2AEEDCC400E34952 /* opus.0.framework in Embed Libraries */, CEF7F6C02AEEDCC400E34952 /* gstsdp-1.0.0.framework in Embed Libraries */, - CEF7F6C12AEEDCC400E34952 /* swtpm.0.framework in Embed Libraries */, CEF7F6C42AEEDCC400E34952 /* gstaudio-1.0.0.framework in Embed Libraries */, CEF7F6C52AEEDCC400E34952 /* gstcheck-1.0.0.framework in Embed Libraries */, CEF7F6C72AEEDCC400E34952 /* iconv.2.framework in Embed Libraries */, @@ -2015,6 +1998,7 @@ CEE7E934287CFDB100282049 /* UTMLegacyQemuConfiguration+Constants.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UTMLegacyQemuConfiguration+Constants.m"; sourceTree = ""; }; CEE7E935287CFDB100282049 /* UTMLegacyQemuConfiguration+Constants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UTMLegacyQemuConfiguration+Constants.h"; sourceTree = ""; }; CEE7ED472A90256100E6B4AB /* VMDisplayMetalViewController+Private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "VMDisplayMetalViewController+Private.h"; sourceTree = ""; }; + CEE8B4C12B71DF4C0035AE86 /* UTMQemuSystemBackends.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UTMQemuSystemBackends.h; sourceTree = ""; }; CEEB66442284B942002737B2 /* VMKeyboardButton.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VMKeyboardButton.h; sourceTree = ""; }; CEEB66452284B942002737B2 /* VMKeyboardButton.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = VMKeyboardButton.m; sourceTree = ""; }; CEEC811A24E48EC600ACB0B3 /* SettingsView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsView.swift; sourceTree = ""; }; @@ -2356,7 +2340,6 @@ CEF7F6382AEEDCC400E34952 /* libgstjpeg.a in Frameworks */, CEF7F6392AEEDCC400E34952 /* libgstaudioresample.a in Frameworks */, CEF7F63A2AEEDCC400E34952 /* libgstplayback.a in Frameworks */, - CEF7F63B2AEEDCC400E34952 /* QEMUKit in Frameworks */, CEF7F63C2AEEDCC400E34952 /* libgstadder.a in Frameworks */, CEF7F63D2AEEDCC400E34952 /* libgstaudiorate.a in Frameworks */, CEF7F63F2AEEDCC400E34952 /* libgstvideofilter.a in Frameworks */, @@ -2785,6 +2768,7 @@ 84A0A8822A47D52E0038F329 /* UTMQemuPort.swift */, CE03D05424D90BE000F76B84 /* UTMQemuSystem.h */, CE03D05024D90B4E00F76B84 /* UTMQemuSystem.m */, + CEE8B4C12B71DF4C0035AE86 /* UTMQemuSystemBackends.h */, 841E997428AA1191003C6CB6 /* UTMRegistry.swift */, 841E997828AA119B003C6CB6 /* UTMRegistryEntry.swift */, 848F71E7277A2A4E006A0240 /* UTMSerialPort.swift */, @@ -3178,7 +3162,6 @@ CEF7F58E2AEEDCC400E34952 /* SwiftTerm */, CEF7F5902AEEDCC400E34952 /* SwiftUIVisualEffects */, CEF7F5922AEEDCC400E34952 /* InAppSettingsKit */, - CEF7F5942AEEDCC400E34952 /* QEMUKit */, CEF7F6D52AEEEF7D00E34952 /* CocoaSpiceNoUsb */, CE9B153B2B11A4B4003A32DD /* SwiftConnect */, ); @@ -3922,7 +3905,6 @@ CEA45ED8263519B5002FA97D /* VMKeyboardButton.m in Sources */, CEF0307526A2B40B00667B63 /* VMWizardHardwareView.swift in Sources */, CE8011212AD4E9E8009001C2 /* UTMApp.swift in Sources */, - CEA45EDF263519B5002FA97D /* UTMJailbreak.m in Sources */, CE611BEC29F50D3E001817BC /* VMReleaseNotesView.swift in Sources */, CE611BE829F50CAD001817BC /* UTMReleaseHelper.swift in Sources */, CEA45EE8263519B5002FA97D /* VMDisplayMetalViewController+Keyboard.m in Sources */, @@ -3983,11 +3965,9 @@ CEE06B292B30013500A811AE /* UTMRemoteConnectView.swift in Sources */, CEF7F59B2AEEDCC400E34952 /* UTMQemuConfigurationSharing.swift in Sources */, CEF7F59C2AEEDCC400E34952 /* ContentView.swift in Sources */, - CEFE96742B699954000F00C9 /* UTMSocketUtils.swift in Sources */, CEF7F59D2AEEDCC400E34952 /* VMData.swift in Sources */, CEF7F59E2AEEDCC400E34952 /* UTMLegacyQemuConfiguration+System.m in Sources */, CEF7F59F2AEEDCC400E34952 /* UTMQemuConfigurationNetwork.swift in Sources */, - CEF7F5A02AEEDCC400E34952 /* UTMProcess.m in Sources */, CE70E8D52B648FBE007FA787 /* UTMRemoteSpiceVirtualMachine.swift in Sources */, CEF7F5A12AEEDCC400E34952 /* VMWizardDrivesView.swift in Sources */, CEF7F5A22AEEDCC400E34952 /* VMWindowState.swift in Sources */, @@ -4019,7 +3999,6 @@ CEF7F5BB2AEEDCC400E34952 /* UTMReleaseHelper.swift in Sources */, CEF7F5BC2AEEDCC400E34952 /* VMConfigNetworkView.swift in Sources */, CEF7F5BD2AEEDCC400E34952 /* UTMLegacyViewState.m in Sources */, - CEF7F5BE2AEEDCC400E34952 /* UTMLoggingSwift.swift in Sources */, CEF7F5BF2AEEDCC400E34952 /* VMWizardOSLinuxView.swift in Sources */, CEF7F5C02AEEDCC400E34952 /* VMWizardSummaryView.swift in Sources */, CEF7F5C12AEEDCC400E34952 /* VMConfigQEMUView.swift in Sources */, @@ -4037,6 +4016,7 @@ CEF7F5CD2AEEDCC400E34952 /* UTMConfigurationTerminal.swift in Sources */, CEF7F5CE2AEEDCC400E34952 /* VMWindowView.swift in Sources */, CEF7F5CF2AEEDCC400E34952 /* UTMPendingVMView.swift in Sources */, + CEE8B4C32B71E2BA0035AE86 /* UTMLoggingSwift.swift in Sources */, CEF7F5D02AEEDCC400E34952 /* UTMSpiceIO.m in Sources */, CEF7F5D12AEEDCC400E34952 /* UTMUnavailableVMView.swift in Sources */, CEF7F5D22AEEDCC400E34952 /* VMDrivesSettingsView.swift in Sources */, @@ -4062,14 +4042,10 @@ CEF7F5E62AEEDCC400E34952 /* VMWizardHardwareView.swift in Sources */, CEF7F5E72AEEDCC400E34952 /* UTMRegistry.swift in Sources */, CEF7F5E82AEEDCC400E34952 /* VMDisplayViewControllerDelegate.swift in Sources */, - CEF7F5E92AEEDCC400E34952 /* UTMLogging.m in Sources */, CEF7F5EA2AEEDCC400E34952 /* VMConfigConstantPicker.swift in Sources */, - CEF7F5EB2AEEDCC400E34952 /* UTMQemuImage.swift in Sources */, CEF7F5EC2AEEDCC400E34952 /* VMToolbarModifier.swift in Sources */, - CEF01DCD2B67985100725A0F /* UTMPipeInterface.swift in Sources */, CEF7F5ED2AEEDCC400E34952 /* VMCursor.m in Sources */, CEF7F5EE2AEEDCC400E34952 /* VMConfigDriveDetailsView.swift in Sources */, - CEF7F5EF2AEEDCC400E34952 /* UTMQemuSystem.m in Sources */, CEF7F5F02AEEDCC400E34952 /* NumberTextField.swift in Sources */, CEF7F5F12AEEDCC400E34952 /* VMToolbarOrnamentModifier.swift in Sources */, CEF01DB42B6724A300725A0F /* UTMSpiceVirtualMachine.swift in Sources */, @@ -4078,7 +4054,6 @@ CEF7F5F42AEEDCC400E34952 /* VMConfirmActionModifier.swift in Sources */, CEF7F5F52AEEDCC400E34952 /* QEMUConstant.swift in Sources */, CEF7F5F62AEEDCC400E34952 /* VMConfigPortForwardForm.swift in Sources */, - CEF7F5F72AEEDCC400E34952 /* UTMLocationManager.m in Sources */, CEF7F5F82AEEDCC400E34952 /* DetailedSection.swift in Sources */, CEF7F5F92AEEDCC400E34952 /* VMToolbarDriveMenuView.swift in Sources */, CEF7F5FA2AEEDCC400E34952 /* VMSettingsView.swift in Sources */, @@ -4088,15 +4063,13 @@ CEF7F5FE2AEEDCC400E34952 /* VMKeyboardButton.m in Sources */, CEF7F5FF2AEEDCC400E34952 /* UTMDownloadVMTask.swift in Sources */, CEF7F6002AEEDCC400E34952 /* GlobalFileImporter.swift in Sources */, - CEF7F6012AEEDCC400E34952 /* IASKAppSettings.swift in Sources */, CEF7F6022AEEDCC400E34952 /* VMWizardContent.swift in Sources */, CEF7F6032AEEDCC400E34952 /* UTMExternalSceneDelegate.swift in Sources */, - CEF7F6042AEEDCC400E34952 /* UTMJailbreak.m in Sources */, CEF7F6052AEEDCC400E34952 /* UTMQemuConfigurationQEMU.swift in Sources */, CEF7F6062AEEDCC400E34952 /* UTMQemuConfigurationDisplay.swift in Sources */, + CEE8B4C22B71E0FB0035AE86 /* UTMLogging.m in Sources */, CEF7F6072AEEDCC400E34952 /* UTMApp.swift in Sources */, CEF7F6082AEEDCC400E34952 /* VMConfigDisplayConsoleView.swift in Sources */, - CEF7F6092AEEDCC400E34952 /* UTMQemuPort.swift in Sources */, CEF7F60A2AEEDCC400E34952 /* VMConfigSerialView.swift in Sources */, CE38EC692B5DB3AE008B324B /* UTMRemoteClient.swift in Sources */, CEF7F60B2AEEDCC400E34952 /* VMWizardState.swift in Sources */, @@ -4104,14 +4077,12 @@ CEF7F60D2AEEDCC400E34952 /* VMDisplayMetalViewController+Keyboard.m in Sources */, CEF7F60E2AEEDCC400E34952 /* UTMExtensions.swift in Sources */, CEF7F60F2AEEDCC400E34952 /* UTMData.swift in Sources */, - CEF7F6102AEEDCC400E34952 /* UTMSerialPortDelegate.swift in Sources */, CEF7F6112AEEDCC400E34952 /* VMConfigSoundView.swift in Sources */, CEF7F6122AEEDCC400E34952 /* UTMLegacyQemuConfiguration.m in Sources */, CEF7F6142AEEDCC400E34952 /* VMDetailsView.swift in Sources */, CEF7F6152AEEDCC400E34952 /* VMDisplayMetalViewController.m in Sources */, CEF7F6162AEEDCC400E34952 /* UTMQemuConfiguration+Arguments.swift in Sources */, CEF7F6172AEEDCC400E34952 /* Main.swift in Sources */, - CEF7F6182AEEDCC400E34952 /* UTMSerialPort.swift in Sources */, CEF7F6192AEEDCC400E34952 /* VMCardView.swift in Sources */, CEF7F61A2AEEDCC400E34952 /* VMNavigationListView.swift in Sources */, CEF7F61B2AEEDCC400E34952 /* UTMSingleWindowView.swift in Sources */, @@ -4126,8 +4097,6 @@ CEF7F6232AEEDCC400E34952 /* VMPlaceholderView.swift in Sources */, CEF7F6242AEEDCC400E34952 /* VMDisplayMetalViewController+Pointer.m in Sources */, CEF7F6252AEEDCC400E34952 /* VMDisplayViewController.m in Sources */, - CEF7F6262AEEDCC400E34952 /* UTMSWTPM.swift in Sources */, - CEF7F6272AEEDCC400E34952 /* UTMSettingsView.swift in Sources */, CEF7F6282AEEDCC400E34952 /* UTMQemuConfigurationSound.swift in Sources */, CEF7F6292AEEDCC400E34952 /* VMScroll.m in Sources */, CEF7F62A2AEEDCC400E34952 /* VMConfigNetworkPortForwardView.swift in Sources */, @@ -5189,14 +5158,6 @@ minimumVersion = 3.0.0; }; }; - CEF7F5952AEEDCC400E34952 /* XCRemoteSwiftPackageReference "QEMUKit" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/utmapp/QEMUKit.git"; - requirement = { - branch = main; - kind = branch; - }; - }; /* End XCRemoteSwiftPackageReference section */ /* Begin XCSwiftPackageProductDependency section */ @@ -5379,11 +5340,6 @@ package = CEF7F5932AEEDCC400E34952 /* XCRemoteSwiftPackageReference "InAppSettingsKit" */; productName = InAppSettingsKit; }; - CEF7F5942AEEDCC400E34952 /* QEMUKit */ = { - isa = XCSwiftPackageProductDependency; - package = CEF7F5952AEEDCC400E34952 /* XCRemoteSwiftPackageReference "QEMUKit" */; - productName = QEMUKit; - }; CEF7F6D52AEEEF7D00E34952 /* CocoaSpiceNoUsb */ = { isa = XCSwiftPackageProductDependency; package = 84B36D1C27B3261E00C22685 /* XCRemoteSwiftPackageReference "CocoaSpice" */;