Guide - Developpement a distance

Developpement Xcode a distance : Guide de configuration complet

Un guide complet pour developper des applications iOS et macOS sur un serveur Mac distant. Apprenez a vous connecter via SSH, VNC, VS Code Remote SSH et JetBrains Gateway pour un workflow Xcode distant fluide.

35 min de lecture Mis a jour en janvier 2025

Pourquoi developper a distance ?

Le developpement Xcode a distance n'est pas seulement pour les personnes qui ne possedent pas de Mac. De nombreuses equipes professionnelles utilisent des serveurs Mac distants meme lorsqu'elles disposent de machines locales, en raison des avantages significatifs :

Serveur de build toujours actif

Votre Mac distant fonctionne 24h/24 dans un datacenter. Les pipelines CI/CD, les builds nocturnes et les tests automatises s'executent sans avoir a laisser votre ordinateur portable ouvert.

Reseau 10 Gbps

Un reseau de qualite datacenter signifie des git clones plus rapides, des telechargements de dependances et des uploads d'artefacts acceleres. Les installations CocoaPods et les resolutions SPM se font en quelques secondes.

Environnement coherent

Chaque membre de l'equipe se connecte a la meme configuration serveur. Plus de problemes "ca marche sur ma machine" causes par des versions differentes de macOS ou des configurations Xcode.

Travaillez depuis n'importe quel appareil

Accedez a votre environnement de developpement Xcode complet depuis un ordinateur portable Windows, un bureau Linux, un Chromebook ou meme un iPad avec un client SSH.

Methode 1 : SSH + xcodebuild CLI

L'approche la plus legere. Vous editez le code dans votre editeur prefere en local (ou sur le serveur), puis compilez avec xcodebuild via SSH. Cette methode fonctionne depuis n'importe quel appareil disposant d'un terminal.

Configurer les cles SSH

# Generate SSH key on your local machine (if you don't have one)
ssh-keygen -t ed25519 -C "dev@company.com"

# Copy your public key to the remote Mac
ssh-copy-id user@your-mac.myremotemac.com

# Configure SSH for convenience (~/.ssh/config)
Host mac-dev
    HostName your-mac.myremotemac.com
    User your-username
    IdentityFile ~/.ssh/id_ed25519
    ForwardAgent yes
    ServerAliveInterval 60
    ServerAliveCountMax 3
    Compression yes

# Now connect with just:
ssh mac-dev

Commandes xcodebuild courantes

# List available schemes
xcodebuild -list -project MyApp.xcodeproj

# Build for iOS Simulator
xcodebuild -project MyApp.xcodeproj \
  -scheme MyApp \
  -destination 'platform=iOS Simulator,name=iPhone 16,OS=18.2' \
  clean build

# Build with workspace (CocoaPods/SPM)
xcodebuild -workspace MyApp.xcworkspace \
  -scheme MyApp \
  -destination 'platform=iOS Simulator,name=iPhone 16' \
  build

# Run unit tests
xcodebuild test \
  -workspace MyApp.xcworkspace \
  -scheme MyApp \
  -destination 'platform=iOS Simulator,name=iPhone 16' \
  -resultBundlePath ./TestResults.xcresult

# Archive for distribution
xcodebuild archive \
  -workspace MyApp.xcworkspace \
  -scheme MyApp \
  -configuration Release \
  -archivePath ./build/MyApp.xcarchive \
  CODE_SIGN_IDENTITY="Apple Distribution" \
  PROVISIONING_PROFILE_SPECIFIER="MyApp Distribution"

# Export IPA from archive
xcodebuild -exportArchive \
  -archivePath ./build/MyApp.xcarchive \
  -exportPath ./build/ipa \
  -exportOptionsPlist ExportOptions.plist

# Upload to App Store Connect
xcrun altool --upload-app \
  -f ./build/ipa/MyApp.ipa \
  -t ios \
  -u "apple-id@example.com" \
  -p "@keychain:AC_PASSWORD"

Utiliser tmux pour les sessions persistantes

Utilisez tmux pour maintenir vos builds en cours d'execution meme si votre connexion SSH est interrompue.

# Install tmux via Homebrew
brew install tmux

# Start a new tmux session
tmux new -s build

# Run your build inside tmux
xcodebuild -workspace MyApp.xcworkspace -scheme MyApp build

# Detach from tmux: press Ctrl+B, then D
# Your build keeps running on the server

# Reconnect later
ssh mac-dev
tmux attach -t build

Methode 2 : VNC pour le GUI complet

VNC vous donne un acces complet au bureau macOS, y compris l'interface visuelle de Xcode, Interface Builder, l'iOS Simulator et Instruments. C'est la meilleure methode lorsque vous avez besoin de l'experience GUI complete de Xcode.

Activer le partage d'ecran sur macOS

# Enable Screen Sharing via command line
sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart \
  -activate -configure -access -on \
  -restart -agent -privs -all

# Alternatively, set a VNC password
sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart \
  -activate -configure -access -on \
  -clientopts -setvnclegacy -vnclegacy yes \
  -clientopts -setvncpw -vncpw "your-vnc-password" \
  -restart -agent -privs -all

# Verify Screen Sharing is running
sudo launchctl list | grep -i screen

Clients VNC recommandes par OS

Votre OS Client recommande Notes
Windows RealVNC Viewer (gratuit) Meilleures performances, supporte le high-DPI d'Apple
Linux Remmina ou TigerVNC Remmina integre le tunneling SSH
macOS Partage d'ecran integre Ouvrir Finder > Aller > Se connecter au serveur > vnc://
Chromebook VNC Viewer (Chrome Web Store) Fonctionne bien pour l'acces GUI basique
iPad/iPhone Screens 5 ou RealVNC Gestes tactiles pour l'interaction macOS

Securiser VNC via un tunnel SSH

Utilisez toujours un tunnel SSH pour les connexions VNC afin de chiffrer tout le trafic.

# Create SSH tunnel for VNC (run on your LOCAL machine)
ssh -L 5900:localhost:5900 -N -f mac-dev

# Now connect your VNC client to: localhost:5900
# All traffic is encrypted through the SSH tunnel

# On Windows with PuTTY:
# Connection > SSH > Tunnels
# Source port: 5900
# Destination: localhost:5900
# Click "Add", then connect

Conseils d'optimisation VNC

  • Resolution d'ecran reduite : Reglez le Mac distant sur 1920x1080 au lieu du Retina pour un rendu plus rapide.
  • Reduire la profondeur de couleur : Dans votre client VNC, reglez la qualite des couleurs sur Moyenne ou 16 bits pour de meilleures performances.
  • Desactiver la transparence : Sur le Mac distant, allez dans Reglages systeme > Accessibilite > Affichage > Reduire la transparence.
  • Fermer les applications inutiles : Chaque fenetre ouverte augmente les donnees d'ecran a transferer.
  • Utiliser la compression SSH : Ajoutez Compression yes a votre configuration SSH pour le tunnel.

Methode 3 : VS Code Remote SSH

VS Code Remote SSH vous offre le meilleur des deux mondes : la reactivite d'un editeur local avec la puissance de calcul du Mac distant. Vos frappes sont locales, vos builds s'executent sur le serveur.

Installation et configuration

# Step 1: Install VS Code extensions
# Open VS Code and install these extensions:
# - Remote - SSH (ms-vscode-remote.remote-ssh)
# - Swift (sswg.swift-lang)
# - CodeLLDB (vadimcn.vscode-lldb) - for debugging

# Step 2: Configure SSH in ~/.ssh/config
Host mac-dev
    HostName your-mac.myremotemac.com
    User your-username
    IdentityFile ~/.ssh/id_ed25519
    ForwardAgent yes
    ServerAliveInterval 60

# Step 3: Connect
# Press Ctrl+Shift+P (or Cmd+Shift+P on macOS)
# Type: "Remote-SSH: Connect to Host"
# Select: mac-dev
# VS Code installs its server component on the remote Mac
# Open your project folder

Configurer les taches de build

Creez un fichier .vscode/tasks.json dans votre projet pour executer xcodebuild depuis VS Code :

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Build iOS (Simulator)",
            "type": "shell",
            "command": "xcodebuild",
            "args": [
                "-workspace", "MyApp.xcworkspace",
                "-scheme", "MyApp",
                "-destination", "platform=iOS Simulator,name=iPhone 16",
                "build"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "problemMatcher": ["$xcodebuild"]
        },
        {
            "label": "Run Tests",
            "type": "shell",
            "command": "xcodebuild",
            "args": [
                "test",
                "-workspace", "MyApp.xcworkspace",
                "-scheme", "MyApp",
                "-destination", "platform=iOS Simulator,name=iPhone 16"
            ],
            "group": "test",
            "problemMatcher": ["$xcodebuild"]
        },
        {
            "label": "Clean Build",
            "type": "shell",
            "command": "xcodebuild",
            "args": [
                "-workspace", "MyApp.xcworkspace",
                "-scheme", "MyApp",
                "clean"
            ],
            "problemMatcher": []
        }
    ]
}

Maintenant, vous pouvez appuyer sur Ctrl+Shift+B (ou Cmd+Shift+B) pour lancer un build, et la sortie apparait dans le terminal integre de VS Code.

Support du langage Swift dans VS Code

# On the remote Mac, install SourceKit-LSP (comes with Xcode)
# Verify it's available:
xcrun sourcekit-lsp --help

# VS Code Swift extension will automatically detect SourceKit-LSP
# You get:
# - Code completion for Swift and SwiftUI
# - Jump to definition
# - Find references
# - Inline error diagnostics
# - Symbol search

Methode 4 : JetBrains Gateway + AppCode

JetBrains Gateway offre une experience de developpement a distance similaire a VS Code Remote, mais avec l'ecosysteme IDE JetBrains. Bien qu'AppCode ait ete abandonne, vous pouvez utiliser JetBrains Fleet ou le Gateway avec d'autres IDE JetBrains.

Configurer JetBrains Gateway

# Step 1: Download JetBrains Gateway from jetbrains.com/remote-development/gateway/

# Step 2: Configure SSH connection
# In Gateway: New Connection > SSH
# Host: your-mac.myremotemac.com
# User: your-username
# Authentication: Key pair (select your private key)

# Step 3: Select IDE Backend
# Choose "IntelliJ IDEA" or "Fleet" to run on the remote Mac
# Gateway downloads and installs the IDE backend on the server

# Step 4: Open your project
# Navigate to your project folder on the remote Mac
# The IDE opens with full language support and indexing

Astuce : JetBrains Gateway fonctionne mieux avec une connexion internet stable (au moins 10 Mbps). Le client leger effectue le rendu de l'interface localement, donc l'experience reste reactive meme sur de longues distances.

Gestion du code signing a distance

Le code signing est l'une des parties les plus delicates du developpement iOS a distance. Voici comment gerer les certificats et les profils de provisionnement sur votre serveur Mac distant.

Exporter les certificats depuis le portail Apple Developer

# Option 1: Export from existing Mac as .p12
# On your local Mac (if you have one):
# Open Keychain Access > My Certificates
# Right-click your distribution certificate > Export
# Save as .p12 with a strong password

# Transfer to remote Mac
scp ~/Desktop/Certificates.p12 mac-dev:~/

# On the remote Mac, import:
security import ~/Certificates.p12 \
  -k ~/Library/Keychains/login.keychain-db \
  -P "your-p12-password" \
  -T /usr/bin/codesign -T /usr/bin/security

# Allow codesign access without password prompts
security set-key-partition-list \
  -S apple-tool:,apple:,codesign: \
  -s -k "your-login-password" \
  ~/Library/Keychains/login.keychain-db

# Option 2: Create new certificate on remote Mac
# Use VNC to open Xcode > Settings > Accounts
# Add your Apple ID
# Xcode manages certificates automatically

Gestion du trousseau pour le CI/CD

# Create a dedicated keychain for CI/CD
security create-keychain -p "keychain-password" build.keychain-db

# Set it as the default keychain
security default-keychain -s build.keychain-db

# Unlock the keychain (needed for automated builds)
security unlock-keychain -p "keychain-password" build.keychain-db

# Set keychain timeout to prevent auto-lock during builds
security set-keychain-settings -t 3600 -u build.keychain-db

# Import certificate
security import Certificates.p12 \
  -k build.keychain-db \
  -P "p12-password" \
  -T /usr/bin/codesign

# Add to search list
security list-keychains -s build.keychain-db login.keychain-db

# Verify
security find-identity -v -p codesigning build.keychain-db

Profils de provisionnement

# Download profiles from Apple Developer Portal
# Or use the xcodebuild automatic provisioning:

# Install provisioning profiles manually
mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles/
cp MyApp_Distribution.mobileprovision \
  ~/Library/MobileDevice/Provisioning\ Profiles/

# List installed profiles
ls ~/Library/MobileDevice/Provisioning\ Profiles/

# Decode profile info
security cms -D -i ~/Library/MobileDevice/Provisioning\ Profiles/MyApp_Distribution.mobileprovision

Strategies de synchronisation de fichiers

Choisissez la bonne strategie de synchronisation de fichiers en fonction de votre workflow.

Git (recommande)

L'approche la plus simple et la plus fiable. Editez en local, poussez vers un depot, tirez sur le Mac distant.

# Local machine: push changes
git add . && git commit -m "Update views" && git push

# Remote Mac: pull and build
ssh mac-dev "cd ~/MyApp && git pull && xcodebuild build"

rsync (synchronisation rapide)

Synchronise uniquement les fichiers modifies via SSH. Plus rapide que la copie de repertoires entiers.

# Sync local project to remote Mac
rsync -avz --exclude '.git' --exclude 'DerivedData' \
  --exclude 'build' --exclude '.DS_Store' \
  ./MyApp/ mac-dev:~/MyApp/

# Watch for changes and auto-sync (using fswatch on macOS/Linux)
fswatch -o ./MyApp/Sources/ | while read; do
  rsync -avz ./MyApp/Sources/ mac-dev:~/MyApp/Sources/
done

SSHFS (monter le systeme de fichiers distant)

Montez le systeme de fichiers du Mac distant comme un disque local. Editez les fichiers comme s'ils etaient en local.

# Install SSHFS
# Linux: sudo apt install sshfs
# macOS: brew install macfuse sshfs
# Windows: Install WinFsp + SSHFS-Win

# Mount remote directory
mkdir ~/remote-mac
sshfs mac-dev:/Users/your-username/MyApp ~/remote-mac

# Edit files locally -- they are actually on the remote Mac
code ~/remote-mac

# Unmount when done
fusermount -u ~/remote-mac   # Linux
umount ~/remote-mac           # macOS

Conseils de performance

Optimisez votre experience de developpement a distance avec ces reglages.

Compression SSH

Activez la compression dans votre configuration SSH pour reduire le transfert de donnees.

# ~/.ssh/config
Host mac-dev
    Compression yes
    CompressionLevel 6

Multiplexage SSH

Reutilisez les connexions SSH pour eliminer les delais de reconnexion.

# ~/.ssh/config
Host mac-dev
    ControlMaster auto
    ControlPath ~/.ssh/sockets/%r@%h-%p
    ControlPersist 600

DerivedData sur disque RAM

Deplacez le DerivedData de Xcode sur un disque RAM pour des builds plus rapides.

# Create 8GB RAM disk
diskutil erasevolume HFS+ \
  "RAMDisk" $(hdiutil attach \
  -nomount ram://16777216)

# Point Xcode DerivedData to RAM disk
defaults write com.apple.dt.Xcode \
  IDECustomDerivedDataLocation \
  /Volumes/RAMDisk/DerivedData

Cache local avec Mosh

Utilisez Mosh au lieu de SSH pour une meilleure reactivite sur les connexions instables.

# Install Mosh on both machines
brew install mosh

# Connect (handles roaming and sleep)
mosh user@your-mac.myremotemac.com

Reglages de resolution VNC

# Set a lower resolution for better VNC performance
# On the remote Mac:
sudo displayplacer "id:1 res:1920x1080 hz:60 color_depth:8 scaling:off"

# Install displayplacer if needed
brew tap jakehilborn/jakehilborn
brew install displayplacer

# List current display settings
displayplacer list

Questions frequentes

Quelle methode choisir : SSH, VNC ou VS Code ?

La plupart des developpeurs utilisent une combinaison. VS Code Remote SSH pour le codage quotidien (meilleure experience d'edition), SSH pour les builds rapides et les scripts, et VNC quand vous avez besoin d'Interface Builder ou du GUI du Simulateur. Commencez avec VS Code Remote SSH et ajoutez VNC quand necessaire.

Puis-je utiliser l'apercu SwiftUI de Xcode a distance ?

Oui, mais uniquement via VNC car les apercus SwiftUI necessitent le GUI de Xcode. Connectez-vous via VNC, ouvrez votre projet dans Xcode et utilisez l'apercu du canvas comme d'habitude. L'apercu se met a jour en temps reel sur le Mac distant.

Quelle bande passante le VNC utilise-t-il ?

Le VNC utilise generalement 1 a 5 Mbps pour le travail de developpement normal en 1920x1080. Le defilement actif ou les animations peuvent atteindre 10 a 15 Mbps. Une connexion de 25 Mbps est confortable pour une utilisation VNC en journee complete. SSH et VS Code Remote utilisent beaucoup moins de bande passante (moins de 1 Mbps).

Puis-je executer plusieurs instances Simulator a distance ?

Oui. Le Mac Mini M4 dispose de suffisamment de RAM et de coeurs CPU pour executer plusieurs instances Simulator simultanement. C'est utile pour tester differents modeles d'iPhone ou executer des tests UI en parallele. Utilisez xcrun simctl pour gerer les instances Simulator en ligne de commande.

Que se passe-t-il si ma connexion SSH est interrompue pendant un build ?

Si vous utilisez tmux ou screen, le build continue de s'executer sur le serveur et vous pouvez vous reconnecter a la session. Sans tmux, le processus de build sera arrete. Nous recommandons vivement de toujours executer les builds a l'interieur d'une session tmux.

Pret a commencer le developpement Xcode a distance ?

Obtenez un Mac Mini M4 dedie avec un acces root complet, un reseau 10 Gbps et une disponibilite 24h/24. Vos builds Xcode n'auront jamais ete aussi rapides.

Guides associes