C’est un problème que nous n’avons jamais eu à traiter jusqu’à l’introduction des storyboards - Chaque fois qu’il y avait un risque de conflit dans l’interface utilisateur, nous nous sommes assurés que 2 développeurs ne travailleraient jamais simultanément sur le même fichier XIB. La raison pour laquelle nous nous sommes abstenus de résoudre les conflits XIB est qu'il peut y avoir des effets secondaires problématiques (XIB étant représenté au format XML, il n'existe donc pas de "bonne" méthode pour fusionner deux versions).
Nous sommes maintenant confrontés à ce problème car tous nos éléments d'interface utilisateur se trouvent dans le même fichier .storyboard. Empêcher le travail simultané sur deux éléments d'interface utilisateur du projet rend le travail en parallèle très difficile.
Des suggestions sur la façon de résoudre ce problème? Merci d'avance pour vos efforts.
Divisez votre storyboard en plusieurs storyboards.
Il n'y a aucune raison pour que votre application ne contienne qu'un seul story-board. Divisez votre storyboard en storyboards de modules. Vous pouvez utiliser +storyboardWithName:bundle:
pour charger des modules de storyboard.
Voir: Meilleures pratiques UIStoryboard pour d’autres bonnes idées de scénarimage.
Mise à jour
Il est important de noter que ce n'est pas une solution complète au problème. De la même manière, vous ne pouvez pas complètement éviter la possibilité de fusionner des conflits dans le code source en décomposant une classe géante en modules plus petits, vous ne pouvez pas non plus éviter la possibilité de conflits de fusion dans le storyboard. L'idée est de réduire la probabilité jusqu'à ce que cela devienne un problème gérable.
Il y aura toujours des situations de fusion délicates dans une grande base de code. Une solution correctement décomposée réduira le nombre de conflits et le nombre de verrouillages nécessaires.
Voici quelque chose que j'ai imaginé alors que je m'amusais à essayer de trouver une solution.
Si vous cliquez avec le bouton droit de la souris sur votre fichier de scénario dans Xcode et accédez à «Ouvrir en tant que», vous verrez qu'il existe plusieurs options. La valeur par défaut est «Interface Builder - iOS Storyboard». Cependant, vous pouvez également sélectionner "code source".
Si vous ouvrez le scénarimage en mode code source, il est possible d’apporter des modifications (bien que ce soit un peu pénible). Mais vous pouvez ajouter du code à partir d'autres storyboards et y apporter des modifications. Je n'ai pas utilisé SVN, mais avec un référentiel git, je peux voir les autres versions du storyboard et copier le code.
Je ne dirais pas que c'est une excellente solution. J'ai eu quelques problèmes avec le plantage aléatoire de Xcode lorsque j'essayais de rouvrir le storyboard dans IB. Parfois, coller du code dans des travaux, parfois non. Quelques fois, j'ai dû changer la valeur de la balise <scene>
. D'après mon expérience, c'est plutôt aléatoire, mais si vous sauvegardez vos fichiers avant d'essayer quoi que ce soit, cela fonctionnera peut-être.
Si cela fonctionne, faites-le moi savoir - je voudrais savoir si une solution peut être trouvée à ce problème.
S'agit-il de la fusion de fichiers XML?
Heureusement, SVN vous permet de modifier l'outil de fusion que vous utilisez pour effectuer la fusion pour différents types de fichiers. (par exemple tutoriel pour utiliser P4Merge )
Alors maintenant, il ne vous reste plus qu'à trouver un excellent outil pour la fusion de fichiers XML (bonne chance :))
il y a WinMerge (avec le préfiltre DisplayXMLFiles), ou diffxml, ou XMLMerger ou un outil/ Java xmlmerge