Mac remoto para Xcode: compilação local, compilação remota ou partilha de ecrã?
Um espaço de trabalho montado e um Xcode remoto movem dados diferentes. Decida onde vivem o código-fonte, o índice e a compilação, e depois meça as idas e voltas.
Partilhar um projeto pela rede não desloca o Xcode, porque a aplicação continua a correr no seu Mac e continua a pedir os dados do projeto ao servidor. Correr o Xcode no Mac remoto e ver o respetivo ecrã é uma disposição diferente, em que a aplicação e os seus ficheiros ficam juntos e a ligação transporta apenas a imagem e a sua entrada. Decidir qual delas quer, antes de configurar seja o que for, resolve a maior parte da confusão posterior.
Três disposições cobrem os casos habituais e diferem no local onde vive o espaço de trabalho e na máquina que compila. Anote a sua resposta a esses dois pontos antes de continuar.
Dê um nome à máquina que corre o Xcode
Na primeira disposição tudo é local: a cópia local, o índice e a compilação vivem todos no seu Mac, e a rede transporta apenas o tráfego do repositório e das dependências. Na segunda, o projeto fica no Mac remoto com o Xcode, pelo que a indexação e a compilação acontecem junto dos ficheiros, enquanto a ligação transporta o conteúdo do ecrã e as teclas. Na terceira, a edição acontece localmente e uma compilação corre num anfitrião remoto após uma transferência explícita do código-fonte. A tabela indica o que cada uma move.
| Arrangement | Where the source lives | What crosses the link |
|---|---|---|
| Everything local | Local disk | Repository and dependency traffic |
| Remote Xcode, screen shared | Remote disk | Display frames and input events |
| Local edit, remote build | Both, with a handoff | Source transfer, then build output |
Leia primeiro a coluna do meio, porque é ela que decide onde os erros vão aparecer. Um fluxo de trabalho cujo código-fonte é remoto falha quando a ligação está lenta, ao passo que um fluxo de trabalho com um compilador remoto falha quando a transferência é ambígua. Só a terceira o torna responsável por ambos.
Conte as idas e voltas, não os megabytes
Um editor e um indexador emitem muitas operações de ficheiro pequenas, e cada uma torna-se uma ida e volta quando o sistema de ficheiros é remoto. Isso torna um espaço de trabalho montado sensível à latência de uma forma que uma única cópia grande não é, e é por isso que medir o tempo de uma transferência de ficheiros quase nada diz sobre como o fluxo de trabalho se sente. A visualização remota tem o perfil oposto: move um fluxo contínuo e tolera melhor a taxa de transferência do que o atraso. Comparar as duas com um único número produz uma resposta errada com confiança.
Nenhuma das disposições é a mais rápida por natureza. A escolha certa depende do trabalho que realmente faz, e é por isso que o passo seguinte é experimentar esse trabalho em vez de um teste de referência.
Torne explícita a transferência do código-fonte
Quando ambas as máquinas têm uma cópia local, decida qual delas é a autoritativa e que revisão a compilação remota usou. Um commit é uma transferência mais clara do que duas ferramentas a editar uma única árvore de trabalho montada, porque o commit tem uma identidade e a montagem não. Os resultados gerados e os dados do índice também precisam de um dono, porque são reconstruídos a partir do código-fonte e não devem viajar como se fossem código-fonte. Um espelho bidirecional sem regras de conflito não é um fluxo de trabalho, é uma corrida.
Compilar remotamente também exige que o anfitrião remoto tenha a cadeia de ferramentas correta e as credenciais para dependências privadas. Uma VPN que lhe permite alcançar o anfitrião não lhe empresta o acesso à sua conta e não instala aí o Xcode.
Verifique o caminho antes de se comprometer com um fluxo de trabalho
Verifique o anfitrião remoto antes de desenhar em torno dele, e depois meça a ligação com as operações que o fluxo de trabalho irá realmente executar. Os comandos abaixo verificam a cadeia de ferramentas, o diretório de programador ativo e o custo de observação de ficheiros que torna os espaços de trabalho remotos penosos. Execute o último através do caminho de rede em vez de localmente.
xcode-select -p
xcodebuild -version
ssh mac-builder 'xcodebuild -version'
time git status --porcelain
Um anfitrião sem uma instalação completa do Xcode devolve um erro do xcodebuild, o que é um problema de cadeia de ferramentas e não de rede. O diretório de programador mostra qual Xcode a compilação vai usar, e um caminho que aponta apenas para as ferramentas de linha de comandos significa que a aplicação não está instalada. Medir o tempo do comando de estado do repositório através da partilha montada expõe diretamente o custo da ida e volta, e compará-lo com uma execução local dá o número que importa. Se essa diferença já é desagradável, o fluxo de trabalho com espaço de trabalho montado será pior com um editor real.
Registe qual disposição escolheu, que máquina é dona do código-fonte e como funciona a transferência. Essa nota transforma a próxima integração ou substituição de portátil numa tarefa de configuração em vez de uma investigação.