Xcode 16 Swift CoreData DB Speicherort

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

  • Xcode 16 Swift CoreData DB Speicherort

    Hallo,

    ich suche verzweifelt nach der Core Data DB meiner App. Vorweg die App läuft einwandfrei.

    Den Speicherpfad habe ich mit nachfolgendem Code ermittelt:

    Quellcode

    1. let path = NSSearchPathForDirectoriesInDomains(.applicationSupportDirectory, .userDomainMask, true)
    2. print("\(path)")
    Dort fand ich die DB und konnte diese auch mit dem DB Browser for SQLite öffnen.

    Vielleicht bin ich ja auch zu müde, aber die DB ist dort nicht mehr zu finden und wenn ich im Terminal nach dem Namen suchen lasse, dann ist das Ergebnis auch nicht wirkich besser, denn die DB wird bzw. dessen Pfad nicht mehr ausgegeben.

    Vielleicht kann mir jemand mitteilen was ich gerade übersehen bzw. außer Acht lasse?

    Danke mal vorab.
  • OSXDev schrieb:

    Vielleicht bin ich ja auch zu müde, aber die DB ist dort nicht mehr zu finden und wenn ich im Terminal nach dem Namen suchen lasse, dann ist das Ergebnis auch nicht wirkich besser, denn die DB wird bzw. dessen Pfad nicht mehr ausgegeben.
    Ich trau' mich kaum, das Offensichtliche zu fragen, aber:
    • Nutzt Dein PersistentStoreCoordinator auch den ermittelten Pfad? Wenn ja, erübrigt sich wohl der nächste Punkt ... sonst würde die App nicht laufen.
    • Hast Du das Application-Support-Verzeichnis denn angelegt? Automatisch existieren unter Library im App-Container nur Preferences, Caches, Saved Application State und SplashBoard?
    Vielleicht hilft's, Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • MyMattes schrieb:


    • Nutzt Dein PersistentStoreCoordinator auch den ermittelten Pfad? Wenn ja, erübrigt sich wohl der nächste Punkt ... sonst würde die App nicht laufen.
    • Hast Du das Application-Support-Verzeichnis denn angelegt? Automatisch existieren unter Library im App-Container nur Preferences, Caches, Saved Application State und SplashBoard?


    Zur ersten Frage:
    Offensichtlich nicht, denn sonst würde ich den PersistentStoreCoordinator dort vorfinden oder missverstehe ich Deine Frage? Die App läuft, wie bereits mitgeteilt, einwandfrei.

    Zur zweiten Frage:
    Habe dies mal anhand einer TestApp geprüft und es existieren in der Tat nur die von Dir genannten Verzeichnisse. Das Einstellen des Application-Support-Verzeichnis - dachte ich zumindest; gilt nur für die iPhone und iPad Programmierung bzw. wenn keine Sandbox genutzt wird - man lernt nie aus? ^^ Ich musste dieses Verzeichnis für Apps für den Mac bisher nicht angeben. ?( Oder ich hatte das Glück, dass es bisher immer ohne diese Angabe einwandfrei funktioniert hat. :rolleyes: Wobei dies bestimmt nicht zutrifft. :D Ist es nicht fehlerbehaftet wenn ich diese Verzeichnis "hard" codiere, vorgebe? Beim nächsten Update von XCode könnte dies doch zu Problemen führen oder bin ich da auf dem Holzweg?

    Kannst Du mir mitteilen, wo ich den Pfad für das Application-Support-Verzeichnis eintragen kann - innerhalb der Xcode Einstellungen oder innerhalb der App?

    Danke mal vorab Mattes.

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

  • OSXDev schrieb:

    Habe dies mal anhand einer TestApp geprüft und es existieren in der Tat nur die von Dir genannten Verzeichnisse.
    Jetzt bin ich baff: Ich war oben von iOS ausgegangen - hatten wir beide doch keine Plattform erwähnt - und dort gibt es bei mir standardmäßig nur die genannten Ordner im Library-Verzeichnis der App.

    Anders sieht es bei macOS aus, dort existiert u. a. ein Application Support automatisch nach Anlegen eines neuen Test-Projektes unter Xcode 16.2. Insofern wundert mich Deine Aussage, bei Dir wäre es anders.

    OSXDev schrieb:

    Offensichtlich nicht, denn sonst würde ich den PersistentStoreCoordinator dort vorfinden oder missverstehe ich Deine Frage? Die App läuft, wie bereits mitgeteilt, einwandfrei.
    Also in meinen Apps (die Core Data allerdings nur unter iOS verwenden), gebe ich dem PersistentStoreCoordinator eine URL mit, wo er das Model speichern soll. In Objective-C etwas wie:

    Quellcode

    1. // Create the coordinator and store
    2. _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
    3. NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:kSRCoreDataStoreURL];
    4. NSDictionary *options = @{NSMigratePersistentStoresAutomaticallyOption: @YES, NSInferMappingModelAutomaticallyOption: @YES};
    5. NSError *error = nil;
    6. NSString *failureReason = @"There was an error creating or loading the application's saved data.";
    7. if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error])
    8. {
    9. // Report any error we got.
    10. }
    Dann unterliegt es doch Deiner Kontrolle, wo Du den Store speicherst...

    Verwirrt, Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • MyMattes schrieb:

    Jetzt bin ich baff: Ich war oben von iOS ausgegangen - hatten wir beide doch keine Plattform erwähnt - und dort gibt es bei mir standardmäßig nur die genannten Ordner im Library-Verzeichnis der App.
    Hmmm, Du liegst richtig. Da sind wir wohl klassich aneinander vorbei gerauscht. Nicht wirklich tragisch - hat sich ja geklärt. :thumbup:

    MyMattes schrieb:


    Anders sieht es bei macOS aus, dort existiert u. a. ein Application Support automatisch nach Anlegen eines neuen Test-Projektes unter Xcode 16.2. Insofern wundert mich Deine Aussage, bei Dir wäre es anders.
    Dann unterliegt es doch Deiner Kontrolle, wo Du den Store speicherst...
    Deiner Ausführung stimme ich zu, sofern es um Xcode 15.4 handelt. Bei 16.2 finde ich in der Tat Application Support innerhalb von Library vor, jedoch keine Core Data DB. Auch habe ich mittels ROOT im Terminal mal alle AppName.sqlite Dateien suchen lassen. Leider ebenfalls ohne Erfolg.

    Aus diesem Grund wurde das ganze Projekt zurück auf einen Mac mit INTEL CPU und Xcode 15.4 übertragen und da stimmt die ermittelte Pfadausgabe (s. ersten Post). :thumbup:

    Ich bin mir nun nicht sicher woran es liegt. Da der Mac neu aufgesetzt wurde und somit auch Xcode 16.2 neu installiert wurde ist es unwahrscheinlich, dass es an OSX bzw. Xcode liegen könnte.

    Danke mal für Dein Beispiel Sourcecode. Ich habe dies in meiner App mal realisiert und bin verblüfft. Denn nun stimmen Pfadausgabe und Speicherort in der Tat überein. Da es sich hierbei jedoch um eine App handelt die in der produktiven Umgebung ihren Einsatz findet, bin ich mir überhaupt nicht sicher ob ich diese Lösung so ausrollen sollte.

    Da die App ja einwandfrei funktioniert, muss es doch wohl eine Lösung geben um herauszubekommen wo diese unsichtbare Core Database sich auf dem Mac befindet? ?(
  • OSXDev schrieb:

    Da die App ja einwandfrei funktioniert, muss es doch wohl eine Lösung geben um herauszubekommen wo diese unsichtbare Core Database sich auf dem Mac befindet?
    Jetzt bin ich auch gespannt :D

    Xcode wird für mich zunehmen mystisch: Für meinen Geschmack passiert zu viel hinter den Kulissen, was man aber immer im Hinterkopf behalten muss: Vorrangig soll es wohl den Zugang für Programmieranfänger vereinfachen, aber sobald man Details braucht, wird es schnell undurchübersichtig. Transparenz geht anders...
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • @MyMattes: Gespannt war ich auch. :S

    Nachdem ich innerhalb von Terminal mit der Suche kein Glück hatte, habe ich mich entschlossen Xcode vollständig zu löschen. Bevor ich nun Xcode erneut installiert habe, hatte ich mich daran erinnert, dass es schon einmal Probleme bei einem anderen Device mit den Filerechten gab; ergo das Reparieren aller Filerechte auf der Platte angestossen.

    Danach Xcode neu installiert und ein Testprojekt angelegt. In diesem den Pfad zur DB (s. ersten Post Sourcecode) ausgegeben und es war von Erfolg gekrönt. :thumbsup:


    Ein Hinweis noch, falls die Suche im Terminal mit dem Befehl:

    find / -name '.sqlite' 2>&1 | grep -v "Permission denied" (.sqlite -> evtl. durch den vollständigen Namen ergänzen)

    nicht zu einem Hinweis führt, dass für die weitere Suche erweiterte Rechte benötigt werden, dann stimmen vermutlich die Filerechte nicht mehr. Evtl. reicht es aus für diesen Fall nur die Filerechte reparieren zu lassen ohne Xcode vollständig zu entfernen und neu zu installieren.