Core Data Modell für mehrere Apps

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

  • Core Data Modell für mehrere Apps

    Hi,

    ich habe eine MacOS CodeData-App. Nun möchte ich eine weitere MacOS App mit dem gleichen xcdatamodeld implementieren. Hintergrund ist, dass die beiden Apps eine ähnliche Business-Logic haben.

    Beide Apps können die identische xcdatamodeld nutzen.

    Die 'neue' App möchte im gleichen Workspace wie die 'bestehende' nutzen. Wenn ich die xcdatamodeld der 'bestehenden' nutzen kann, kann ich auch viel Code leveragen.

    Ist es möglich dass zwei Apps die gleiche xcdatamodeld verwenden können?

    Danke
    Wenn Du immer nur das tust was du schon kannst - wirst du immer das bleiben, was du heute bist.
  • Ja, Persistent Store wird der gleiche sein. Die Daten werden nur anders verwendet und verarbeitet.

    Nein, der Persistent Stores wird im Filesystem anders Extensions haben.

    Die unterschiedliche Business-Logic benötigt die gleichen Entitys nur die Verarbeitung und datestellung wird eine andere sein.
    Wenn Du immer nur das tust was du schon kannst - wirst du immer das bleiben, was du heute bist.
  • Im xcdatamodeld sind Entities die Persoen und Abteilungen beschrieben. Entitäten der Personen werden zu Entitäten der Abteilungen zugeordnet. Aus den Abteilungen wird ein Plan erstellt wer zu welcher Zeit benötigt wird.

    Die Business-Logic der "bestehenden" App ist Abteilungs-Orientiert. Das bedeutet, wenn etwas im Plan verschoben wird ist es eine Abteilung.

    Die Business-Logic der "neuen" App soll Zuordnung-Orientiert arbeiten. Hier werden die einzelnen Zuordnungen im Plan verschoben ohne die Zuordnung zur Abteilung zu verändern.

    Beide sollen die Daten einer Web-Applikation nutzen in dem die konkreten Personen und ihre Zuordnungen zu den Abeitlungen enthalten sind laden und verarbeiten können.

    Extension der Files die beide Apps im Filesystem anlegen werden verschieden sein.

    Im Wesentlichen ist die Art und Weise wie die Daten im Plan verwendet werden verschieden.
    Wenn Du immer nur das tust was du schon kannst - wirst du immer das bleiben, was du heute bist.
  • Wenn beide Apps die Daten von einer Web-App laden und verwenden und Änderungen an den Daten in der jeweils anderen App keine Rolle spielen, dann kannst Du für jede App auch einen eigenen Persistent Store verwenden.

    Das Datenmodel und die dazu passenden Klassen inkl. der Business Logik für beide Apps kannst Du in ein eigenes Xcode Projekt packen, welches Du dann in beiden Apps verwendest.
  • OK, Ich wollte die "neue" in den Workspace der "bestehenden" integrieren.

    Damit kann ich gemeinsamen Source-Code in beiden verwenden - soweit ich es verstanden habe.

    Nur weiss ich nicht, wie ich bei der neuen "Document-Based App" das bestehende Data-Modell verwendet wird bei einem "File > New".
    Wenn Du immer nur das tust was du schon kannst - wirst du immer das bleiben, was du heute bist.
  • uschu.do schrieb:


    Nur weiss ich nicht, wie ich bei der neuen "Document-Based App" das bestehende Data-Modell verwendet wird bei einem "File > New".
    Irgendwie habe ich immer noch Verständnisprobleme mit Deiner Fragestellung:

    Ich habe verstanden, dass es Dir ausschliesslich um die Übernahme des Datenmodells geht, nicht um eine gemeinsame Nutzung der Daten in beiden Applikationen. Letztlich kannst Du jede beliebige Quelldatei zwischen mehreren Xcode-Projekten teilen, Du musst sie nur in den Navigator ziehen bzw. über den Menüpunkt "Files" - "Add Files to..." dem Projekt hinzufügen und die Option "Copy items if needed" deaktivieren. Xcode arbeitet ja eh nur mit Dateireferenzen und nichts erzwingt, dass diese in dem Projekt-Verzeichnis liegen müssen. So kannst Du die gleiche .xcdatamodel-Datei (die eigentlich ein Package mit einer XML-Datei ist) in diversen Projekten verwenden, sie aber nur einmal pflegen.

    Im "neuen" Projekt muss Du Dich um die Einbindung von CoreData selber kümmern - so Du nicht ein entsprechendes Projekt-Template verwendest und die .xcdatamodel-Datei "unter der Haube" ersetzt: Entsprechende Methoden für MOC, MOM, PSC erstellen (oder NSPersistentContainer nutzen), Codegenerierung der managedObject-Klassen definieren etc. Infos finden sich hier (bzw. für die alte / händische Methode mit MOC / MOM / PSC hier).

    Insofern ist mir unklar, was Du mit einer Verwendung des Data-Models bei "File" - "New" meinst...

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Was ich meinte ist:
    Bei der bestehenden App ist das xcdatamodeld benannt mit "MyDocument2". Wenn ich nun eine neue Document Based App anlege, ist das xcdatamodeld "Document" bezeichnet.

    Wenn ich nun in der neuen das vom Template erzeugte xcdatamodeld lösche und das "MyDocument2" referenziere (unter der Haube ersetzt), muss ich beim Erzeugen eines neuen Documents in der "neuen" App das "MyDocument2.xcdatamodeld" verwendet werden und nicht das aus dem Template.

    Wo muss ich das einstellen ?
    Wenn Du immer nur das tust was du schon kannst - wirst du immer das bleiben, was du heute bist.
  • uschu.do schrieb:


    Wo muss ich das einstellen ?
    "Einstellen" ist vielleicht der falsche Term. Ich weiss nicht, wie Du Deinen Data-Stack in der App erzeugst (siehe oben automatisch vs. manuell), aber aus der .xcdatamodel-Datei wird in der Build-Phase eine .mom kompiliert, und diese bei Erzeugung des PSCs - bei manueller Erstellung - referenziert. Hier musst Du also den Dateinamen beim Suchen der Bundle-Resource der .mom-Datei ändern.

    Bei Nutzung des NSPersistentCoordinators kannst Du beim Initialisieren ebenfalls einen Namen der Model-Datei mitgeben.

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Wenn Du einen gemeinsamen Zugriff auf deine CoreDaten haben willst, wieso packst du das nicht in ein Package, mit eintsprechenden Schnittstellen? Dann hast Du einmal den Zugriff zentral, mit allen möglichen Anpassungen. Soll seit einpaar Jahren funktionieren, habe ich aber noch nicht selbst ausgetestet.

    Andere Frage, weshalb verwendetst du CoreData, wenn Du die Datenhaltung im Web hast? Greif doch einfach auf dein single point of true zu und fertig ist der Lack. Um das nicht mehrfach zu machen, kannst du das dann auch in ein Package legen :)
  • Gemeinsamen zugriff auf die CoreDaten will ich nicht haben. Es sind 2 getrennte Apps. Nur das xcdatamodel soll das gleiche sein.

    Die Daten selbst werden sind nur für die Erfassung der Personen im Web. Ab einen definierten Zeitpunkt sind die Daten nur noch lokal auf einem Mac.

    Die "bestehende" App wurde vor 12 Jahren begonnen und dort gab es noch keine Web-Applikation und die "neue" soll die bestehende Infrastruktur nutzen. Darum bin ich auf Core Data festgelegt.
    Wenn Du immer nur das tust was du schon kannst - wirst du immer das bleiben, was du heute bist.
  • Ich denke Du kannst einen symbolic link im neuen Projekt auf die xcdatamodel Datei im alten setzen. Dann ist es dieselbe Quellcode-Datei in zwei Projekten (und keine Kopie). D.h. Änderungen im einen Projekt sind sofort im anderen verfügbar. Das Einzige ist dass man die Projekte nicht mehr einfach so umbenennen oder verschieben kann.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von hns ()