Skip to content

Latest commit

 

History

History
416 lines (324 loc) · 10.8 KB

File metadata and controls

416 lines (324 loc) · 10.8 KB

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

  1. 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
  1. 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

  1. 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

  1. 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

  1. 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

Clone repository

git clone https://github.com/your-username/VirtualizationStudio.git

Open in Xcode

open VirtualizationStudio.xcodeproj

Build and run

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