Versioning
One of the interesting bits about the versioning is that it is not done at the model level and it is not something that you have to think about or even plan for in your source code.
The versioning works by creating hashes of your entities. When a persistent store is opened, Core Data compares the hash of what is stored on disk with the hash of the current data model. If they do not match, then the migration engine kicks in, finds the appropriate mapping model, and converts the data from the older store to the newer version.