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).
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 ... –
Ne prends pas ça pour un gospel, c'est juste une supposition de ce dont je me souviens. – TechZen