
Si tienes un despliegue de SaaS Dedicado, comunícate con tu account team para habilitar las VMs de macOS.
Cómo funciona
La compatibilidad con macOS se basa en el mismo sistema de configuración declarativa que Linux. El camporuns-on de tu blueprint le indica a Devin en qué plataforma compilar y ejecutar, y cada plataforma tiene su propia instantánea.
Las principales diferencias respecto a Linux son el shell, la estructura del sistema de archivos y el gestor de paquetes:
Iniciar una sesión de macOS
Puedes elegir macOS en cada sesión:- Blueprint: agrega
runs-on: macospara que la instantánea del repo se compile para macOS (consulta más abajo). - Slack: usa el bang command
!macpara iniciar una sesión en una VM de macOS. - API: establece
platform: "macos"al crear una sesión, una programación o una automatización. Consulta la referencia de la API. - Valor predeterminado de la organización: un administrador puede establecer macOS como plataforma predeterminada para las nuevas sesiones en Settings → Devin → Default platform o mediante la API Set Organization Default Platform. Para consultar el valor actual, usa Get Organization Default Platform.
Escribir blueprints de macOS
Blueprint de una sola plataforma
Si tu repositorio solo está dirigido a plataformas de Apple, usaruns-on: macos en el nivel superior:
Blueprint multiplataforma
Para compilar el mismo repositorio en más de una plataforma, escribe cada plataforma como un documento YAML independiente separado por---. Cada documento declara su propia etiqueta runs-on. Consulta el aviso YAML multidocumento en la guía de blueprints para obtener más contexto sobre este formato.
El campo runs-on
El campo runs-on se asigna a una configuración de máquina registrada en tu cuenta:
Puedes especificar
runs-on como una cadena o como una lista:
Consumo y costo
Actualmente, las sesiones de macOS consumen lo mismo que las sesiones equivalentes de Linux, sin recargo por macOS.Se trata de un precio promocional de lanzamiento y está sujeto a cambios.
Qué viene preinstalado
Las imágenes de sesión de macOS incluyen la cadena de herramientas de Apple ya instalada, así que tu blueprint no necesita descargarla:
Las versiones cambian a medida que Apple publica nuevas versiones y se actualiza la imagen. Para ver exactamente qué incluye una sesión, pídele a Devin que ejecute:
Selección de una versión de Xcode
El Xcode predeterminado es aquel al que apuntaxcode-select. Para usar otra versión instalada en un solo comando, define DEVELOPER_DIR:
/usr/bin/xcodebuild (el shim que respeta DEVELOPER_DIR) en lugar de un xcodebuild resuelto desde el directorio Contents/Developer/usr/bin de un Xcode específico presente en el PATH, ya que este informa su propia versión sin tener en cuenta DEVELOPER_DIR.
O cambia el valor predeterminado para toda la sesión:
Comportamiento de las sesiones en macOS
Shell
Las sesiones de macOS usan zsh como shell predeterminado. La mayoría de los comandos de shell POSIX funcionan sin cambios respecto a los blueprints de Linux, pero ten en cuenta el userland de BSD:sed -i requiere un argumento (sed -i ''), y las herramientas GNU como gsed, gdate y greadlink provienen de la fórmula coreutils de Homebrew.
Rutas
/Users/devin/repos/<repo-name>, y los archivos que subes a una sesión se guardan en /Users/devin/.files/.
Secretos
Los secretos están disponibles como variables de entorno durante las sesiones ($SECRET_NAME), igual que en Linux. Así es como se proporcionan las claves de API de App Store Connect, las credenciales de firma o los tokens de registries privados:
Suspensión y reactivación de la sesión
Las sesiones crean una instantánea en disco cuando duermen. Todo lo que está en disco sobrevive a la reactivación: herramientas instaladas, repos clonados, cachés de compilación y datos derivados. Los procesos en ejecución no: los servidores de desarrollo, los simuladores y los watchers deben reiniciarse cuando la sesión se reactiva.Computer Use
Computer Use funciona en sesiones de macOS: Devin dispone de un escritorio completo de macOS con Chrome, ratón y teclado, puede probar tanto aplicaciones nativas de macOS como aplicaciones web y grabar lo que hace. Devin usa la tecla Command para los atajos de macOS (⌘C, ⌘V, ⌘Tab) en lugar de Control.iOS Simulator
Devin puede iniciar y controlar directamente el iOS Simulator:Consejos y trucos
Cachés de compilación precalentadas
Una compilación en frío de Xcode ofrece una experiencia de desarrollo poco óptima, con tiempos de compilación más largos. Usa el campomaintenance de environment.yml para precalentar la caché.
Acceso a la red
Las compilaciones que descargan desde CocoaPods, Swift Package Manager, Firebase o un registry privado necesitan que esos hosts sean accesibles. Si tu organización opera con una política de red restringida, asegúrate de que la allowlist de macOS incluya los mismos registries que usan tus compilaciones de Linux. Ambas se configuran por separado, y la falta de una entry suele manifestarse como un fallo de resolución de dependencias o de TLS a mitad de una compilación.Ejecución de contenedores
Las VM de macOS no cuentan con virtualización de hardware anidada, por lo que un runtime de contenedores tiene que recurrir a la emulación por software de QEMU (TCG). Colima detecta esto y cambia a emulación automáticamente:colima start si falla. Después, los contenedores se ejecutan en CPU entre 15 y 25 veces más lento que de forma nativa, con unos segundos de arranque cada uno; las descargas van a la velocidad de la red del host. Es aceptable para un contenedor de linting o de empaquetado, pero desesperante para compilar. Para trabajos con mucha carga de contenedores, usa una sesión de Linux o apunta la sesión de macOS a un demonio de Docker remoto.
No instales Xcode en un blueprint a menos que sea imprescindible
Xcode es una descarga de varios gigabytes y Apple exige un Apple ID para obtenerlo. Es preferible usar las versiones ya incluidas en la imagen, seleccionadas conDEVELOPER_DIR o xcode-select. Si necesitas una versión distinta o una beta, puedes almacenar un Apple ID como secreto y hacer que el blueprint descargue esa versión, a costa de una compilación mucho más lenta.
Limitaciones
Solución de problemas
Las compilaciones son mucho más lentas en la primera sesión tras reconstruir una instantánea. DerivedData se reconstruyó desde cero. Agrega un pasobuild-for-testing a maintenance para que la instantánea conserve una compilación ya calentada.
xcodebuild elige la cadena de herramientas incorrecta. Revisa xcode-select -p y define DEVELOPER_DIR de forma explícita en el paso del blueprint.
No se encuentra un destino. Ejecuta xcrun simctl list devices available para ver qué ofrecen realmente los runtimes instalados y haz coincidir con ello el nombre y el sistema operativo de -destination.
La resolución de dependencias se queda bloqueada o falla con un error de TLS. Lo más probable es que el host no esté en la lista de permitidos de red de tu organización para macOS. Consulta Acceso a la red.
