Virtualization Studio for macOS
https://chat.deepseek.com/a/chat/s/0068fc37-1449-4a08-b183-0534fea2c7ca
A native macOS virtual machine manager built using Apple's Virtualization framework, providing Parallels-like functionality with modern Swift and SwiftUI. 🏗️ System Architecture High-Level Architecture Overview text
┌─────────────────────────────────────────────────────────────┐ │ Presentation Layer │ ├─────────────────────────────────────────────────────────────┤ │ Business Logic Layer │ ├─────────────────────────────────────────────────────────────┤ │ Services Layer │ ├─────────────────────────────────────────────────────────────┤ │ Core Framework Layer │ └─────────────────────────────────────────────────────────────┘
graph TB A[Presentation Layer] --> B[Business Logic Layer] B --> C[Services Layer] C --> D[Core Framework Layer]
A1[SwiftUI Views] --> A
B1[ViewModels] --> B
C1[VM Engine] --> C
C2[Storage Manager] --> C
C3[Network Manager] --> C
D1[Virtualization Framework] --> D
📁 Project Structure text
VirtualizationStudio/ ├── App/ ├── Sources/ │ ├── Core/ │ ├── Features/ │ ├── Shared/ │ └── Resources/ ├── Tests/ ├── Documentation/ └── Tools/
🧩 Core Modules
- App Module (App/)
Entry point and app configuration text
App/ ├── AppDelegate.swift ├── VirtualizationStudioApp.swift └── Config/ ├── AppConfiguration.swift └── BuildSettings.swift
Responsibilities:
App lifecycle management
Global dependency injection setup
App configuration and constants
- Core Module (Sources/Core/)
Foundation layer with domain models and utilities 2.1 Domain Models (Core/Domain/) text
Core/ ├── Domain/ │ ├── Models/ │ │ ├── VirtualMachine.swift │ │ ├── VMConfiguration.swift │ │ ├── VMHardware.swift │ │ ├── VMStorage.swift │ │ └── VMNetwork.swift │ └── Enums/ │ ├── VMState.swift │ ├── OSFamily.swift │ └── VMAction.swift
Key Models: swift
struct VirtualMachine: Identifiable { let id: UUID let name: String let configuration: VMConfiguration var state: VMState let createdDate: Date let modifiedDate: Date }
struct VMConfiguration { let hardware: VMHardware let storage: [VMStorageDevice] let network: [VMNetworkDevice] let display: VMDisplayConfig let sharing: VMSharingConfig }
2.2 Utilities (Core/Utilities/) text
Core/ ├── Utilities/ │ ├── Extensions/ │ │ ├── Date+Extensions.swift │ │ ├── String+Extensions.swift │ │ └── Color+Extensions.swift │ ├── Formatters/ │ │ ├── ByteCountFormatter.swift │ │ └── DurationFormatter.swift │ └── Logging/ │ └── Logger.swift
- Features Module (Sources/Features/)
Feature-based modular architecture 3.1 VM Dashboard Feature (Features/VMDashboard/) text
Features/ ├── VMDashboard/ │ ├── ViewModels/ │ │ └── VMDashboardViewModel.swift │ ├── Views/ │ │ ├── VMDashboardView.swift │ │ ├── VMListView.swift │ │ └── VMGridItemView.swift │ ├── Models/ │ │ └── DashboardModels.swift │ └── Services/ │ └── DashboardService.swift
3.2 VM Creation Wizard (Features/VMCreation/) text
Features/ ├── VMCreation/ │ ├── ViewModels/ │ │ └── VMCreationViewModel.swift │ ├── Views/ │ │ ├── VMCreationWizardView.swift │ │ ├── OSSelectionView.swift │ │ ├── HardwareConfigView.swift │ │ ├── StorageConfigView.swift │ │ └── NetworkConfigView.swift │ ├── Models/ │ │ └── CreationModels.swift │ └── Services/ │ └── VMCreationService.swift
3.3 VM Runtime (Features/VMRuntime/) text
Features/ ├── VMRuntime/ │ ├── ViewModels/ │ │ └── VMRuntimeViewModel.swift │ ├── Views/ │ │ ├── VMPlayerView.swift │ │ ├── VMToolbarView.swift │ │ └── VMDisplayView.swift │ ├── Models/ │ │ └── RuntimeModels.swift │ └── Services/ │ └── VMRuntimeService.swift
3.4 Settings (Features/Settings/) text
Features/ ├── Settings/ │ ├── ViewModels/ │ │ └── SettingsViewModel.swift │ ├── Views/ │ │ ├── SettingsView.swift │ │ ├── GeneralSettingsView.swift │ │ ├── NetworkSettingsView.swift │ │ └── AdvancedSettingsView.swift │ └── Services/ │ └── SettingsService.swift
- Services Module (Sources/Services/)
Business logic and data management 4.1 Core Services (Services/Core/) text
Services/ ├── Core/ │ ├── VMEngine/ │ │ ├── VMEngine.swift │ │ ├── VMConfigurationBuilder.swift │ │ └── VMValidators.swift │ ├── Storage/ │ │ ├── VMStorageManager.swift │ │ ├── DiskImageManager.swift │ │ └── SnapshotManager.swift │ └── Network/ │ ├── VMNetworkManager.swift │ └── NetworkService.swift
4.2 Manager Services (Services/Managers/) text
Services/ ├── Managers/ │ ├── VMManager.swift │ ├── OSInstallationManager.swift │ ├── GuestToolsManager.swift │ └── ResourceMonitor.swift
- Shared Module (Sources/Shared/)
Cross-cutting concerns and shared components 5.1 UI Components (Shared/UI/) text
Shared/ ├── UI/ │ ├── Components/ │ │ ├── Buttons/ │ │ │ ├── PrimaryButton.swift │ │ │ └── IconButton.swift │ │ ├── Controls/ │ │ │ ├── ToggleSwitch.swift │ │ │ └── SliderView.swift │ │ ├── Indicators/ │ │ │ ├── LoadingView.swift │ │ │ └── ProgressIndicator.swift │ │ └── Cards/ │ │ └── VMCardView.swift │ └── Themes/ │ ├── AppTheme.swift │ └── ColorPalette.swift
5.2 Protocols (Shared/Protocols/) text
Shared/ ├── Protocols/ │ ├── VMProvidable.swift │ ├── VMPersistable.swift │ ├── Configurable.swift │ └── ObservableVMState.swift
🔧 Technical Implementation Virtualization Framework Integration VM Engine Service swift
protocol VMEngine { func createVM(configuration: VMConfiguration) throws -> VZVirtualMachine func start(vm: VZVirtualMachine) async throws func stop(vm: VZVirtualMachine) async throws func pause(vm: VZVirtualMachine) async throws func resume(vm: VZVirtualMachine) async throws }
Configuration Builders swift
class VMConfigurationBuilder { func buildLinuxConfiguration(config: VMLinuxConfig) -> VZVirtualMachineConfiguration func buildMacOSConfiguration(config: VMMacOSConfig) throws -> VZVirtualMachineConfiguration func buildWindowsConfiguration(config: VMWindowsConfig) -> VZVirtualMachineConfiguration }
🗂️ Data Flow State Management text
User Action → View → ViewModel → Service → VM Engine → Virtualization Framework ↓ State Update ← ViewModel ← Service ← VM Engine
Dependency Injection swift
struct DIContainer { let vmManager: VMManager let storageManager: VMStorageManager let networkManager: VMNetworkManager let settingsService: SettingsService }
📱 User Interface Architecture SwiftUI View Hierarchy text
VirtualizationStudioApp ├── AppContentView │ ├── SidebarView │ ├── MainContentView │ │ ├── VMDashboardView │ │ ├── VMPlayerView │ │ └── SettingsView │ └── BottomToolbarView
Navigation Structure
Sidebar: VM list and categories
Main Content: Dynamic based on selection
Toolbar: Context-aware actions
Modals: Creation wizards and settings
🔒 Security & Permissions Entitlements Required xml
com.apple.security.virtualization com.apple.security.network.server com.apple.security.files.user-selected.read-write
Sandbox Configuration
Network access for NAT/bridged networking
File system access for disk images
User-selected folder access for sharing
🧪 Testing Strategy Test Structure text
Tests/ ├── UnitTests/ │ ├── Core/ │ ├── Services/ │ └── ViewModels/ ├── IntegrationTests/ │ └── VMEndToEndTests.swift └── UITests/ ├── VMDashboardUITests.swift └── VMCreationUITests.swift
🚀 Build & Deployment Build Configuration
Minimum Deployment: macOS 13.0 (Ventura)
Swift Version: 5.9+
Architectures: Apple Silicon (arm64) + Intel (x86_64)
Development Setup bash
git clone https://github.com/your-username/VirtualizationStudio.git
open VirtualizationStudio.xcodeproj
xcodebuild -project VirtualizationStudio.xcodeproj -scheme VirtualizationStudio build
📈 Performance Considerations Memory Management
Lazy loading of VM states
Efficient disk image handling
Background operations for snapshots
Resource Monitoring
Real-time CPU/memory usage tracking
Disk I/O performance metrics
Network bandwidth monitoring
🔄 Future Extensibility Plugin Architecture swift
protocol VMPlugin { func configure(vm: VZVirtualMachine) func willStart(vm: VZVirtualMachine) func didStop(vm: VZVirtualMachine) }
Supported Guest OS Types
macOS (Apple Silicon only)
Linux Distributions (Ubuntu, Fedora, etc.)
Windows 11 for ARM
FreeBSD and other Unix-like systems
🎯 Getting Started
Prerequisites: macOS 13.0+, Xcode 15.0+
Setup: Clone repo and open in Xcode
Build: Enable Hardened Runtime and Virtualization entitlement
Run: Launch app and create your first VM