Core Data / CloudKit: Schema-Fragen

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund der Corona-Krise: Die Veröffentlichung von Stellenangeboten und -gesuchen ist bis 31.12.2020 kostenfrei. Das beinhaltet auch Angebote und Gesuche von und für Freischaffende und Selbstständige.

    • Core Data / CloudKit: Schema-Fragen

      Hallo zusammen!

      Ich brauche Bestätigung oder Korrektur meines Verständnisses von diversen Themen bzgl. Core Data mit CloudKit-Synching: Das Grundgerüst einer Mac-Catalyst-App mit entsprechender Synchronisation nimmt langsam Formen an und ich möchte sicher sein, die Zusammenhänge richtig verstanden zu haben.
      1. Im Development wird das Schema auf Basis des Core-Data-Modells erstellt. Änderungen sind möglich und werden automatisch übernommen.
      2. Die Erstellung entsprechender Record Types etc. erfolgt erst, wenn entsprechende Core-Data-Objekte angelegt werden ("lazy creation").
      3. Bei grundlegenden Änderungen kann man das Development-Schema (inkl. aller Daten) im CloudKit Dashboard zurücksetzen.
      4. Vor Veröffentlichung der App muss das Schema manuell in Produktion übernommen werden.
      5. Um sicher zu sein, dass im Development alle Records angelegt werden, muss man entweder in der App alle Funktionen zur Erstellung von Core-Data-Objekten ausführen. Oder man man führt auf dem NSPersistentCloudKitContainer die Methode initializeCloudKitSchemaWithOptions:error: aus: Diese erzeugt Dummy-Records, legt damit das Schema an und verwirft diese Records wieder. Aufgrund des Performance-Impacts sollte man diese Methode nur einmalig vor der Übernahme in Produktion ausführen ... und in der Doku findet man noch ein veraltetes Verfahren mittels Container-Option shouldInitializeSchema.
      6. Ein Schema in Produktion kann zwar ergänzt, nicht aber grundsätzlich geändert werden.
      Puh, das war nun doch mehr als ursprünglich gedacht.

      Habt Ihr Erfahrung mit Core Data inkl. CloudKit-Synching? Dann sagt bitte mal Bescheid, ob das oben Genannte so stimmt oder wo ich etwas mißverstanden habe (ein Verweis auf mehr Informationen wäre dann toll).

      Munter bleiben, Mattes
      Diese Seite bleibt aus technischen Gründen unbedruckt.
    • Manchmal lohnt es sich ja, in die entsprechenden Header zu schauen :)

      Quellcode: NSPersistentCloudKitContainer.h

      1. /*
      2. This method creates a set of representative CKRecord instances for all stores in the container
      3. that use Core Data with CloudKit and uploads them to CloudKit. These records are "fully saturated"
      4. in that they have a representative value set for every field Core Data might serialize for the given
      5. managed object model.
      6. After records are successfully uploaded the schema will be visible in the CloudKit dashboard and
      7. the representative records will be deleted.
      8. This method returns YES if these operations succeed, or NO and the underlying error if they fail.
      9. Note: This method also validates the managed object model in use for a store, so a validation error
      10. may be returned if the model is not valid for use with CloudKit.
      11. */
      12. - (BOOL)initializeCloudKitSchemaWithOptions:(NSPersistentCloudKitContainerSchemaInitializationOptions)options
      13. error:(NSError **)error;
      Alles anzeigen

      Mit den obigen Kommentaren sind ein paar meiner Annahmen (z. B. die Dummy-Records) bestätigt, andere findet man in der schon verlinkten Dokumentation. Schade, dass Apple es nicht für nötig hält, diese zu aktualisieren. Daher wäre es toll, wenn jemand eigene Erkenntnisse beisteuern könnte...

      Mattes
      Diese Seite bleibt aus technischen Gründen unbedruckt.