Dane podstawowe lokalizacji pliku Sqlite


92

Zazwyczaj plik sklepu sqlite dla podstawowych aplikacji danych znajduje się w

Biblioteka> Obsługa aplikacji> Symulator iPhone'a> 7.1 (lub dowolna wersja, której używasz)> Aplikacje> (Którykolwiek folder zawiera Twoją aplikację)> Dokumenty

folderu, ale nie mogę go znaleźć w IOS 8. Przypuszczam, że po prostu dodaliby folder 8.0 do folderu iPhone Simulator, ale go tam nie ma. Czy ktoś był w stanie to zlokalizować?


2
Jestem prawie pewien, że twoje pytanie jest duplikatem, biorąc pod uwagę, że zadałem je ponad tydzień przed zadaniem twojego. Byłbym wdzięczny, gdybyś pozwolił mi zaliczyć to pytanie, biorąc pod uwagę, że jest to pierwsze pytanie, które kiedykolwiek zadałem, i wygląda na to, że masz już reputację @HenryGlendening
enlyte

Sprawdź, jak sprawdzić dbpath stackoverflow.com/a/27358291/3840428
Nagarjun,


2
Czy ktoś wie, jak pobrać pliki CoreData z rzeczywistego urządzenia? Robiłem to przez iTunes w starszych wersjach Xcode, ale od Xcode 8 / iOS10 nie sądzę, aby pliki CoreData były przechowywane w katalogu dokumentów aplikacji, dlatego nie są widoczne w iTunes. Czy istnieje sposób na pobranie plików CoreDate z urządzenia na komputer?
Bocaxica,

1
Nie wiem, dlaczego nadal to przenoszą. Powinni go gdzieś położyć i po prostu zostawić.
RegularExpression

Odpowiedzi:


134

Udało mi się zlokalizować plik sqlite i jest teraz w tej ścieżce:

Library / Developer / CoreSimulator / Devices / (cyfry i litery) / data / Containers / Data / Application / (cyfry i litery) / Documents /

(cyfry i litery) oznacza folder, który byłby unikalny dla Twojej aplikacji / komputera, ale wyglądałby tak: 779AE2245-F8W2-57A9-8C6D-98643B1CF01A

Udało mi się go znaleźć, przechodząc do appDelegate.m, przewijając w dół do

- (NSURL *)applicationDocumentsDirectory 

metoda i NSLogging ścieżkę powrotu, na przykład:

// Returns the URL to the application's Documents directory.
- (NSURL *)applicationDocumentsDirectory
{
    NSLog(@"%@",[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory  inDomains:NSUserDomainMask] lastObject]);

    return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
 }

To da ci unikalną ścieżkę, ułatwiając ci to, ponieważ zlokalizowanie jej za pomocą 2 nienazwanych folderów / ciągów liter i cyfr jest trudne.

Swift 4.2:

let paths = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true)
print(paths[0])

4
Użyj, xcrun simctl listaby uzyskać listę nazw symulatorów i ich identyfikatorów UUID.
Sandy Chapman

1
Zwróć uwagę, że jeśli używasz udostępnionej bazy danych dla grupy aplikacji (na przykład, gdy używasz rozszerzenia), ścieżka to Library / Developer / CoreSimulator / Devices / $ number / data / Containers / Shared / AppGroup / $ number / Name.sqlite
andreacipriani

7
Zauważ, że w 2019 roku Library/Developer/CoreSimulator/Devices/(numbers and letters)/data/Containers/Data/Application/(numbers and letters)/Documents/nie jest już prawdą. Teraz znajdziesz .sqlite i dwa powiązane plikiLibrary/Developer/CoreSimulator/Devices/(numbers and letters)/data/Containers/Data/Application/(numbers and letters)/Library/Application Support/
Gang Fang

@GangFang Próbuję przekonwertować mój kod Objective C, który jest zbudowany w Xcode 7 do najnowszej wersji Swift i utworzyć nowy projekt, więc jak mogę przenieść te dwa różne pliki .sqlite do jednego miejsca.
Sanjay Shah

89

Żadna z odpowiedzi nie wspomniała o najprostszym sposobie uzyskania lokalizacji pliku DB.

Nie wymaga nawet modyfikowania kodu źródłowego, ponieważ jest to prosty przełącznik czasu wykonywania w XCode.

  1. Wybierz Edytuj schemat ... obok przycisku Uruchom.

    edytuj schemat

  2. Wybierz Uruchom / Argumenty i dodaj następujące dwie opcje:

    -com.apple.CoreData.SQLDebug 1
    -com.apple.CoreData.Logging.stderr 1
    

    opcja

  3. Uruchom aplikację, a zobaczysz w dziennikach:

    dzienniki


2
To jest rzeczywiście najprostsze i najlepsze rozwiązanie. Dzięki!
Omid Ariyan,

U mnie dziennik się nie pojawia, możesz mi pomóc?
Augusto

@ Augusto Nie mogę Ci tutaj pomóc, ale jeśli zadasz nowe pytanie na ten temat, prawdopodobnie ludzie będą mogli na nie odpowiedzieć i pomóc.
hyperknot

Świetna odpowiedź! To powinna być akceptowana odpowiedź. Czy jest jakiś sposób, który znasz, aby zmienić kolor tego wyjścia w konsoli, inny niż za pomocą preferencji Xcode? Byłoby miło, gdyby wyróżniał się nieco bardziej
Coreyd303

Dziękuję za podpowiedź! Ścieżka stale się zmienia, dla mnie teraz (iOS 13.3.1) ścieżka to / Users / *** / Library / Developer / CoreSimulator / Devices / A91CEB1C-B15D-46B5-9B83-DB22056DEFD1 / data / Containers / Shared / AppGroup / B835599A- CA36-432F-871A-17EDA181CC54 / Więc lepiej jest uzyskać to z informacji debugowania CoreData, niż próbować zgadywać.
AlKir

52

Wypróbuj ten prosty 3 krok

  1. Skopiuj następujący kod do didFinishLaunchingWithOptionsswojego appdelegate.mi dodaj punkt przerwania przedNSLog()

    (BOOL)application:(UIApplication *)application  
    
    didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSLog(@"%@",[paths objectAtIndex:0]);
     }
    

Lub w Swift:

let paths = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)
print(paths[0])

wprowadź opis obrazu tutaj

2.Otwórz Finder-> Idź -> Idź do folderu i wklej ścieżkę skopiowaną z kroku 1

wprowadź opis obrazu tutaj

3. Tak !!! Jesteś w miejscu docelowym.


2
Do użytku w wersji Swift3: NSSearchPathForDirectoriesInDomains (.applicationSupportDirectory, .userDomainMask, true)
Yohst

38

Jeśli Twoja aplikacja korzysta z podstawowych danych, wystarczy wyszukać plik sqlite w Terminalu:

find ~ -name app_db_file_name.sqlite

Wyniki będą zawierać pełną ścieżkę do folderów symulatora zawierających Twoją aplikację.


2
@AlexWei Chciałbym, aby firma Apple dodała przycisk w menu Plik do folderu „Pokaż dokumenty symulatora w wyszukiwarce” lub coś podobnego. Wydaje się śmieszne, że wciąż go tam nie ma, biorąc pod uwagę, że ciągle zmieniają miejsce przechowywania plików ...
DiscDev

1
W przypadku innych Zainteresowanych dodałem tego polecenia jako alias do mojego .profile: alias myapp_simulator_db="find ~/Library/Developer/CoreSimulator/Devices -name MyApp.sqlite". Jest to przydatne, gdy trzeba wielokrotnie uruchamiać to polecenie.
toast za

sudo find ~ -name app_db_file_name.sqlite pomogło mi
Qadir Hussain

21

Zhakowałem ten jeden wiersz ( streszczenie ): find ~/Library/Developer/CoreSimulator/Devices/ -name device.plist -exec sh -c "/usr/libexec/PlistBuddy -c \"print UDID\" '{}' | tr '\n' ' '" \; -exec sh -c "/usr/libexec/PlistBuddy -c \"print name\" '{}' | tr '\n' ' '" \; -exec sh -c "/usr/libexec/PlistBuddy -c \"print runtime\" '{}' | sed -n 's/com\.apple\.CoreSimulator.SimRuntime\.\(.*\)/\1/p'" \;

To drukuje:

14F313C8-3813-4E38-903E-2010C136B77B iPad Retina iOS-8-0
1F6B82A2-C467-479A-8CAF-074BE507AC8E iPad Air iOS-8-0
2DA83944-BE5D-4342-B330-08F67A932D8C iPad 2 iOS-7-1
48703432-A5C5-4606-9369-0D21B53EB1E8 iPhone 4s iOS-7-1
4AFB71CC-6752-4F9A-A239-4DC9CA53A8B8 iPhone 5s iOS-8-0
53A65771-DF50-4A5C-A8D2-4D1C3A5D0F60 iPhone 5 iOS-7-1
6B97C174-5914-4E89-8D17-943F0E2703BA iPhone 5 iOS-8-0
6C2DF3E9-FA26-4391-8B66-72E1467D6297 iPad 2 iOS-8-0
7F85E299-A3C2-4704-8B44-2984F6F995F5 iPad Retina iOS-7-1
8B9EDFFD-2240-476B-88AD-06ABE8F9FF51 iPhone 6 Plus iOS-8-0
97691E5D-5C38-4875-8AA7-C2B1E4ABCBB5 Resizable iPhone iOS-8-0
9BBF3408-6CA4-4CE0-BD4E-B02001F1262B iPhone 5s iOS-7-1
C9237847-F0AA-44BC-A74E-C08C2E0F7A6C Resizable iPad iOS-8-0
CC44C1BA-F39C-4410-AE34-4ABBD7806D45 iPad Air iOS-7-1
CDF4D811-5011-4464-8291-5CDA378375EA iPhone 6 iOS-8-0
E77DE00C-E244-4F25-A5E2-E6581614D5A2 iPhone 4s iOS-8-0

Aktualizacja:

Jak ktoś tu zaznaczył , można też biec, xcrun simctl list devicesaby uzyskać podobny wynik:

== Devices ==
-- iOS 7.0 --
-- iOS 7.1 --
    iPhone 4s (48703432-A5C5-4606-9369-0D21B53EB1E8) (Shutdown)
    iPhone 5 (53A65771-DF50-4A5C-A8D2-4D1C3A5D0F60) (Shutdown)
    iPhone 5s (9BBF3408-6CA4-4CE0-BD4E-B02001F1262B) (Shutdown)
    iPad 2 (2DA83944-BE5D-4342-B330-08F67A932D8C) (Shutdown)
    iPad Retina (7F85E299-A3C2-4704-8B44-2984F6F995F5) (Shutdown)
    iPad Air (CC44C1BA-F39C-4410-AE34-4ABBD7806D45) (Shutdown)
-- iOS 8.1 --
    iPhone 4s (0763EF65-DD0D-4FAD-84C7-2DE63D416526) (Shutdown)
    iPhone 5 (868ED444-8440-4115-AF37-F419CC682D2F) (Shutdown)
    iPhone 5s (E0455E5D-7315-4EC8-B05E-76284728244C) (Shutdown)
    iPhone 6 Plus (72554908-FF99-4B8F-9B87-65255ED08CFC) (Shutdown)
    iPhone 6 (32AA8133-53A4-4BE0-8CE5-0C7A87E81CAF) (Shutdown)
    iPad 2 (4AF84DE8-CBA2-47AE-A92A-0C0CEF9F41F8) (Booted)
    iPad Retina (69238B44-AAFD-4CD5-AAEA-C182D0BC300D) (Shutdown)
    iPad Air (E580AD99-0040-4EC1-B704-0C85567E6747) (Shutdown)
    Resizable iPhone (32E872FC-6513-41AB-A5B9-B23EB7D10DC8) (Shutdown)
    Resizable iPad (99997922-4A9F-4574-9E3E-EF45F893F4A2) (Shutdown)

18

Jeśli używasz Swift , zwróci to bezwzględną ścieżkę katalogu dokumentu:

func applicationDirectoryPath() -> String {
    return NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).last! as String
}

1
Powinien nazywać się „func documentDirectoryPath ()”, do czego
zmierzasz

13

Napisałem skrypt bash do znajdowania lokalizacji folderu aplikacji i folderu danych aplikacji w symulatorze, możesz go pobrać tutaj . Po rozpakowaniu skryptu możesz przejść do folderu, w którym znajduje się skrypt, i użyć go. Jeśli zadzwonisz bez opcji, wyświetli się lista zainstalowanych symulatorów iOS. Następnie możesz użyć opcji, aby znaleźć swój program. Pisanie:

./simulatorAppFolders -s "iPad Air" -i iOS-8-0 -a <MyApp>

znajdzie folder aplikacji i folder obszaru domowego dla Twojej aplikacji na symulatorze iPada Air iOS 8. Oto przykład:

MacBook-Air:_posts user$ ./simulatorAppFolders -s "iPad Air" -i iOS-8-0 -a MyApp
App folder = /Users/james/Library/Developer/CoreSimulator/Devices/6A9DEE93-FAEF-4BF4-9989-BC14CD38AEA0/data/Containers/Bundle/Application/8F64CD7F-A227-43D6-98AC-41D3919827CB
dataFolder = /Users/james/Library/Developer/CoreSimulator/Devices/6A9DEE93-FAEF-4BF4-9989-BC14CD38AEA0/data/Containers/Data/Application/96C40A21-5A5C-4399-839C-B155B8A72932

Aktualizacja

Dostępna jest aktualizacja oryginalnego skryptu, która umożliwia wyszukiwanie na podstawie typu urządzenia przy użyciu opcji -d. Napisałem również inny skrypt, który tworzy serię rozsądnie nazwanych folderów, dzięki czemu można znaleźć swoją aplikację i dokumenty aplikacji. Ten skrypt utworzy folder o nazwie iOS_SIMULATORS w Twoim obszarze domowym, z którego możesz łatwo przejść do aplikacji.


Idealnie, zredagowałem twój skrypt, aby utworzyć inny, który ponownie dostosowuje wszystkie dane symulatora określonej aplikacji. Wielkie dzięki, James!
Martin

Dzięki! Świetne rozwiązanie na zwykłe PITA.
David Hersey,

6

Udało mi się zlokalizować folder symulatorów z następnym wyjściem konsoli:

NSLog(@"app dir: %@",[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]);

w moim przypadku było to (Xcode 6 beta)

app dir: file:///Users/user/Library/Developer/CoreSimulator/Devices/D00C56D4-DDA3-47B0-9951-27D3B9EC68E8/data/Applications/6ABF3E54-37F5-4AD1-A223-F7467F601FB6/Documents/

6

Na podstawie odpowiedzi Michaelsa dotyczy to Swift 3

    func applicationDirectoryPath() -> String {
        return NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).last! as String
    }

Jedyne rozwiązanie tutaj!
Fattie

5

Dla Swift 3.0

let paths = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true)
print(paths[0])

możesz uzyskać lokalizację Coredata w Xcode 8.2


5

Po nowych aktualizacjach Xcode odkryłem, że pliki sql są teraz przechowywane w nowym folderze, /Library/Application Supportmoże to być wyjątkowa sytuacja, ale jeśli nie znalazłeś plików sql w folderze dokumentów, wyszukaj je tutaj:

~/Library/Developer/CoreSimulator/Devices/[@device_id@]/data/Containers/Data/Application/[@application_id@]/Library/Application Support/

przed zapisaniem w Documentsfolderze:

~/Library/Developer/CoreSimulator/Devices/[@device_id@]/data/Containers/Data/Application/[@application_id@]/Documents/


4

W przypadku SWIFT 3:

Skopiuj, wklej ten kod w didFinishLaunchingWithOptions

 print(NSSearchPathForDirectoriesInDomains(.applicationSupportDirectory, .userDomainMask, true).last! as String)

To mi pomogło. ale kiedy próbuję przejść do tej ścieżki przez terminal, mówi: Nie ma takiego pliku lub katalogu, ale kiedy próbuję przejść do opcji folderu, faktycznie istnieje.
Qadir Hussain

To działało dla mnie na OSX. Musiałem przejść do jeszcze jednego katalogu w katalogu „Application Support” o nazwie <my app name>, aby poprawić plik .sqlite.
Jacksonsox

3

Dla szybkiego 3

print(NSSearchPathForDirectoriesInDomains(.applicationSupportDirectory, .userDomainMask, true).last! as String)

2

Jak James Snook stworzyłem własny skrypt, aby zapewnić łatwiejszy dostęp do aplikacji symulatora. Myślę, że może to być przydatne dla wielu ludzi, którzy się tu dostają, poza mną.

W przeciwieństwie do jego skryptu, mój nie jest narzędziem wyszukiwania, tworzy kompletną (i czytelną dla człowieka) strukturę folderów ze wszystkimi urządzeniami / środowiskami wykonawczymi i umieszcza miękkie linki do znajdujących się w nich aplikacji.

Możesz to zdobyć w tym streszczeniu .

Uruchom go za każdym razem, gdy instalujesz aplikację w symulatorze lub po prostu uruchamiaj go za każdym razem, gdy chcesz pobrać aplikację z dowolnego powodu (zaktualizuje się i otworzy folder urządzeń w Finderze).


Możesz dostosować ten skrypt, aby zautomatyzować niektóre rzeczy. Ale muszę powiedzieć, że ta aplikacja GUI , którą właśnie znalazłem, brzmi jako naprawdę użyteczna alternatywa, jeśli chcesz tylko uzyskać dostęp do folderów aplikacji :)
fbeeper

Jest to również całkiem fajne, ale wolę drugi skrypt opublikowany przez Jamesa Snooka, ponieważ tworzy on również miękkie linki do katalogów danych.
David Hersey,

2

Jeśli nie określiłeś żadnego katalogu, możesz użyć poniższego kodu, aby wydrukować domyślny katalog:

print (NSPersistentContainer.defaultDirectoryURL ())


1

Dla iOS 10.0+można użyć persistentContainer.persistentStoreCoordinator.persistentStores.first?.url

Stworzyłem funkcję Utility, która kopiuje plik sqlite do wybranej lokalizacji (działa tylko dla symulatora).

Możesz go używać jak

import CoreData


let appDelegate = UIApplication.shared.delegate as! AppDelegate
UTility.getSqliteTo(destinationPath: "/Users/inderkumarrathore/Desktop", persistentContainer: appDelegate.persistentContainer)

Jeśli masz już dostęp do plików sqlite, shm i wal, uruchom polecenia w terminalu, aby scalić plik WAL z plikiem sqlite.

$ sqlite3 persistentStore
sqlite> PRAGMA wal_checkpoint;
Press control + d

Po uruchomieniu powyższych poleceń możesz zobaczyć dane w swoim pliku sqlite.


Oto definicja metody użyteczności dla

/**
 Copies the sqlite, wal and shm file to the destination folder. Don't forget to merge the wal file using the commands printed int the console.
 @param destinationPath Path where sqlite files has to be copied
 @param persistentContainer NSPersistentContainer
*/
public static func getSqliteTo(destinationPath: String, persistentContainer: NSPersistentContainer) {
  let storeUrl = persistentContainer.persistentStoreCoordinator.persistentStores.first?.url

  let sqliteFileName = storeUrl!.lastPathComponent
  let walFileName = sqliteFileName + "-wal"
  let shmFileName = sqliteFileName + "-shm"
  //Add all file names in array
  let fileArray = [sqliteFileName, walFileName, shmFileName]

  let storeDir = storeUrl!.deletingLastPathComponent()

  // Destination dir url, make sure file don't exists in that folder
  let destDir = URL(fileURLWithPath: destinationPath, isDirectory: true)

  do {
    for fileName in fileArray {
      let sourceUrl = storeDir.appendingPathComponent(fileName, isDirectory: false)
      let destUrl = destDir.appendingPathComponent(fileName, isDirectory: false)
      try FileManager.default.copyItem(at: sourceUrl, to: destUrl)
      print("File: \(fileName) copied to path: \(destUrl.path)")
    }
  }
  catch {
    print("\(error)")
  }
  print("\n\n\n ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ NOTE ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~\n")
  print("In your terminal run the following commands to merge wal file. Otherwise you may see partial or no data in \(sqliteFileName) file")
  print("\n-------------------------------------------------")
  print("$ cd \(destDir.path)")
  print("$ sqlite3 \(sqliteFileName)")
  print("sqlite> PRAGMA wal_checkpoint;")
  print("-------------------------------------------------\n")
  print("Press control + d")      
}

Dla

/**
 Copies the sqlite, wal and shm file to the destination folder. Don't forget to merge the wal file using the commands printed int the console.
 @param destinationPath Path where sqlite files has to be copied
 @param persistentContainer NSPersistentContainer
 */
+ (void)copySqliteFileToDestination:(NSString *)destinationPath persistentContainer:(NSPersistentContainer *)persistentContainer {
  NSError *error = nil;
  NSURL *storeUrl = persistentContainer.persistentStoreCoordinator.persistentStores.firstObject.URL;
  NSString * sqliteFileName = [storeUrl lastPathComponent];
  NSString *walFileName = [sqliteFileName stringByAppendingString:@"-wal"];
  NSString *shmFileName = [sqliteFileName stringByAppendingString:@"-shm"];
  //Add all file names in array
  NSArray *fileArray = @[sqliteFileName, walFileName, shmFileName];

  // Store Directory
  NSURL *storeDir = storeUrl.URLByDeletingLastPathComponent;

  // Destination dir url, make sure file don't exists in that folder
  NSURL *destDir = [NSURL fileURLWithPath:destinationPath isDirectory:YES];

  for (NSString *fileName in fileArray) {
    NSURL *sourceUrl = [storeDir URLByAppendingPathComponent:fileName isDirectory:NO];
    NSURL *destUrl = [destDir URLByAppendingPathComponent:fileName isDirectory:NO];
    [[NSFileManager defaultManager] copyItemAtURL:sourceUrl toURL:destUrl error:&error];
    if (!error) {
      RLog(@"File: %@ copied to path: %@", fileName, [destUrl path]);
    }
  }


  NSLog(@"\n\n\n ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ NOTE ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~\n");
  NSLog(@"In your terminal run the following commands to merge wal file. Otherwise you may see partial or no data in %@ file", sqliteFileName);
  NSLog(@"\n-------------------------------------------------");
  NSLog(@"$ cd %@", destDir.path);
  NSLog(@"$ sqlite3 %@", sqliteFileName);
  NSLog(@"sqlite> PRAGMA wal_checkpoint;");
  NSLog(@"-------------------------------------------------\n");
  NSLog(@"Press control + d");
}

1

Swift 4.2

Stworzyłem rozszerzenie dla NSPersistentStoreDescription

import CoreData

extension NSPersistentStoreDescription {
    func getDatabaseLocation() -> String? {
        return self
            .url?
            .absoluteString
            .replacingOccurrences(of: "file://", with: "") // Remove file suffix
            .replacingOccurrences(of: "%20", with: "\\ ") // Make the spaces to support terminal paste
    }
}

Następnie używam go podczas inicjalizacji NSPersistentContainer

lazy var persistentContainer: NSPersistentContainer = {

        let container = NSPersistentContainer(name: "CoreDataDemo")
        
        container.loadPersistentStores(completionHandler: { (storeDescription, error) in
            
            #if DEBUG
            debugPrint(storeDescription.getDatabaseLocation() ?? "No database location")
            #endif
            
            if let error = error as NSError? {
                assertionFailure("Unresolved error \(error), \(error.userInfo)")
            }
        })
        
        return container
    }()

0

Swift 3.x

Znajdź funkcję didFinishLaunchingWithOptions w pliku AppDelegate i wklej tam ten kod.

let path = NSSearchPathForDirectoriesInDomains(.applicationSupportDirectory, .userDomainMask, true)
print("\(path)")

0

Swift 4.x

    let paths = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true)
    print(paths[0])

0

Swift 4.2

let paths = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true)
        print(paths[0])

-1

Możesz użyć następującego kodu.

   func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.
    **print(persistentContainer.persistentStoreDescriptions)**
    return true
}

Wyświetli lokalizację podstawowego trwałego magazynu danych, tj. Sqlite

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.