Скопируйте базу данных Sqlite за CoreData - PullRequest
1 голос
/ 13 января 2020

Я хочу получить доступ к базе данных Sqlite, поддерживающей CoreData, сделать ее копию и отправить ее конечной точке для удаленного устранения неполадок. Возможно ли это?

Мое решение ...

let fileManager = FileManager.default

let libraryURL = NSPersistentContainer.defaultDirectoryURL()

guard let documentsURL = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first else {
    // handle error...
    return
}

// creating a folder in documents for ease of zipping and later removal
let dbURL = documentsURL.appendingPathComponent("db")
do {
    try fileManager.createDirectory(at: dbURL, withIntermediateDirectories: true, attributes: nil)
} catch {
    // handle error...
    return
}

do {
    let fileURLs = try fileManager.contentsOfDirectory(at: libraryURL, includingPropertiesForKeys: nil, options: [])
    for fileURL in fileURLs.filter({ $0.absoluteString.contains("<NAME_OF_CORE_DATA_STORE>") }) {
        let fileName = fileURL.lastPathComponent
        do {
            try fileManager.copyItem(at: fileURL, to: URL(string: "\(documentsURL.absoluteString)db/\(fileName)")!)
        } catch  {
            // handle error...
        }
    }
} catch {
    // handle error...
}

// finally, do something with the file (I zip and send to an endpoint)

1 Ответ

0 голосов
/ 13 января 2020

Да, возможно. Только не пытайтесь рассматривать его как доступный для записи вне основной экосистемы данных. Читается, не стоит беспокоиться.

Скопируйте все части, из которых оно написано. Режим SQLite по умолчанию заносится в журнал, поэтому вы получите файл wal, записанный как аналог.

Вы можете запросить NSPersistentStore.url для местоположения записи вашей базы данных

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...