Documentazione

Non usi GitHub? Lo stesso Mac funziona con tutte le principali CI.

Configuriamo GitHub Actions per te e lo supportiamo direttamente. Ma la tua macchina è un normale Mac mini con accesso SSH. GitLab, Bitbucket, Buildkite, CircleCI, Azure Pipelines e Jenkins hanno tutti agenti che girano su macOS. Installa quello che usi. Il resto della macchina è identico: Xcode fissato a una versione, cache già calde, una sessione di login sempre attiva per i simulatori, un solo cliente per macchina.

Prima di iniziare

  • +Ognuno di questi agenti si collega in uscita alla tua CI. Non serve nessuna porta in ingresso, quindi la macchina resta fuori da internet pubblico esattamente come oggi.
  • +Esegui l’agente come utente runner, lo stesso account che usa GitHub Actions. È il proprietario di Xcode, dei simulatori e delle cache.
  • +Tienilo sempre attivo. Avvialo come servizio (brew services, svc.sh) oppure dentro una sessione tmux. L’utente runner ha il login automatico, quindi esiste una sessione grafica per simulatori e test UI.
  • +Xcode è installato e fissato a una versione. Scegli la versione dentro il job con xcode-select o DEVELOPER_DIR, come su GitHub.
  • +Rimuovi il runner GitHub se non lo userai, oppure lascialo inattivo. Non costa nulla se non arrivano job.

Prima collegati via Tailscale ed entra in SSH come runner, esattamente come nella documentazione di configurazione, passo 1.

GitLab

I runner macOS ospitati da GitLab costano diverse volte la tariffa Linux. Un Mac dedicato con GitLab Runner è la stessa cosa a prezzo fisso.

  1. 01

    Installa il binario ufficiale. GitLab non mantiene la formula Homebrew e consiglia questo metodo.

    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

    Nel progetto o nel gruppo apri le impostazioni CI/CD, crea un runner e copia il suo token. Poi registralo sul Mac.

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

    Installalo e avvialo come servizio per l’utente runner. Fallo da un terminale nella sessione desktop (condivisione schermo), non via SSH.

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

    Assegna dei tag al runner (per esempio macos, xcode) e usali nei job del tuo .gitlab-ci.yml.

Leggi la guida completa a GitLab

Bitbucket Pipelines

Atlassian non offre nessun runner macOS ospitato. Chi fa build iOS su Bitbucket deve ospitare da sé un Mac, ed è esattamente questo.

  1. 01

    Il runner richiede Java. Installalo con Homebrew.

    brew install openjdk@17
  2. 02

    In Bitbucket apri Repository settings (o Workspace settings), poi Runners, e aggiungi un runner di tipo macOS. Bitbucket ti mostra un comando di avvio con gli id di account, repository e runner e un client OAuth. Copialo così com’è.

  3. 03

    Esegui quel comando sul Mac dentro una sessione tmux, oppure inseriscilo in un LaunchAgent così parte al login.

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

    In bitbucket-pipelines.yml, dai allo step runs-on: [self.hosted, macos] più le etichette che hai scelto.

Buildkite

Buildkite è pensato per usare il tuo hardware. Un Mac dedicato è proprio ciò che una pipeline iOS su Buildkite si aspetta.

  1. 01

    Installa l’agente dal tap Homebrew di Buildkite. Le versioni recenti di Homebrew ti chiedono prima di fidarti di un tap di terzi.

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

    Inserisci il token dell’agente nel file di configurazione, poi avvialo come servizio.

    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

    Aggiungi regole di coda o di tag nello stesso file di configurazione e usale come target negli step della pipeline.

Leggi la guida completa a Buildkite

CircleCI

Il macOS ospitato di CircleCI si paga a consumo come quello di GitHub. Il loro machine runner self-hosted gira su macOS e si collega in uscita.

  1. 01

    In CircleCI crea una resource class per i runner self-hosted e genera un token per il runner.

  2. 02

    Installa il machine runner dal tap Homebrew di CircleCI. Segui i passaggi di configurazione per macOS che mostra la loro interfaccia: impostano token e resource class nel file di configurazione del runner.

  3. 03

    Avvia il runner come servizio e usa la resource class come target nei job del tuo config.yml.

CircleCI cambia spesso la procedura di installazione del runner. Segui i comandi esatti della loro pagina di installazione del runner self-hosted per macOS.

Leggi la guida completa a CircleCI

Azure Pipelines

Gli agenti macOS ospitati da Microsoft hanno un parallelismo limitato. Un agente macOS self-hosted è un’opzione di prima classe.

  1. 01

    In Azure DevOps apri Organization settings, poi Agent pools, e aggiungi un agente. Scarica il pacchetto dell’agente macOS che ti propone.

  2. 02

    Estrailo nella home del runner e configuralo con un personal access token con permessi di lettura e gestione su Agent Pools.

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

    Installalo e avvialo come servizio.

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

    Indica il pool nella tua pipeline: pool: { name: <your-pool> }.

Jenkins

Chi usa Jenkins gestisce già i propri agenti. Usa un agente inbound, così il Mac si collega in uscita al controller e non serve nessuna porta in ingresso.

  1. 01

    Installa Java 21. Le release LTS attuali di Jenkins richiedono Java 21 o 25 anche sugli agenti.

    brew install openjdk@21
  2. 02

    In Jenkins aggiungi un nuovo nodo con il metodo di avvio Launch agent by connecting it to the controller. Jenkins mostra il download di agent.jar e il comando esatto da eseguire con il tuo secret.

  3. 03

    Esegui quel comando sul Mac dentro tmux, oppure come LaunchAgent così si ricollega dopo un riavvio.

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

    Assegna al nodo l’etichetta macos e limita a quell’etichetta i job interessati.

Leggi la guida completa a Jenkins

Stessa macchina, stesso prezzo.

Scegli il tuo sistema CI nel modulo di registrazione. L’URL è facoltativo per tutto tranne il controllo antifrode, che funziona meglio se lo indichi.