
Se você usa uma implantação Dedicated SaaS, entre em contato com seu account team para ativar as VMs macOS.
Como funciona
O suporte a macOS é construído sobre o mesmo sistema de configuração declarativa do Linux. O camporuns-on no seu blueprint indica ao Devin em qual plataforma fazer o build e a execução, e cada plataforma tem seu próprio snapshot.
As principais diferenças em relação ao Linux são o shell, a organização do sistema de arquivos e o gerenciador de pacotes:
Iniciando uma sessão no macOS
Você pode escolher o macOS para cada sessão:- Blueprint: adicione
runs-on: macospara que o snapshot do repositório seja criado para macOS (veja abaixo). - Slack: use o bang command
!macpara iniciar uma sessão em uma VM macOS. - API: defina
platform: "macos"ao criar uma sessão, um agendamento ou uma automação. Consulte a referência da API. - Padrão da organização: um administrador pode definir o macOS como padrão para novas sessões em Configurações → Devin → Default platform ou pela API Set Organization Default Platform. Para verificar o valor atual, use Get Organization Default Platform.
Escrevendo blueprints para macOS
Blueprint de plataforma única
Se o seu repositório tem como alvo apenas plataformas Apple, useruns-on: macos no nível superior:
Blueprint multiplataforma
Para fazer o build do mesmo repositório para mais de uma plataforma, escreva cada plataforma como um documento YAML separado, delimitado por---. Cada documento declara seu próprio rótulo runs-on. Consulte o aviso YAML multidocumento no guia de blueprints para mais informações sobre esse formato.
O campo runs-on
O campo runs-on é mapeado para uma configuração de máquina registrada na sua conta:
Você pode especificar
runs-on como uma string ou uma lista:
Uso e custo
Atualmente, sessões no macOS consomem o mesmo uso que sessões equivalentes no Linux, sem sobretaxa para macOS.Este é um preço promocional de lançamento e está sujeito a alterações.
O que já vem instalado
As images de sessão do macOS já vêm com o toolchain da Apple instalado, então seu blueprint não precisa baixá-lo:
As versões mudam conforme a Apple lança novas versões e a image é atualizada. Para saber exatamente o que uma sessão tem, peça ao Devin para executar:
Selecionando uma versão do Xcode
O Xcode padrão é aquele apontado peloxcode-select. Para usar outra versão instalada em um único comando, defina DEVELOPER_DIR:
/usr/bin/xcodebuild (o shim que respeita DEVELOPER_DIR) em vez de um xcodebuild resolvido a partir do Contents/Developer/usr/bin de um Xcode específico no PATH, que reporta a própria versão independentemente de DEVELOPER_DIR.
Ou altere o padrão para a sessão inteira:
Comportamento da sessão no macOS
Shell
As sessões no macOS usam o zsh como shell padrão. A maioria dos comandos de shell POSIX funciona sem alterações em relação aos blueprints Linux, mas atenção ao userland BSD: osed -i exige um argumento (sed -i ''), e ferramentas GNU como gsed, gdate e greadlink vêm da fórmula coreutils do Homebrew.
Caminhos
/Users/devin/repos/<repo-name>, e os arquivos que você importa para uma sessão são gravados em /Users/devin/.files/.
Segredos
Os segredos ficam disponíveis como variáveis de ambiente durante as sessões ($SECRET_NAME), assim como no Linux. É assim que você fornece chaves de API do App Store Connect, credenciais de assinatura ou tokens de registro privado:
Sleep e wake da sessão
As sessões fazem um snapshot em disco ao entrar em sleep. Tudo o que está em disco sobrevive ao wake: ferramentas instaladas, repos clonados, caches de build, dados derivados. Processos em execução, não: servidores de desenvolvimento, simuladores e watchers precisam ser reiniciados depois que a sessão acorda.Computer Use
O Computer Use funciona em sessões macOS: o Devin ganha um desktop macOS completo, com Chrome, mouse e teclado, podendo testar tanto apps nativos do macOS quanto web apps e gravar o que faz. O Devin usa a tecla Command para os atalhos do macOS (⌘C, ⌘V, ⌘Tab), e não a tecla Control.iOS Simulator
O Devin pode iniciar e controlar o iOS Simulator diretamente:Dicas e truques
Caches de build aquecidos
Um build frio do Xcode resulta em uma experiência de desenvolvimento abaixo do ideal, com tempos de build mais longos. Use o campomaintenance no environment.yml para preaquecer o cache.
Acesso à rede
Builds que buscam dependências no CocoaPods, no Swift Package Manager, no Firebase ou em um registro privado precisam que esses hosts estejam acessíveis. Se a sua organização opera com uma política de rede restrita, verifique se a lista de permissões do macOS cobre os mesmos registros usados pelos seus builds no Linux. As duas são configuradas separadamente, e uma entrada ausente geralmente se manifesta como uma falha de resolução de dependências ou de TLS no meio de um build.Executando contêineres
VMs macOS não têm virtualização de hardware aninhada, portanto o runtime de contêineres precisa recorrer à emulação por software do QEMU (TCG). O Colima detecta isso e alterna para a emulação automaticamente:colima start novamente se ele falhar. Depois disso, os contêineres rodam de 15 a 25x mais devagar na CPU do que nativamente, levando alguns segundos para iniciar cada um; os pulls acontecem na velocidade da rede do host. Isso é aceitável para um contêiner de linting ou empacotamento, mas sofrido para compilação. Para trabalhos que dependem muito de contêineres, use uma sessão Linux ou aponte a sessão macOS para um daemon Docker remoto.
Não instale o Xcode em um blueprint a menos que seja necessário
O Xcode é um download de vários gigabytes e a Apple exige um Apple ID para baixá-lo. Prefira as versões já disponíveis na image, selecionadas comDEVELOPER_DIR ou xcode-select. Se precisar de uma versão diferente ou de uma beta, você pode armazenar um Apple ID como segredo e fazer o blueprint baixar essa versão, ao custo de um build muito mais lento.
Limitações
Solução de problemas
Os builds ficam muito mais lentos na primeira sessão após um rebuild do snapshot. O DerivedData foi reconstruído do zero. Adicione uma etapabuild-for-testing ao maintenance para que o snapshot já inclua um build aquecido.
O xcodebuild escolhe a toolchain errada. Verifique xcode-select -p e defina DEVELOPER_DIR explicitamente na etapa do blueprint.
Um destino não é encontrado. Execute xcrun simctl list devices available para ver o que os runtimes instalados realmente oferecem e ajuste o nome e o SO em -destination de acordo.
A resolução de dependências trava ou falha com um erro de TLS. Provavelmente o host não está na lista de permissões de rede da sua organização para macOS. Consulte Acesso à rede.
