Docs

Não usa GitHub? O mesmo Mac funciona com todos os grandes CIs.

Configuramos o GitHub Actions para você e damos suporte direto a ele. Mas sua máquina é um Mac mini normal com acesso SSH. GitLab, Bitbucket, Buildkite, CircleCI, Azure Pipelines e Jenkins têm agentes que rodam no macOS. Instale o que você usa. O resto da máquina é idêntico: Xcode fixado, caches quentes, uma sessão sempre aberta para os simuladores e um cliente por máquina.

Antes de começar

  • +Todos os agentes desta página se conectam de dentro para fora com o seu CI. Nenhum precisa de porta de entrada, então a máquina continua fora da internet pública, como hoje.
  • +Rode o agente com o usuário runner, a mesma conta que o GitHub Actions usa. Ela é dona do Xcode, dos simuladores e dos caches.
  • +Mantenha o agente vivo. Inicie como serviço (brew services, svc.sh) ou dentro de uma sessão do tmux. O usuário runner faz login automático, então existe uma sessão gráfica para simuladores e testes de UI.
  • +O Xcode está instalado e fixado. Escolha uma versão dentro do seu job com xcode-select ou DEVELOPER_DIR, igual no GitHub.
  • +Remova o runner do GitHub se não for usar, ou deixe parado. Ele não custa nada quando não chegam jobs.

Primeiro conecte pelo Tailscale e entre por SSH como runner, igual ao passo 1 da documentação de configuração.

GitLab

Os runners macOS hospedados do GitLab cobram várias vezes a tarifa do Linux. Um Mac dedicado com GitLab Runner é a mesma coisa, mas com preço fixo.

  1. 01

    Instale o binário oficial. O GitLab não mantém a fórmula do Homebrew e recomenda esta opção.

    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

    No seu projeto ou grupo, abra as configurações de CI/CD, crie um runner e copie o token dele. Depois registre no Mac.

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

    Instale e inicie como serviço para o usuário runner. Faça isso em um terminal na sessão da área de trabalho (Compartilhamento de Tela), não por SSH.

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

    Coloque tags no runner (por exemplo macos, xcode) e use a tag nos jobs do seu .gitlab-ci.yml.

Leia o guia completo do GitLab

Bitbucket Pipelines

A Atlassian não oferece nenhum runner macOS hospedado. Quem faz build de iOS no Bitbucket precisa hospedar o próprio Mac, e é exatamente isto.

  1. 01

    O runner precisa de Java. Instale com o Homebrew.

    brew install openjdk@17
  2. 02

    No Bitbucket, abra Repository settings (ou Workspace settings), depois Runners, e adicione um runner do tipo macOS. O Bitbucket mostra um comando de início com os ids da sua conta, do repositório e do runner, e um cliente OAuth. Copie como aparece.

  3. 03

    Rode esse comando no Mac dentro de uma sessão do tmux, ou coloque em um LaunchAgent para iniciar no login.

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

    No bitbucket-pipelines.yml, coloque no step runs-on: [self.hosted, macos] e qualquer label que você escolheu.

Buildkite

O Buildkite foi feito para você trazer sua própria infraestrutura. Um Mac dedicado é exatamente o que um pipeline de iOS no Buildkite espera.

  1. 01

    Instale o agente pelo tap do Homebrew do Buildkite. Versões recentes do Homebrew pedem primeiro que você confie em um tap de terceiros.

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

    Coloque o token do seu agente no arquivo de configuração e inicie como serviço.

    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

    Adicione regras de fila ou de tags no mesmo arquivo de configuração e aponte para elas nos steps do seu pipeline.

Leia o guia completo do Buildkite

CircleCI

O macOS hospedado do CircleCI é cobrado por minuto, como o do GitHub. O machine runner auto-hospedado deles roda no macOS e se conecta de dentro para fora.

  1. 01

    No CircleCI, crie uma resource class para runners auto-hospedados e gere um token de runner.

  2. 02

    Instale o machine runner pelo tap do Homebrew do CircleCI. Siga os passos de configuração para macOS que a interface deles mostra. Esses passos colocam o token e a resource class no arquivo de configuração do runner.

  3. 03

    Inicie o runner como serviço e aponte para a resource class nos jobs do seu config.yml.

O CircleCI muda com frequência o processo de instalação do runner. Siga os comandos exatos da página de instalação do runner auto-hospedado para macOS.

Leia o guia completo do CircleCI

Azure Pipelines

Os agentes macOS hospedados da Microsoft têm paralelismo limitado. Um agente macOS auto-hospedado é uma opção de primeira classe.

  1. 01

    No Azure DevOps, abra Organization settings, Agent pools, e adicione um agente. Baixe o pacote do agente para macOS que ele oferece.

  2. 02

    Descompacte na home do usuário runner e configure com um personal access token que tenha o escopo Agent Pools de leitura e gerenciamento.

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

    Instale e inicie como serviço.

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

    Aponte seu pipeline para o pool: pool: { name: <your-pool> }.

Jenkins

Quem usa Jenkins já cuida dos próprios agentes. Use um agente de entrada (inbound agent) para o Mac se conectar ao seu controller sem precisar de porta de entrada.

  1. 01

    Instale o Java 21. As versões LTS atuais do Jenkins também pedem Java 21 ou 25 nos agentes.

    brew install openjdk@21
  2. 02

    No Jenkins, adicione um novo nó com o método de início Launch agent by connecting it to the controller. O Jenkins mostra o download do agent.jar e o comando exato para rodar com o seu segredo.

  3. 03

    Rode esse comando no Mac dentro do tmux, ou como LaunchAgent para reconectar depois de um reinício.

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

    Coloque o label macos no nó e limite os jobs certos a esse label.

Leia o guia completo do Jenkins

A mesma máquina, o mesmo preço.

Escolha seu sistema de CI no formulário de cadastro. A URL é opcional para tudo, menos para a verificação antifraude, que funciona melhor com ela.