Re: Freshly created .xcmappingmodel seems to have incorrect version hashes

2013-03-12 Thread Sean McBride
On Mon, 17 Dec 2012 17:37:22 -0500, Sean McBride said:

>I created a brand new .xcmappingmodel for version x to y of my
>xcdatamodel.  I don't change anything in the mapping GUI.  I clean.  I
>build.  I write some test code:
>
>NSURL* url = ...App.app/Contents/Resources/VersionXToY.cdm
>mappingModel = [[NSMappingModel alloc] initWithContentsOfURL:url]
>
>for (NSEntityMapping* em in [mappingModel entityMappings])
>{
>   id dn = [em destinationEntityName];
>   id dh = [em destinationEntityVersionHash];
>   NSLog(@"%@ = %@", dn, dh);
>}
>
>I then open up the VersionInfo.plist file within my .app and compare the
>entity hashes.
>
>For most, the VersionInfo.plist matches the hashes extracted from
>the .cdm, but for 2 entities they do not.
>
>How can this be?!  As I said, the xcmappingmodel is freshly created!

Just to follow up on this for the archives...

It turns out to be a bug in Xcode's GUI, which I filed as:

 Xcode relationship editor shouldn't toggle 'minimum' when 
toggling 'optional'

-
Summary:
Xcode's Core Data relationship editor should *not* toggle the 'minimum' 
checkbox when toggling the 'optional'  checkbox because doing so breaks Core 
Data migration.

Details:
- unzip TrivialMigrationTestStartPoint.zip
- open its Xcode project
- notice it has a trivial xcdatamodel with just 2 entities
- each entity has a relationship and they are both non-optional
- now let's say we need to change the model…
- in Xcode:
 - select the xcdatamodel
 - choose Editor > Add Model Version…
 - the xcdatamodeld bundle and a Version 2.xcdatamodel are created
 - select the version 2.xcdatamodel
 - select the Person entity's 'department' relationship
 - notice the 'optional' checkbox is off, the 'minimum' checkbox is on, and the 
minimum value is 1.
 - now let's say we want 'department' to be optional. This should be no problem 
for migration, since in old stores it will always be present (since it was 
non-optional)
 - click the optional checkbox
- At this point you have the equivalent of TrivialMigrationTestEndPoint.zip 
(also attached)

Expected:
- 'optional' checkbox should go ON, and other settings *should not change*.

Actual:
- 'optional' checkbox does correctly go ON
- the 'minimum' checkbox is also turned OFF. This is bad, elaboration below.
- (see attached video)

Notes:
- turning off 'minimum' is bad because it results in rdar://13000229.  It 
breaks migration.  An xcmappingmodel built from Version1 and Version2 above 
will have different hashes than the actual xcdatamodels.  It seems that, 
rightly or wrongly, because the minCount is present in the old model but not in 
the new model the hashes are different.
- see also the attached ModelDiff.png which shows the change in the xml 
xcdatamodel

Version1:



Version2:



The fact that minCount="1" is gone in Version2 is what breaks migration, as per 
rdar://13000229.


Regression:
Occurs in 4.5.2 and 4.6dp4.  Didn't try older.
-

Cheers,

-- 

Sean McBride, B. Eng s...@rogue-research.com
Rogue Researchwww.rogue-research.com 
Mac Software Developer  Montréal, Québec, Canada

___

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Freshly created .xcmappingmodel seems to have incorrect version hashes

2012-12-17 Thread Sean McBride
Hi all,

I created a brand new .xcmappingmodel for version x to y of my xcdatamodel.  I 
don't change anything in the mapping GUI.  I clean.  I build.  I write some 
test code:

NSURL* url = ...App.app/Contents/Resources/VersionXToY.cdm
mappingModel = [[NSMappingModel alloc] initWithContentsOfURL:url]

for (NSEntityMapping* em in [mappingModel entityMappings])
{
id dn = [em destinationEntityName];
id dh = [em destinationEntityVersionHash];
NSLog(@"%@ = %@", dn, dh);
}

I then open up the VersionInfo.plist file within my .app and compare the entity 
hashes.

For most, the VersionInfo.plist matches the hashes extracted from the .cdm, but 
for 2 entities they do not.

How can this be?!  As I said, the xcmappingmodel is freshly created!

Thanks,

-- 

Sean McBride, B. Eng s...@rogue-research.com
Rogue Researchwww.rogue-research.com 
Mac Software Developer  Montréal, Québec, Canada



___

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com