Virtualization Framework Workflow
Purpose
Implement one explicit macOS or Linux Virtualization framework path without flattening their platform, boot, identity, or device differences.
When To Use
- Use for
VZVirtualMachineConfiguration, guest devices,VZVirtualMachine,VZVirtualMachineView, lifecycle, and diagnostics. - Use when building a custom VM host app or Swift package rather than operating an existing VM manager.
- Use for save/restore capability checks, not as a general snapshot-product workflow.
Single-Path Workflow
- Read current Xcode-local Virtualization documentation for every selected API and availability gate.
- Consume or create the virtualization shape record.
- Choose the guest family using macOS and Linux guest matrix:
- macOS: Mac platform identity, macOS boot loader, restore-image compatibility, auxiliary storage
- Linux/generic: generic platform, Linux or EFI boot, kernel/initrd/command line or EFI disk
- Separate the implementation into configuration construction, bundle/artifact persistence, VM lifecycle, and optional UI ownership. Make a headless console/service path or
VZVirtualMachineViewownership explicit rather than creating both accidentally. - Add only required devices after checking device and availability matrix.
- Require the virtualization entitlement, supported CPU/memory values, exact OS availability, and
validate()before start. - Model start, pause, resume, stop, and state transitions explicitly. Save/restore only in documented states with a configuration compatible with the saved state.
- Validate configuration, boot, console/UI, disk, network, shares, services, shutdown, and teardown at the narrowest relevant level.
- Preserve the failed configuration surface, VM state, host/guest versions, underlying error, and likely cause.
Inputs
- Completed virtualization shape record.
- Guest family, boot source, identity artifacts, disks, devices, resources, UI needs, and lifecycle requirements.
- Host macOS/Xcode version and target deployment version.
Outputs
status:success,handoff, orblocked.- Documented configuration and availability decisions.
- Separate configuration, artifact, lifecycle, and UI ownership.
- Validation evidence and exact diagnostics.
Guards and Stop Conditions
- Do not start before configuration validation succeeds.
- Do not reuse a macOS hardware model, machine identifier, or auxiliary storage as if it were a generic Linux platform.
- Do not expose shares, clipboard, sockets, devices, audio input, or USB without a stated need.
- Do not call saved machine state a disk snapshot, clone, or portable VM bundle.
- Do not promise nested virtualization, Rosetta, clipboard, USB, or save/restore without guest and OS capability proof.
- Stop when the restore image, boot artifacts, entitlement, host support, configuration compatibility, or disk ownership is unresolved.
- Announce before any visible or resource-intensive launch.
Fallbacks and Handoffs
- Use
choose-macos-virtualization-shapewhen the boundary is undecided. - Use
linux-development-vm-workflowormacos-development-vm-workflowfor guest preparation and reset strategy. - Use
xcode-build-run-workflowfor target membership, entitlement wiring, and app-project integration. - Use
xcode-build-run-workflowandxcode-testing-workflowfor execution and tests. - Use
prepare-isolated-analysis-labfor hostile-workload control policy.
References
- macOS and Linux guest matrix
- Device and availability matrix
- Apple Virtualization framework
- Recommend Apple Xcode project core when editing an Xcode project.