The concept of migrations and versioning is related to the problems that are caused when we make some changes in our data model. Like if we add or delete some attribute(s) from an existing Entity or add one more Entity to our data model. In that case, our new version of application will crash when launched because of the simple fact that the existing data in the persistent store on the iPhone will be unusable in the new version of our application.
This problem can be corrected at our end by selecting Reset Content and Settings option from the iPhone simulator menu or by uninstalling the application from the iPhone and re-installing it. Consequently, the CoreData will create a new persistent store on the basis of the new Data model when the application is launched. But the problem occurs at the client's end, who has the older application, and a new version of the application is sent to them. They cannot uninstall and re-install the application as they will lose their existing data...