Storyboards são uma verdadeira dor de uma perspectiva de fluxo de trabalho git quando várias pessoas estão colaborando neles. Por exemplo, o XML no arquivo .storyboard tem suas <document>
tags toolsVersion
e systemVersion
atributos iniciais alterados por qualquer configuração que o manipulador de arquivos mais recente esteja executando. Sincronizar todas as versões do Xcode parece ajudar com precisão toolsVersion
, mas systemVersion
muda não importa o que aconteça, dependendo da versão específica do Mac e / ou OS X que o desenvolvedor está executando.
Isso é idiota, mas principalmente inofensivo. O que nos preocupa, porém, é que, em outras ocasiões, algumas outras alterações são feitas automaticamente no storyboard apenas abrindo-as após um git pull
. Ou seja, Alice faz alterações em um storyboard, confirma e envia por push para o repositório. Bob então puxa as mudanças de Alice e abre o storyboard para fazer outras mudanças. No momento em que ele abre o storyboard, o ícone do arquivo muda imediatamente para um estado modificado, mas não salvo, e git status
mostra que várias mudanças estranhas ocorreram. Tudo isso sem que Bob tenha alterado nada ou salvo o arquivo por conta própria.
A alteração automatizada mais comum que vemos é o desaparecimento ou reaparecimento de toda a <classes>
hierarquia de tags próximo ao final de um arquivo de storyboard. Não descobrimos o que está causando isso. Podemos ter várias versões localizadas de um storyboard em vários diretórios .lproj e, ao abri-los dentro do Interface Builder, a hierarquia de classes pode ser removida espontaneamente de alguns e adicionada a outros, ou deixada sozinha em alguns. Isso causa muito ruído git diff
, mas não interrompe nenhuma funcionalidade. Frequentemente adicionaremos seletivamente as mudanças reais que fizemos no índice do git, as confirmaremos e, em seguida, apenas descartamos as alterações espontâneas e sem sentido<classes>
alterar. Isso é para manter os commits pequenos e agradáveis, como deveriam ser. Eventualmente, porém, torna-se muito incômodo, já que o Xcode continua refazendo as alterações, e alguém apenas as confirma junto com outras coisas ... o que está bem até que o Xcode de outra pessoa decida alterá-las de volta para não razão aparente. (Nosso histórico de commits tem muitos juramentos sobre isso.)
Alguém mais está vendo esse comportamento? É um bug do Xcode ou um problema de configuração em um ou mais de nossos Macs de desenvolvedor? Vimos algum comportamento semelhante ao colaborar com arquivos XIB, mas os storyboards parecem mais suscetíveis a isso.