Xcode 26.6 exige officiellement macOS Tahoe 26.2 ou une version ultérieure. Ce prérequis suffit à écarter certaines machines anciennes, mais il ne répond pas à la vraie question : pour Claude Code, faut-il travailler sur le Mac local, sur un Mac distant ou avec les deux ? (developer.apple.com)

Calendrier de décision :

  • Cette semaine : gardez le Mac local pour l’interface, le simulateur interactif et le débogage sur appareil physique.
  • Dès le premier essai : placez sur le Mac distant l’analyse du dépôt, les modifications contrôlées, les compilations et les tests reproductibles.
  • Après validation : adoptez le double environnement si le projet exige à la fois une présence en ligne continue et un appareil Apple local.

Le choix recommandé pour la plupart des développeurs professionnels est donc l’architecture hybride : le Mac local conserve les tâches qui dépendent d’une interface ou d’un appareil branché, tandis que le Mac distant exécute Claude Code, les builds Xcode, les tests et les tâches longues.

01

Public concerné et limites à connaître

Cet article s’adresse aux développeurs qui doivent maintenir un projet iOS, macOS ou Swift sans disposer d’un Mac suffisamment disponible, aux ingénieurs qui veulent déplacer les compilations hors de leur poste principal, ainsi qu’aux responsables de plateforme qui doivent encadrer les permissions d’un agent.

Trois limites sont souvent sous-estimées :

  1. Un agent peut modifier le code sans pouvoir valider tout le comportement visuel. Une compilation réussie ne remplace pas l’inspection d’une interface, d’une animation, d’une prévisualisation SwiftUI ou d’un parcours tactile.
  2. SSH transporte une session de terminal, pas l’expérience complète d’Xcode. Les commandes, journaux et fichiers sont accessibles, mais le simulateur, les fenêtres Xcode et certains dialogues d’autorisation demandent une session graphique.
  3. Le nœud qui exécute la tâche doit posséder les bons secrets et les bonnes dépendances. Déplacer seulement le dépôt ne déplace ni les certificats, ni les profils de provisioning, ni les variables d’environnement, ni les versions de Swift Package Manager.

À cela s’ajoutent la latence d’un accès graphique, le risque de divergence entre deux installations, la reprise après une coupure réseau et le coût opérationnel d’un Mac qui doit rester disponible en permanence.

Point de vigilance : si Claude Code propose une correction et que le build distant échoue faute de simulateur, de permission système ou de dépendance absente, la réponse de l’agent ne constitue pas une validation technique. Le résultat à conserver est l’état de sortie, le journal et l’artefact produit.

02

Choix initial de l’environnement d’exécution

Avant toute migration, il faut séparer les actions qui manipulent des fichiers de celles qui dépendent d’une présence graphique ou matérielle.

Activité Mac local Mac distant par SSH Architecture hybride
Lecture, recherche et modification du code Très adapté Très adapté Très adapté
Commandes Git et gestion des dépendances Adapté Adapté Adapté
Compilation avec xcodebuild Adapté Adapté Adapté
Tests unitaires automatisés Adapté Adapté Adapté
Simulateur avec inspection visuelle Très adapté Possible avec accès graphique Local recommandé
Débogage sur iPhone ou iPad physique Recommandé Limité par l’accès à l’appareil Local recommandé
Tâche longue après fermeture du poste À organiser Recommandé Distant recommandé
Isolation d’un dépôt sensible Dépend de la machine Possible avec compte dédié Possible avec séparation stricte

Apple documente l’utilisation de xcodebuild, simctl et devicectl parmi les outils en ligne de commande inclus avec Xcode. Cela rend possible une grande partie de l’automatisation à distance, sans prétendre que chaque étape de l’IDE devient équivalente à une session locale. (developer.apple.com)

Claude Code peut-il fonctionner par SSH sur un Mac distant ?
Oui, à condition que Claude Code soit installé sur la machine distante et que celle-ci soit accessible avec SSH. La documentation officielle de l’application de bureau décrit une session SSH comme une exécution de Claude Code sur la machine distante, avec accès aux fichiers et aux outils de cette machine. Le système distant peut être macOS ou Linux ; pour un projet Xcode, il doit naturellement s’agir de macOS avec la chaîne Apple requise. (code.claude.com)

Apple indique également que l’accès « Remote Login » permet d’ouvrir une session SSH ou SFTP, avec une commande de la forme suivante : ssh utilisateur@hôte. Le panneau de partage permet de limiter les utilisateurs autorisés, ce qui est préférable à l’ouverture générale de l’accès distant. (support.apple.com)

03

Première connexion, emplacement du code et identité

Le premier essai doit répondre à une question simple : où se trouve la copie de référence du dépôt ?

Trois modèles sont possibles :

  • Dépôt sur le Mac distant : Claude Code lit et modifie les fichiers sans transfert permanent. C’est le modèle le plus cohérent lorsque les dépendances, le SDK et le build sont également distants.
  • Dépôt sur le Mac local avec synchronisation : l’interface reste confortable, mais il faut gérer les conflits, les temps de synchronisation et la divergence des dépendances.
  • Dépôt transmis par Git : chaque environnement récupère une branche ou un commit explicite. Ce modèle facilite la récupération après incident, à condition de ne pas transformer Git en stockage de secrets.

Pour une première validation, le dépôt distant doit être non productif ou spécialement anonymisé. Le compte SSH doit être distinct d’un compte administrateur, son répertoire de travail doit être clairement défini et sa clé privée doit rester sur le poste qui initie la connexion.

ssh -p 22 developpeur@mac-distant
cd ~/src/projet-ios
git status
xcode-select -p
swift --version
xcodebuild -version

Le port SSH par défaut indiqué dans la configuration de connexion de Claude Code Desktop est 22, mais un port différent peut être défini dans ~/.ssh/config. Il faut donc vérifier la configuration réellement utilisée plutôt que supposer que le réseau autorise ce port. (code.claude.com)

Le fichier CLAUDE.md, les règles du projet et les scripts d’installation doivent être versionnés avec le dépôt lorsque cela est possible. Le but est que le contexte de Claude Code, les commandes autorisées et la procédure de build soient récupérables sur un nouveau nœud.

04

Session quotidienne et continuité du contexte

En local, Claude Code travaille directement dans le répertoire du développeur. Les recherches, modifications et commandes ne traversent pas de liaison réseau supplémentaire. Sur un Mac distant, ces opérations s’exécutent au même endroit que le dépôt et que les outils Xcode : le réseau transporte principalement les échanges de session, tandis que la lecture des fichiers et les commandes restent proches de l’environnement de build.

La différence devient importante lorsqu’un projet contient de nombreux fichiers générés, des dépendances lourdes ou un historique de recherche étendu. Une session distante évite de synchroniser chaque modification, mais elle impose de surveiller l’état du nœud : version de Xcode, SDK actif, cache de compilation, espace disque, compte utilisateur et variables d’environnement.

La configuration de Claude Code doit rester restrictive au début. La documentation officielle distingue notamment les modes standard, d’acceptation automatique des modifications, de planification, de refus par défaut et de contournement des permissions. Le mode de contournement supprime les demandes de confirmation et n’est recommandé que dans un environnement isolé. (code.claude.com)

Comment limiter les commandes et les fichiers accessibles à Claude Code ?
Commencez par le mode de planification pour l’analyse, puis autorisez uniquement les modifications du dépôt et les commandes nécessaires au build. Les règles doivent refuser explicitement les clés SSH, les fichiers .env, les certificats et les répertoires de production. Claude Code évalue les règles de permission selon une priorité où les refus prennent le dessus sur les demandes d’autorisation. (code.claude.com)

Un exemple de progression opérationnelle :

Étape 1 : lecture et recherche uniquement
Étape 2 : modification du répertoire du projet
Étape 3 : commandes de test et de compilation explicitement autorisées
Étape 4 : accès aux services de développement nécessaires
Étape 5 : publication interdite tant qu’une validation humaine n’est pas documentée

Le dépôt ne doit pas contenir une clé de signature simplement parce que Claude Code doit lancer un test. Les certificats, profils de provisioning, jetons de publication et secrets de CI doivent être placés dans un périmètre séparé, avec une procédure distincte.

05

Validation Xcode et limites du terminal

La première compilation distante doit porter sur un projet réel, mais non critique. Il faut tester la chaîne complète : résolution des dépendances, compilation, tests unitaires, lecture du résultat et conservation de l’artefact.

set -o pipefail

xcodebuild \
  -workspace Projet.xcworkspace \
  -scheme Projet \
  -destination 'platform=iOS Simulator,name=iPhone 17' \
  clean test \
  -resultBundlePath build/Projet.xcresult \
  2>&1 | tee build/xcodebuild.log

status=${PIPESTATUS[0]}
printf 'xcodebuild_exit=%s\n' "$status"
exit "$status"

Le nom exact du simulateur, la version du système et le schéma doivent être adaptés à l’installation disponible. Il ne faut pas copier cette destination sans vérifier la liste locale des appareils :

xcrun simctl list devices available
xcodebuild -list -workspace Projet.xcworkspace

Apple précise que xcodebuild test peut lancer les tests depuis le terminal et produire un paquet de résultats .xcresults, qui contient notamment les résultats de session, la couverture si elle est activée et les journaux associés. Ce paquet doit être conservé avec le journal et le code de sortie. (developer.apple.com)

Preuve à conserver Pourquoi elle est nécessaire Seuil de décision
Code de sortie de xcodebuild Distingue un succès réel d’un journal seulement lisible Doit être égal à zéro pour valider
Journal complet Permet de diagnostiquer la dépendance ou l’autorisation manquante Doit être archivé
Fichier .xcresult Permet de relire les tests et la couverture Doit être ouvrable dans Xcode
Hash du commit Relie le résultat au code testé Doit correspondre à la branche
Liste du SDK et de Xcode Évite les résultats non reproductibles Doit être documentée

Claude Code sur un Mac distant peut-il exécuter les builds et les tests Xcode ?
Oui pour les tâches compatibles avec xcodebuild, les simulateurs disponibles et les scripts de test. En revanche, un build réussi ne prouve pas que l’interface s’affiche correctement, qu’une prévisualisation SwiftUI est exploitable ou qu’un appareil physique répond comme prévu. Ces contrôles restent à effectuer localement ou dans une session graphique distante maîtrisée.

Cette distinction est particulièrement importante pour les applications audio, vidéo et design. Une exportation, un rendu ou une compilation d’assets peut être automatisé sur le Mac distant, alors que l’évaluation d’un montage, d’un comportement visuel ou d’un périphérique connecté exige souvent un accès interactif.

06

Tâches longues, déconnexion et reprise

Le Mac distant devient intéressant lorsque la tâche doit continuer après la fermeture du portable, pendant la nuit ou entre deux fuseaux horaires. Il peut alors servir de nœud de build, de test ou d’analyse toujours disponible, mais seulement si la reprise est conçue avant le lancement.

Pour une commande longue, utilisez une session persistante et écrivez les sorties dans un emplacement connu :

tmux new -s build-ios
./scripts/ci-local.sh 2>&1 | tee logs/$(date +%Y-%m-%d-%H%M).log

Après une coupure :

ssh developpeur@mac-distant
tmux attach -t build-ios

Cette méthode conserve la session de terminal tant que le Mac et le processus restent actifs. Elle ne garantit pas la reprise après un redémarrage système. Pour ce cas, le script doit être relançable sans produire de modifications ambiguës, et le dépôt doit permettre de retrouver le commit initial.

Quel environnement convient le mieux à une utilisation longue de Claude Code ?
Le Mac distant est généralement préférable lorsque la tâche consiste à analyser un dépôt, modifier plusieurs fichiers, lancer des tests et produire un artefact sans interaction physique. Le Mac local reste préférable si la session dépend d’un iPhone branché, d’un débogueur graphique, d’une autorisation biométrique ou d’une validation visuelle répétée.

Dans un contexte d’équipe, il faut aussi enregistrer qui a lancé la tâche, sur quel commit, avec quelle version de Xcode et quel profil de permission. Une machine disponible en permanence sans journal d’audit devient rapidement un risque plutôt qu’un avantage.

07

Check-list de décision et migration progressive

La décision finale doit être fondée sur les contraintes du projet, non sur la seule sensation de rapidité de SSH.

  • [ ] Le projet peut-il être compilé avec une commande documentée et relançable ?
  • [ ] Les tests essentiels produisent-ils un fichier .xcresult exploitable ?
  • [ ] Le projet dépend-il d’un iPhone, d’un iPad ou d’un périphérique physique local ?
  • [ ] Les prévisualisations, animations, interfaces audio ou rendus visuels exigent-ils une session graphique ?
  • [ ] Le dépôt peut-il être placé sur le Mac distant sans exposer de données interdites ?
  • [ ] Les certificats, clés SSH, profils de provisioning et jetons de publication sont-ils séparés du compte de travail ?
  • [ ] Les permissions Claude Code refusent-elles les répertoires et commandes sensibles ?
  • [ ] Une coupure SSH permet-elle de retrouver la session, le journal et le commit testé ?
  • [ ] Le nœud distant possède-t-il la version de macOS et de Xcode compatible avec le projet ?
  • [ ] Existe-t-il un retour simple vers le Mac local si le build distant échoue ?

Le parcours de migration recommandé comporte cinq étapes :

  1. Analyse en lecture seule : Claude Code examine le dépôt distant sans modifier les fichiers.
  2. Modifications limitées : seules les branches de développement et les répertoires explicitement autorisés sont ouverts en écriture.
  3. Build et tests : un projet réel est compilé avec conservation du journal, du code de sortie et du résultat .xcresult.
  4. Tâche longue : une analyse ou une suite de tests est exécutée dans tmux, puis reprise après déconnexion.
  5. Extension contrôlée : l’accès aux services internes ou aux étapes de publication n’est ajouté qu’après validation des quatre étapes précédentes.

Pour documenter la procédure d’accès, les équipes peuvent également consulter le guide de déploiement d’un Mac distant avec NodeMini et comparer les options de Mac cloud disponibles. Le choix d’un emplacement doit ensuite dépendre de la latence, des règles de données et de la proximité avec les services utilisés, plutôt que d’un nom de région pris isolément.

08

Verdict selon le profil de projet

Profil de travail Choix recommandé Pourquoi
Application avec débogage quotidien sur iPhone Mac local ou hybride L’appareil physique et l’inspection interactive restent centraux
Projet sans Mac disponible Mac distant Le code, Xcode et les tests peuvent être réunis sur un même nœud
Bibliothèque Swift avec tests automatisés Mac distant Le cycle analyse-build-test se prête bien au terminal
Équipe avec builds nocturnes Hybride Le développement reste local, le nœud distant assure la continuité
Application audio, vidéo ou design Hybride Les rendus peuvent être distants, la validation créative reste interactive
Dépôt très sensible Local ou distant isolé Le choix dépend de la gouvernance, de l’audit et de la séparation des secrets
Publication App Store entièrement automatisée Distant possible, mais séparé Les identités de signature doivent être protégées et auditées

Le Mac local est donc le meilleur choix lorsque la boucle de développement inclut souvent l’interface, le simulateur visible ou un appareil physique. Le Mac distant devient plus pertinent pour les projets qui doivent rester actifs, pour les équipes sans matériel Apple disponible et pour les suites de compilation ou de tests répétées. Le double environnement apporte le meilleur compromis lorsque les deux types de tâches sont indispensables.

Si l’environnement actuel repose uniquement sur un poste Windows ou Linux, il conserve plusieurs défauts pour un projet Apple : absence native de Xcode, séparation entre l’outil d’édition et la machine de build, dépendance à des synchronisations de fichiers et impossibilité de reproduire localement certaines étapes propres à macOS. Acheter un Mac résout la disponibilité, mais immobilise du matériel et laisse à l’équipe la charge de la maintenance, des mises à jour et de la continuité de service. Pour un besoin temporaire ou une phase de validation, louer un Mac distant avec NodeMini permet de tester Claude Code, Xcode, les builds et la reprise après déconnexion avant de déplacer une chaîne de signature ou de publication.

La démarche la plus sûre consiste à réserver un cycle de location à un dépôt non productif, à mesurer les preuves de build et à fixer une condition de sortie : retour au Mac local si le projet dépend trop de la validation physique, maintien du Mac distant si les tâches sont reproductibles, ou adoption du double environnement si chaque machine possède un rôle clairement délimité.