Les storyboards sont plutôt une douleur royale du point de vue du flux de travail git lorsque plusieurs personnes collaborent dessus. Par exemple, le XML dans le fichier .storyboard a sa <document>
balise de départ toolsVersion
et ses systemVersion
attributs modifiés par la configuration exécutée par le manipulateur de fichier le plus récent. Synchroniser les versions Xcode de tout le monde semble aider avec précision toolsVersion
, mais systemVersion
change quoi qu'il en soit, en fonction de la version Mac et / ou OS X spécifique que le développeur utilise.
C'est idiot, mais surtout inoffensif. Ce qui nous inquiète, cependant, c'est qu'à d'autres moments, d'autres modifications sont automatiquement apportées au storyboard simplement en les ouvrant après un git pull
. C'est-à-dire qu'Alice apporte des modifications à un storyboard, les valide et les pousse vers le référentiel. Bob récupère ensuite les modifications d'Alice et ouvre le storyboard pour apporter d'autres modifications. Au moment où il ouvre le storyboard, l'icône du fichier passe immédiatement à un état modifié mais non enregistré, et git status
indique qu'un certain nombre de changements étranges se sont produits. Tout cela sans que Bob n'ait rien changé ou sauvegardé le fichier lui-même.
Le changement automatisé le plus courant que nous constatons est la disparition ou la réapparition de l'ensemble de la <classes>
hiérarchie des balises vers la fin d'un fichier de storyboard. Nous n'avons pas compris ce qui cause cela. Nous pouvons avoir plusieurs versions localisées d'un storyboard dans divers répertoires .lproj, et lors de leur ouverture dans Interface Builder, la hiérarchie des classes peut être spontanément supprimée de certains et ajoutée à d'autres, ou laissée seule dans certains. Cela provoque beaucoup de bruit git diff
, mais cela n'interrompt aucune fonctionnalité. Nous ajouterons souvent de manière sélective les modifications réelles que nous avons apportées à l'index de git, les commettrons, puis rejetons simplement les modifications spontanées et absurdes<classes>
changements. C'est pour garder les commits petits et gentils, comme ils devraient l'être. Finalement, cependant, cela devient tout simplement trop dérangeant puisque Xcode continue de refaire les modifications, et quelqu'un les remet simplement avec d'autres choses ... ce qui est bien jusqu'à ce que Xcode de quelqu'un d'autre décide de vouloir les changer pour non raison apparente. (Notre histoire de commit a beaucoup de jurons à ce sujet.)
Quelqu'un d'autre voit-il ce comportement? S'agit-il d'un bogue Xcode ou d'un problème de configuration sur un ou plusieurs de nos Mac développeurs? Nous avons constaté un comportement similaire lors de la collaboration avec des fichiers XIB, mais les storyboards semblent plus sensibles à cela.