Core Data Änderungen + In House Verteilung

  • Core Data Änderungen + In House Verteilung

    Hallo zusammen,

    wir haben eine App entwickelt die bei einem Kunden per Enterprise Programm von uns In House verteilt wird. Die App gibt es nicht im App Store. Nun haben wir ein Update entwickelt bei dem ein neues Feld in der Core Data Struktur dazugekommen ist. Das Update stellen wir online und der Nutzer bekommt in seiner App den Hinweis das ein Update verfügbar ist. Klickt er auf "Jetzt updaten" wird die neue App automatisch runtergeladen und quasi über die alte drüber installiert.

    Wie sieht das in dem Fall mit den Core Data Änderungen aus? Werden die migriert oder muss ich da von Hand was schreiben?

    Gruß Tuni
  • Meines Erachtens musst Du das Model versionieren.
    Stichwort wäre: lightweight migration core data

    Allerdings, da hatte ich mal arge Probleme mit, geht dies scheinbar nur, wenn am eigentlichen Datenmodell nichts ändert. Rename etc. wohl kein Problem. Neue Datenfelder ?(
    So etwas hätte ich aber im Vorfeld geprüft. ;(

    Wäre schön, wenn Du später schreiben würdest, wie die Sache ausgegangen ist. Neugier :D

    Viel Erfolg
    Andreas
    "Die Welt wird Dich Gehorsam lehren, denn da besteht die Notwendigkeit ein Stück Brot zu verdienen."

    Mika Walthari
  • Die werden nur migriert, wenn du das einbaust.
    Wie das geht steht für so ziemlich jeden erdenklichen Fall im Core Data Model Versioning and Data Migration Guide.
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • silverChart schrieb:

    Meines Erachtens musst Du das Model versionieren.
    Stichwort wäre: lightweight migration core data

    Allerdings, da hatte ich mal arge Probleme mit, geht dies scheinbar nur, wenn am eigentlichen Datenmodell nichts ändert. Rename etc. wohl kein Problem. Neue Datenfelder ?(
    So etwas hätte ich aber im Vorfeld geprüft. ;(

    Wäre schön, wenn Du später schreiben würdest, wie die Sache ausgegangen ist. Neugier :D

    Viel Erfolg
    Andreas


    Hallo Andreas,

    also mein Modell hat mitlerweile Version 8 und hinzufügen von Attributen war bisher überhaupt kein Problem. Löschen und ändern eines alten Attributes hingegen schon.

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Thallius schrieb:

    Hallo Andreas,

    also mein Modell hat mitlerweile Version 8 und hinzufügen von Attributen war bisher überhaupt kein Problem. Löschen und ändern eines alten Attributes hingegen schon.

    Gruß

    Claus
    Hallo Claus,

    werde ich heute Nachmittag ausprobieren. Klingt gut. Irgendwie war mir erinnerlich, dass ich da mal Probleme hatte. Frank hat mir da mal ein Mini-Podcast für gemacht und den werde ich mir dann auch ansehen.

    aktuell ist mein EM-Programm kurz vor den ersten Tests und da werde ich mal den Quälfix rauslassen 8|

    Danke für den Hinweis
    Andreas
    "Die Welt wird Dich Gehorsam lehren, denn da besteht die Notwendigkeit ein Stück Brot zu verdienen."

    Mika Walthari
  • Ich habe das jetzt mit Hilfe dieses Tutorials gemacht:

    raywenderlich.com/27657/how-to…eight-core-data-migration

    Eine Frage, stimmt das so wie ich es gemacht habe?

    - neue Model Version angelegt und als Current gesetzt
    - neues Feld im neuen Model hinzugefügt
    - folgenden Code im App Delegate in der "persistentStoreCoordinator" hinzugefügt:

    Quellcode

    1. NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
    2. [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
    3. [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
    4. if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error])
    5. {


    Habe ich was vergessen? In dem Model ist nur ein neues Feld eingefügt worden, sonst hat sich nichts verändert.
  • So, hab das Video gefunden: "Mac Development Foundation Videos - Application Technologies: Managing Schema Versioning and Data Migration in Your Core Data Application Session 111" aus WWDC 2007

    Das ganze Thema wirkt zuerst komplex und abschreckend, aber die Lösung von Apple ist gut und man kommt in ziemlich vielen Fällen ohne eigenen Code aus (lediglich ein mapping-model).