Estoy construyendo una app de menu bar para macOS. Funciona perfecta en mi Mac. Ahora necesito saber si funciona en un macOS limpio: sin mis configuraciones, sin mis permisos, sin mis datos. Un usuario que la instale de cero.
¿Cómo testeas eso? Pues necesitas una máquina virtual.
«Fácil», pensé. «Tengo UTM instalado. Abro el wizard, creo una VM macOS, y a correr.»
No iba a ser tan fácil.
UTM: bonito pero indomable
UTM es una aplicación estupenda. Interfaz cuidada, soporte para macOS como guest en Apple Silicon, pantalla completa, portapapeles compartido. Para usar a mano es genial.
El problema viene cuando intentas automatizarlo.
UTM tiene un CLI llamado utmctl. Puede listar VMs, arrancarlas, pararlas, clonarlas. Lo que no puede hacer es crear una VM. Y para macOS guest, ni siquiera el AppleScript de UTM permite crearlas — el campo del sistema operativo está hardcodeado a Linux.
Dicho en cristiano: si quieres una VM macOS en UTM, la creas a mano por el wizard. Cada vez. Con sus clicks, su descarga del IPSW (la imagen de instalación de macOS para Apple Silicon — el equivalente a un ISO de toda la vida, pero empaquetado por Apple), su espera de instalación.
Para un dev que necesita levantar y destruir VMs como parte de un flujo de QA, eso es un coñazo.
Tart: VMs macOS for the rest of us
Tart es lo que pasa cuando alguien diseña una herramienta de virtualización pensando en desarrolladores en vez de en usuarios finales.
Usa exactamente el mismo Virtualization.framework de Apple que UTM. Misma tecnología, mismas prestaciones, misma velocidad nativa. La diferencia es la interfaz: Tart es CLI-first.
brew install cirruslabs/cli/tart
Ya está. No hay GUI de configuración, no hay wizard. Un binario en tu PATH.
Un comando para gobernarlos a todos
Crear una VM macOS con la última versión disponible:
tart create mi-vm --from-ipsw latest
Eso es todo. latest le dice a Tart «dame la última versión de macOS que soporte este Mac». Tart consulta la API de Apple, descarga el IPSW (~15 GB — sí, macOS pesa lo suyo), crea el disco virtual, instala el sistema operativo y te deja la VM lista para arrancar. Ve a por un café, porque tarda un rato — pero no necesitas tocar nada.
Arrancar la VM:
tart run mi-vm
Se abre una ventana con el escritorio de macOS. Ratón, teclado, pantalla. Exactamente igual que UTM, pero lanzado desde un tart run.
Carpeta compartida: el detalle que marca la diferencia
Aquí es donde Tart me conquistó. Necesito copiar mi app desde el Mac host a la VM. En UTM hay que configurar VirtioFS manualmente, montarlo desde la terminal del guest, y rezar para que el config.plist no se corrompa (hay bugs conocidos).
En Tart:
tart run mi-vm --dir=shared:~/code/tokamak/build
Dentro de la VM, la carpeta aparece en /Volumes/My Shared Files/shared. Arrastras la app a /Applications y listo. Sin configurar nada, sin montar nada.
Mi flujo de QA real
Esto es lo que hago para testear mi app en un macOS limpio:
# Crear la VM (solo la primera vez)
tart create tokamak-qa --from-ipsw latest --disk-size 50
# Compilar la app
cd ~/code/tokamak && make build
# Arrancar la VM con la build compartida
tart run tokamak-qa --dir=build:~/code/tokamak/build/Build/Products/Debug
Dentro de la VM:
1. Abro /Volumes/My Shared Files/build/
2. Arrastro Tokamak.app a /Applications/
3. Ejecuto y verifico: login, permisos, sandbox, menú bar, notificaciones
Si necesito empezar de cero (testear el first launch experience):
tart delete tokamak-qa
tart create tokamak-qa --from-ipsw latest --disk-size 50
Destruir y recrear. Sin preguntas, sin confirmaciones, sin wizard.
Configurar recursos
Por defecto Tart asigna recursos razonables, pero puedes ajustarlos:
# 4 cores, 8 GB RAM
tart set mi-vm --cpu 4 --memory 8192
# Redimensionar disco
tart set mi-vm --disk-size 80
Lo que Tart no tiene (y por qué no importa)
No tiene una GUI de gestión con thumbnails de cada VM. No tiene drag and drop para ISOs. No tiene un botón bonito de «Nueva VM».
Si lo que necesitas es una app de escritorio para gestionar VMs, usa UTM. Es fantástico para eso.
Pero si lo que necesitas es testear tu app en un macOS limpio, destruir la VM, volver a crearla, compartir una carpeta, y hacer todo eso desde un script o un Makefile… UTM no puede. Tart sí.
La receta completa
# Instalar
brew install cirruslabs/cli/tart
# Crear VM macOS (descarga ~15 GB, tarda ~20 min)
tart create test-vm --from-ipsw latest --disk-size 50
# Arrancar con carpeta compartida
tart run test-vm --dir=app:~/mi-proyecto/build
# Otros comandos útiles
tart list # VMs existentes
tart stop test-vm # Parar
tart clone test-vm copia-vm # Clonar (rápido)
tart delete test-vm # Eliminar
tart ip test-vm # IP para SSH
La documentación cabe en un README. La curva de aprendizaje cabe en un café. Si desarrollas para macOS y no estás usando Tart, estás haciendo las cosas más difíciles de lo necesario.
Read this article in English.



