Docs

Pas sur GitHub ? Le même Mac fonctionne avec toutes les grandes CI.

Nous configurons GitHub Actions pour vous et le prenons en charge directement. Mais votre machine est un Mac mini normal avec un accès SSH. GitLab, Bitbucket, Buildkite, CircleCI, Azure Pipelines et Jenkins ont tous des agents qui tournent sous macOS. Installez celui que vous utilisez. Le reste de la machine est identique : Xcode épinglé, caches chauds, session ouverte en permanence pour les simulateurs, un seul client par machine.

Avant de commencer

  • +Chaque agent ci-dessus se connecte en sortie vers votre CI. Aucun port entrant n’est nécessaire, donc la machine reste hors de l’internet public, exactement comme aujourd’hui.
  • +Lancez l’agent avec l’utilisateur runner, le même compte que GitHub Actions. C’est lui qui possède Xcode, les simulateurs et les caches.
  • +Gardez-le en vie. Démarrez-le comme service (brew services, svc.sh) ou dans une session tmux. L’utilisateur runner a une ouverture de session automatique, donc une session graphique existe pour les simulateurs et les tests d’interface.
  • +Xcode est installé et épinglé. Choisissez une version dans votre job avec xcode-select ou DEVELOPER_DIR, comme sur GitHub.
  • +Supprimez le runner GitHub si vous ne l’utilisez pas, ou laissez-le inactif. Il ne coûte rien quand aucun job n’arrive.

Connectez-vous d’abord via Tailscale, puis en SSH avec l’utilisateur runner, exactement comme à l’étape 1 de la documentation d’installation.

GitLab

Les runners macOS hébergés par GitLab coûtent plusieurs fois le tarif Linux. Un Mac dédié avec GitLab Runner, c’est la même chose à prix fixe.

  1. 01

    Installez le binaire officiel. GitLab ne maintient pas la formule Homebrew et recommande plutôt cette méthode.

    sudo mkdir -p /usr/local/bin
    sudo curl --output /usr/local/bin/gitlab-runner \
      "https://s3.dualstack.us-east-1.amazonaws.com/gitlab-runner-downloads/latest/binaries/gitlab-runner-darwin-arm64"
    sudo chmod +x /usr/local/bin/gitlab-runner
  2. 02

    Dans votre projet ou groupe, ouvrez les paramètres CI/CD, créez un runner et copiez son token. Ensuite, enregistrez-le sur le Mac.

    gitlab-runner register --url https://gitlab.com --token <runner-token> --executor shell
  3. 03

    Installez-le et démarrez-le comme service pour l’utilisateur runner. Faites-le depuis un terminal dans la session du bureau (partage d’écran), pas via SSH.

    cd ~
    gitlab-runner install
    gitlab-runner start
  4. 04

    Ajoutez des tags au runner (par exemple macos, xcode) et utilisez ce tag dans les jobs de votre .gitlab-ci.yml.

Lire le guide complet sur GitLab

Bitbucket Pipelines

Atlassian ne propose aucun runner macOS hébergé. Pour builder une app iOS sur Bitbucket, il faut auto-héberger un Mac. C’est exactement ce que nous proposons.

  1. 01

    Le runner a besoin de Java. Installez-le avec Homebrew.

    brew install openjdk@17
  2. 02

    Dans Bitbucket, ouvrez Repository settings (ou Workspace settings), puis Runners, et ajoutez un runner de type macOS. Bitbucket affiche une commande de démarrage avec vos identifiants de compte, de dépôt et de runner, et un client OAuth. Copiez-la telle quelle.

  3. 03

    Lancez cette commande sur le Mac dans une session tmux, ou placez-la dans un LaunchAgent pour qu’elle démarre à l’ouverture de session.

    tmux new -s bitbucket
    # paste the start command Bitbucket gave you
  4. 04

    Dans bitbucket-pipelines.yml, donnez à l’étape runs-on: [self.hosted, macos] et le label éventuel que vous avez choisi.

Buildkite

Buildkite repose par conception sur vos propres machines. Un Mac dédié est exactement ce qu’attend un pipeline iOS Buildkite.

  1. 01

    Installez l’agent depuis le tap Homebrew de Buildkite. Les versions récentes de Homebrew demandent d’abord de faire confiance à un tap tiers.

    brew tap buildkite/buildkite
    brew trust buildkite/buildkite
    brew install buildkite/buildkite/buildkite-agent
  2. 02

    Mettez votre token d’agent dans le fichier de configuration, puis démarrez l’agent comme service.

    sed -i '' 's/xxx/<your-agent-token>/' "$(brew --prefix)/etc/buildkite-agent/buildkite-agent.cfg"
    brew services start buildkite/buildkite/buildkite-agent@3
  3. 03

    Ajoutez des règles de file ou de tag dans ce même fichier de configuration et ciblez-les depuis les étapes de votre pipeline.

Lire le guide complet sur Buildkite

CircleCI

Le macOS hébergé de CircleCI est facturé à l’usage, comme celui de GitHub. Leur machine runner self-hosted tourne sous macOS et se connecte en sortie.

  1. 01

    Dans CircleCI, créez une resource class pour les runners self-hosted et générez un token de runner.

  2. 02

    Installez le machine runner depuis le tap Homebrew de CircleCI. Suivez les étapes de configuration macOS affichées dans leur interface. Elles placent le token et la resource class dans le fichier de configuration du runner.

  3. 03

    Démarrez le runner comme service et ciblez la resource class depuis les jobs de votre config.yml.

CircleCI modifie souvent sa procédure d’installation du runner. Suivez les commandes exactes de leur page d’installation du runner self-hosted pour macOS.

Lire le guide complet sur CircleCI

Azure Pipelines

Les agents macOS hébergés par Microsoft ont un parallélisme limité. Un agent macOS self-hosted est une option à part entière.

  1. 01

    Dans Azure DevOps, ouvrez Organization settings, puis Agent pools, et ajoutez un agent. Téléchargez le paquet d’agent macOS proposé.

  2. 02

    Décompressez-le dans le dossier personnel de runner. Configurez-le avec un personal access token qui a le droit Agent Pools en lecture et gestion.

    mkdir ~/azagent && cd ~/azagent && tar zxvf ~/Downloads/vsts-agent-osx-arm64-*.tar.gz
    ./config.sh
  3. 03

    Installez-le et démarrez-le comme service.

    ./svc.sh install
    ./svc.sh start
  4. 04

    Pointez votre pipeline vers le pool : pool: { name: <your-pool> }.

Jenkins

Les équipes Jenkins font déjà tourner leurs propres agents. Utilisez un agent entrant : le Mac se connecte en sortie à votre contrôleur et n’a besoin d’aucun port entrant.

  1. 01

    Installez Java 21. Les versions LTS actuelles de Jenkins exigent aussi Java 21 ou 25 sur les agents.

    brew install openjdk@21
  2. 02

    Dans Jenkins, ajoutez un nouveau nœud avec la méthode de lancement Launch agent by connecting it to the controller. Jenkins affiche le téléchargement de agent.jar et la commande exacte avec votre secret.

  3. 03

    Lancez cette commande sur le Mac dans tmux, ou comme LaunchAgent pour qu’il se reconnecte après un redémarrage.

    tmux new -s jenkins
    curl -sO https://<your-jenkins>/jnlpJars/agent.jar
    # then the java -jar agent.jar ... command Jenkins gave you
  4. 04

    Donnez au nœud le label macos et limitez les jobs concernés à ce label.

Lire le guide complet sur Jenkins

Même machine, même prix.

Choisissez votre système de CI dans le formulaire d’inscription. L’URL est facultative partout, sauf pour la vérification antifraude, qui préfère l’avoir.