2010-09-06 4 views
3

Je sais .xcdatamodel est en fait un répertoire avec deux fichiers (elements et layout).CoreData: Est-il possible de fusionner des "fichiers" .xcdatamodel?

Je sais que les deux fichiers sont des plists binaires, et peuvent les convertir en XML avec plutil -convert xml1 (tout en s'appuyant sur ce peut être "imprudent", il est parfaitement bien pour le développement: je m'attends à ce que les outils compilent/optimisent quoi que ce soit en les mettant sur l'appareil, et en supposant que Xcode ne perd pas la capacité de lire les anciens fichiers, je peux toujours les convertir en binary1).

Mes deux problèmes:

  • Xcode modifie les deux fichiers si vous tant que déplacer une entité (j'aurais prévu que juste changer layout), ce qui est tout à fait inutile avec plusieurs développeurs.
  • Il semble y avoir aucun moyen facile de fusionner les modifications (même le format XML plist est un graphe d'objet sérialisé NSKeyedArchiver, donc une fusion textuelle ne fonctionnerait pas).
  • Il semble y avoir aucun moyen facile de voir ce qui a changé (peut-être que je pourrais les convertir en XML à la fois et faire un diff ... ugh).

Quelqu'un at-il trouvé une solution à l'un de ces? Puis-je forcer Xcode à enregistrer en tant que plist XML, ou forcer Subversion à les convertir en plist XML lors de la validation? Le diff est-il même vaguement sensible? Existe-t-il un outil externe qui effectue un diff .xcdatamodel?

EDIT: Le verrouillage SCM ne résout pas vraiment le problème plus que de dire "Je suis sur le point d'éditer X"; le danger est que quelqu'un oublie de verrouiller, fait un changement, des mises à jour, et tout casse. La propriété svn:needs-lock doit fonctionner, mais malheureusement Xcode ne respecte pas chmod -w sur elements ou layout (un .xcdatamodel non-inscriptible ne fonctionne pas non plus, même si Xcode affiche l'icône de verrouillage, et svn échoue en plus).

Répondre

0

Je ne pense pas que ce soit possible. Tout en traquant un fichier corrompu il y a plusieurs années, j'ai remarqué que les fichiers modèles semblaient changer une quantité excessive de structure de texte pour des changements logiques mineurs. Cela ne semble pas être comme du code, mais la structure des données se déplace bizarrement. Cela peut être le résultat de la sérialisation des NSSets imbriqués qui n'ont pas d'ordre fixe.

Je pense que votre meilleur pari est de verrouillage du modèle de données et ne permettant un contrôle à un moment. Franchement, je serais très nerveux à propos de la fusion de n'importe quel fichier XML à la manière d'une vieille école.

+0

NSSets sont probablement enregistrés pour Hashtable. Il est possible de rendre vaguement cohérente (utiliser un hachage mieux et de prendre les bits de poids fort pour l'indice de Hashtable), mais hélas, il est beaucoup plus courant d'utiliser bad-hachage-mod-un-grand-prime. Cela ne fonctionne pas non plus pour les sets de sets ... –

+0

Ne prends pas ça pour un gospel, c'est juste une supposition de ce dont je me souviens. – TechZen

0

Git ou Mercurial même probablement rendre les choses plus facile que SVN.

Aussi, j'ai récemment vu le WWDC 2011 Session Video, What's New in Core Data on iOS et entendu que dans Xcode 4.2, .xcdatamodel fichiers sont diffable. Si ces diffs sont vaguement sensibles, je n'ai pas testé cela. Disons que je devine qu'il est plus facile d'ouvrir trois éditeurs de modèles de données GUI Xcode et de reconstruire un modèle de données fusionné à partir de zéro en regardant les deux autres.

+0

Je doute en quelque sorte que Git sait comment fusionner les blobs binaires de NSKeyedArchiver (que je pense qu'une .xcdatamodel est). –

+0

Les fichiers .xcdatamodel ne sont pas diffeables à partir de Xcode 4.4. –

Questions connexes