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.

ArrangementWhere the source livesWhat crosses the link
Everything localLocal diskRepository and dependency traffic
Remote Xcode, screen sharedRemote diskDisplay frames and input events
Local edit, remote buildBoth, with a handoffSource 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.

Artigos relacionados