
Si vous utilisez un déploiement Dedicated SaaS, contactez votre account team pour activer les VM macOS.
Fonctionnement
La prise en charge de macOS repose sur le même système de configuration déclarative que Linux. Le champruns-on de votre blueprint indique à Devin sur quelle plateforme effectuer le build et l’exécution, et chaque plateforme dispose de son propre snapshot.
Les principales différences par rapport à Linux concernent le shell, l’organisation du système de fichiers et le package manager :
Démarrer une session macOS
Vous pouvez choisir macOS pour chaque session :- Blueprint : ajoutez
runs-on: macosafin que le snapshot du repo soit construit pour macOS (voir ci-dessous). - Slack : utilisez la bang command
!macpour démarrer une session sur une VM macOS. - API : définissez
platform: "macos"lors de la création d’une session, d’une planification ou d’une automation. Consultez l’API reference. - Valeur par défaut de l’organisation : un admin peut définir macOS comme plateforme par défaut des nouvelles sessions dans Settings → Devin → Default platform, ou via l’API Set Organization Default Platform. Pour connaître la valeur actuelle, utilisez Get Organization Default Platform.
Rédiger des blueprints macOS
Blueprint monoplateforme
Si votre repository cible uniquement les plateformes Apple, utilisezruns-on: macos au niveau supérieur :
Blueprint multiplateforme
Pour builder le même repository sur plusieurs plateformes, écrivez chaque plateforme dans un document YAML distinct, séparé par---. Chaque document déclare son propre libellé runs-on. Consultez l’encadré Multi-document YAML du guide des blueprints pour plus de contexte sur ce format.
Le champ runs-on
Le champ runs-on correspond à une configuration de machine enregistrée sur votre compte :
Vous pouvez spécifier
runs-on sous forme de chaîne ou de liste :
Utilisation et coût
Les sessions macOS génèrent actuellement la même utilisation que les sessions Linux équivalentes, sans supplément pour macOS.Il s’agit d’une tarification promotionnelle de lancement, susceptible d’être modifiée.
Ce qui est préinstallé
Les images de session macOS sont livrées avec la chaîne d’outils Apple déjà installée, afin que votre blueprint n’ait pas à la télécharger :
Les versions évoluent au fil des nouvelles releases d’Apple et des mises à jour de l’image. Pour savoir exactement ce dont dispose une session, demandez à Devin d’exécuter :
Sélectionner une version de Xcode
La version de Xcode par défaut est celle vers laquelle pointexcode-select. Pour utiliser une autre version installée le temps d’une seule commande, définissez DEVELOPER_DIR :
/usr/bin/xcodebuild (le shim qui respecte DEVELOPER_DIR) plutôt qu’un xcodebuild résolu depuis le dossier Contents/Developer/usr/bin d’un Xcode spécifique présent dans le PATH : ce dernier renvoie sa propre version sans tenir compte de DEVELOPER_DIR.
Vous pouvez aussi changer la valeur par défaut pour toute la session :
Comportement des sessions macOS
Shell
Les sessions macOS utilisent zsh comme shell par défaut. La plupart des commandes shell POSIX fonctionnent sans modification par rapport aux blueprints Linux, mais attention à l’espace utilisateur BSD :sed -i exige un argument (sed -i ''), et les outils GNU comme gsed, gdate et greadlink proviennent de la formule Homebrew coreutils.
Chemins
/Users/devin/repos/<repo-name>, et les fichiers que vous uploadez dans une session sont écrits dans /Users/devin/.files/.
Secrets
Les secrets sont exposés sous forme de variables d’environnement pendant les sessions ($SECRET_NAME), comme sous Linux. C’est ainsi que vous fournissez les API keys App Store Connect, les credentials de signature ou les tokens de registre privé :
Mise en veille et sortie de veille des sessions
Lors de leur mise en veille, les sessions sont enregistrées sur le disque sous forme de snapshot. Tout ce qui se trouve sur le disque est conservé après une sortie de veille : outils installés, repos clonés, caches de build, données dérivées. Ce n’est pas le cas des processus en cours d’exécution : les serveurs de développement, les simulateurs et les watchers doivent être redémarrés une fois la session sortie de veille.Computer Use
Computer Use fonctionne sur les sessions macOS : Devin dispose d’un bureau macOS complet avec Chrome, souris et clavier, peut tester aussi bien les applications natives macOS que les applications web, et enregistrer ses actions. Devin utilise la touche Command pour les raccourcis macOS (⌘C, ⌘V, ⌘Tab) plutôt que Control.Simulateur iOS
Devin peut lancer et piloter directement le simulateur iOS :Conseils et astuces
Préchauffer les caches de build
Un build Xcode à froid dégrade l’expérience développeur, avec des temps de build plus longs. Utilisez le champmaintenance dans environment.yml pour préchauffer le cache.
Accès réseau
Les builds qui récupèrent des dépendances depuis CocoaPods, Swift Package Manager, Firebase ou un registre privé nécessitent que ces hôtes soient joignables. Si votre organisation applique une politique réseau restrictive, vérifiez que la liste d’autorisation macOS couvre les mêmes registres que vos builds Linux. Les deux se configurent séparément, et une entrée manquante se traduit généralement par un échec de résolution de dépendances ou une erreur TLS en plein milieu d’un build.Exécuter des containers
Les VM macOS ne disposent pas de virtualisation matérielle imbriquée : un environnement d’exécution de containers doit donc se replier sur l’émulation logicielle de QEMU (TCG). Colima le détecte et bascule automatiquement en mode émulation :colima start en cas d’échec. Les containers s’exécutent ensuite environ 15 à 25 fois plus lentement sur CPU qu’en natif, avec quelques secondes de démarrage chacun ; les pulls, eux, se font à la vitesse du réseau de l’hôte. C’est acceptable pour un container de linting ou d’empaquetage, mais pénible pour de la compilation. Pour les travaux reposant fortement sur les containers, utilisez une session Linux ou faites pointer la session macOS vers un démon Docker distant.
N’installez Xcode dans un blueprint qu’en cas de nécessité
Xcode pèse plusieurs gigaoctets au téléchargement, et Apple en conditionne l’accès à un Apple ID. Privilégiez les versions déjà présentes dans l’image, sélectionnées avecDEVELOPER_DIR ou xcode-select. Si vous avez besoin d’une autre version ou d’une bêta, vous pouvez stocker un Apple ID sous forme de secret et laisser le blueprint télécharger cette version, au prix d’un build bien plus lent.
Limitations
Résolution des problèmes
Les builds sont beaucoup plus lents lors de la première session suivant une reconstruction de snapshot. DerivedData a été reconstruit de zéro. Ajoutez une étapebuild-for-testing à maintenance pour que le snapshot embarque un build déjà à chaud.
xcodebuild sélectionne la mauvaise chaîne d’outils. Vérifiez xcode-select -p et définissez explicitement DEVELOPER_DIR dans l’étape du blueprint.
Une destination est introuvable. Exécutez xcrun simctl list devices available pour voir ce que les environnements d’exécution installés fournissent réellement, puis alignez le nom et l’OS de -destination en conséquence.
La résolution des dépendances se bloque ou échoue avec une erreur TLS. L’hôte est probablement absent de la liste d’autorisation réseau de votre organisation pour macOS. Consultez Accès réseau.
