View in English

  • Apple Developer
    • Get Started

    Explore Get Started

    • Overview
    • Learn
    • Apple Developer Program

    Stay Updated

    • Latest News
    • Hello Developer
    • Platforms

    Explore Platforms

    • Apple Platforms
    • iOS
    • iPadOS
    • macOS
    • tvOS
    • visionOS
    • watchOS
    • App Store

    Featured

    • Design
    • Distribution
    • Games
    • Accessories
    • Web
    • Home
    • CarPlay
    • Technologies

    Explore Technologies

    • Overview
    • Xcode
    • Swift
    • SwiftUI

    Featured

    • Accessibility
    • AI & Machine Learning
    • App Intents
    • Apple Intelligence
    • Games
    • Security
    • Xcode Cloud
    • Community

    Explore Community

    • Overview
    • Meet with Apple events
    • Community-driven events
    • Developer Forums
    • Open Source

    Featured

    • WWDC
    • Swift Student Challenge
    • Developer Stories
    • App Store Awards
    • Apple Design Awards
    • Apple Developer Centers
    • Documentation

    Explore Documentation

    • Documentation Library
    • Technology Overviews
    • Sample Code
    • Human Interface Guidelines
    • Videos

    Release Notes

    • Featured Updates
    • iOS
    • iPadOS
    • macOS
    • watchOS
    • visionOS
    • tvOS
    • Xcode
    • Downloads

    Explore Downloads

    • All Downloads
    • Operating Systems
    • Applications
    • Design Resources

    Featured

    • Xcode
    • TestFlight
    • Fonts
    • SF Symbols
    • Icon Composer
    • Support

    Explore Support

    • Overview
    • Help Guides
    • Developer Forums
    • Feedback Assistant
    • Contact Us

    Featured

    • Account Help
    • App Review Guidelines
    • App Store Connect Help
    • Upcoming Requirements
    • Agreements and Guidelines
    • System Status
  • Quick Links

    • Events
    • News
    • Forums
    • Sample Code
    • Videos
 

Vídeos

Abrir menu Fechar menu
  • Coleções
  • Todos os vídeos
  • Sobre

Mais vídeos

  • Sobre
  • Código
  • Amplie os recursos de apps baseados no Virtualization

    Adicione novos recursos poderosos do macOS 27 ao seu app baseado no Virtualization. Saiba como automatizar a configuração de convidados do macOS por meio da configuração de contas de usuário na primeira inicialização. Vamos explorar fluxos de trabalho avançados que envolvem passagem direta de acessórios USB para máquinas virtuais, bem como topologias de rede personalizadas e encaminhamento de portas. Você também conhecerá as melhorias recentes que podem aprimorar a experiência de execução das máquinas virtuais do seu app.

    Capítulos

    • 0:01 - Introdução
    • 1:04 - Provisionamento de usuários convidados no macOS
    • 4:34 - Acesso a acessórios
    • 8:26 - Topologias de rede avançadas
    • 11:35 - DiskImageKit
    • 15:57 - Virtio personalizado

    Recursos

    • DiskImageKit
    • Accessory Access
    • vmnet
    • Virtual I/O Device (VIRTIO) Version 1.4
    • Virtualization
      • Vídeo HD
      • Vídeo SD

    Vídeos relacionados

    WWDC26

    • Descubra as máquinas de contêiner
  • Buscar neste vídeo...
    • 1:57 - Provision a macOS guest

      import Virtualization
      
      let provisioningOptions = VZMacGuestProvisioningOptions()
      provisioningOptions.fullName = fullName
      provisioningOptions.username = username
      provisioningOptions.password = password
      provisioningOptions.logsInAutomatically = true
      provisioningOptions.enablesRemoteLogin = true
      
      let startOptions = VZMacOSVirtualMachineStartOptions()
      try startOptions.setGuestProvisioning(provisioningOptions)
      
      try await virtualMachine.start(options: startOptions)
    • 7:12 - Register an Accessory Access listener

      import AccessoryAccess
      
      let criteria: [AAUSBAccessoryMatchingCriteria] = []
      let accessories = try await AAUSBAccessoryManager.shared.registerListener(self, matchingCriteria: criteria)
      
      for accessory in accessories {
          // Handle previously attached accessories.
      }
    • 7:39 - Respond to USB accessory connection

      import AccessoryAccess
      import Virtualization
      
      class AccessoryListener: NSObject, AAUSBAccessoryListener {
          func usbAccessoryDidConnect(_ usbAccessory: AAUSBAccessory) {
              virtualMachine.queue.async {
                  do {
                      let configuration = VZUSBPassthroughDeviceConfiguration(device: usbAccessory)
                      let device = try VZUSBPassthroughDevice(configuration: configuration)
                      self.virtualMachine.usbControllers.first?.attach(device: device) { error in
                          // Handle error if necessary...
                      }
                  } catch {
                      // Handle error...
                  }
              }
          }
      }
    • 10:04 - Create a custom vmnet network

      import Virtualization
      import vmnet
      
      var status: vmnet_return_t = .VMNET_FAILURE
      guard let networkConfiguration =
          vmnet_network_configuration_create(.VMNET_SHARED_MODE, &status) else { ... }
      
      guard let network =
          vmnet_network_create(networkConfiguration, &status) else { ... }
      
      let attachment = VZVmnetNetworkDeviceAttachment(network: network)
      
      let networkDeviceConfiguration = VZVirtioNetworkDeviceConfiguration()
      networkDeviceConfiguration.attachment = attachment
      
      virtualMachineConfiguration.networkDevices = [networkDeviceConfiguration]
      
      let virtualMachine = VZVirtualMachine(configuration: virtualMachineConfiguration)
    • 14:54 - Use DiskImageKit with Virtualization

      import DiskImageKit
      import Virtualization
      
      let baseImage = try DiskImage(opening: .open(url: baseLayerURL, mode: .readOnly))
      let cacheImage = try baseImage.appending(.asifLayer(url: cacheLayerURL, type: .cache))
      let overlayImage = try DiskImage(opening: .open(url: overlayLayerURL))
      let stackedImage = try cacheImage.appending(overlayImage)
      
      let storageDeviceAttachment = try VZDiskImageStorageDeviceAttachment(diskImage: stackedImage)
      
      let storageDeviceConfiguration =
          VZVirtioBlockDeviceConfiguration(attachment: storageDeviceAttachment)
      
      virtualMachineConfiguration.storageDevices = [storageDeviceConfiguration]
      
      let virtualMachine = VZVirtualMachine(configuration: virtualMachineConfiguration)
    • 17:41 - Configure a custom Virtio device

      import Virtualization
      
      let deviceConfiguration = VZCustomVirtioDeviceConfiguration()
      
      // Virtio entropy device.
      deviceConfiguration.deviceID = 4
      // PCI class for crypto devices.
      deviceConfiguration.pciClassID = 0x10
      // PCI subclass for network and computing encryption controllers.
      deviceConfiguration.pciSubclassID = 0x00
      // An entropy device uses a single Virtio queue.
      deviceConfiguration.virtioQueueCount = 1
      
      deviceConfiguration.provider =
          VZCustomVirtioDeviceDelegateProvider(deviceQueue: deviceQueue, delegate: provider)
      
      virtualMachineConfiguration.customVirtioDevices = [deviceConfiguration]
      
      let virtualMachine = VZVirtualMachine(configuration: virtualMachineConfiguration)
    • 18:20 - Attach a delegate to a VZCustomVirtioDevice

      import Virtualization
      
      class DeviceConfigurationDelegate: NSObject, VZCustomVirtioDeviceConfigurationDelegate {
          func customVirtioConfiguration(_ deviceConfiguration: VZCustomVirtioDeviceConfiguration,
                                         didCreateDevice device: VZCustomVirtioDevice) {
              device.delegate = deviceDelegate
              self.device = device
          }
      }
    • 18:42 - Process Virtio queue elements

      import Virtualization
      
      class DeviceDelegate: NSObject, VZCustomVirtioDeviceDelegate {
          func customVirtioDevice(_ device: VZCustomVirtioDevice,
                                  didReceiveNotificationFor queue: VZVirtioQueue) {
              while let element = queue.nextElement() {
                  // Process element...
                  element.returnToQueue()
              }
          }
      }

Developer Footer

  • Vídeos
  • WWDC26
  • Amplie os recursos de apps baseados no Virtualization
  • Open Menu Close Menu
    • iOS
    • iPadOS
    • macOS
    • tvOS
    • visionOS
    • watchOS
    • App Store
    Open Menu Close Menu
    • Swift
    • SwiftUI
    • Swift Playground
    • TestFlight
    • Xcode
    • Xcode Cloud
    • Icon Composer
    • SF Symbols
    Open Menu Close Menu
    • Accessibility
    • Accessories
    • AI & Machine Learning
    • Apple Intelligence
    • Audio & Video
    • Augmented Reality
    • Business
    • Design
    • Distribution
    • Education
    • Games
    • Health & Fitness
    • In-App Purchase
    • Localization
    • Maps & Location
    • Security
    • Safari & Web
    Open Menu Close Menu
    • Documentation
    • Downloads
    • Sample Code
    • Videos
    • Documentation Archive
    Open Menu Close Menu
    • Help Guides & Articles
    • Contact Us
    • Forums
    • Feedback & Bug Reporting
    • System Status
    Open Menu Close Menu
    • Apple Developer
    • App Store Connect
    • Certificates, IDs, & Profiles
    • Feedback Assistant
    Open Menu Close Menu
    • Apple Developer Program
    • Apple Developer Enterprise Program
    • App Store Small Business Program
    • MFi Program
    • Mini Apps Partner Program
    • News Partner Program
    • Video Partner Program
    • Security Bounty Program
    • Security Research Device Program
    Open Menu Close Menu
    • Meet with Apple
    • Apple Developer Centers
    • App Store Awards
    • Apple Design Awards
    • Apple Developer Academies
    • WWDC
    Read the latest news.
    Get the Apple Developer app.
    Copyright © 2026 Apple Inc. All rights reserved.
    Terms of Use Privacy Policy Agreements and Guidelines