Как загрузить файл хранилища sqlite расширения iMessage в MacBook

Мы разрабатываем расширение iMessage. Он успешно использует Core Data. Нам нужно оценить файл store.sqlite, но он не может его найти.

Мы пытаемся найти это так:

  • В Xcode: Окно -> Устройства
  • В Installed Apps выберите наш внутренний номер
  • Download Container ...

Но контейнер пуст:


Обновить:

Благодаря ответу @ Mundi мы выяснили, как получить URL-адрес модели:

file:///var/mobile/Containers/Data/PluginKitPlugin/9C15B67C-8917-4A24-9FB0-BD119C43B3C4/Library/Application%20Support/Model.sqlite

Теперь мы пытаемся скопировать папку «Модель» в папку « Documents », чтобы загрузить ее позже на наш MacBook через Xcode (см. Выше).

К сожалению, путь к `Documents:

 NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] 

снова находится в /var/mobile/Containers/ :

 file:///var/mobile/Containers/Data/PluginKitPlugin/D0BBD375-A8B7-43DD-8486-1909965CAEB0/Documents 

Как загрузить файл Model.sqlite из общего контейнера в наш MacBook?

Лучше всего это написать экспортера, используя действие share share. В одном из моих приложений я разрешаю пользователю экспортировать все данные, отправив по электронной почте копию файла sqlite.

 func exportAllDataSqlite() { let documentsUrl = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first! var newFilePath: URL! var mutablePathComponents = [String]() var sqliteFileCopied = false do { let directoryContents = try FileManager.default.contentsOfDirectory(at: documentsUrl, includingPropertiesForKeys: nil, options: FileManager.DirectoryEnumerationOptions()) for f in directoryContents { let pathComponents = f.pathComponents if pathComponents.last == "XXXXWhatever your file is called when created by the persisten store.sqliteXXXXX" { //create a copy of the file with a dated file name mutablePathComponents = pathComponents let dateComponents = (Calendar.current as NSCalendar).components([.day, .month, .year], from: Date()) let dateString = "\(dateComponents.day)-\(dateComponents.month)-\(dateComponents.year)" mutablePathComponents[mutablePathComponents.count-1] = "Events App \(dateString).sqlite" newFilePath = NSURL.fileURL(withPathComponents: mutablePathComponents) do { try FileManager.default.copyItem(at: f, to: newFilePath!) sqliteFileCopied = true print("Copied sqlite file") } catch let error as NSError { print(error.localizedDescription) } } } } catch let error as NSError { print(error.localizedDescription) } if sqliteFileCopied == true { //sharing let activityItem:URL = newFilePath! let objectsToShare = [activityItem] let activityVC = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil) activityVC.completionWithItemsHandler = { activity, success, items, error in do { try FileManager.default.removeItem(at: newFilePath!) print("Deleted file: \(newFilePath!)") } catch let error as NSError { print(error.localizedDescription) } } let excludeActivities = [UIActivityType.airDrop, UIActivityType.print, UIActivityType.assignToContact, UIActivityType.saveToCameraRoll, UIActivityType.addToReadingList, UIActivityType.postToFlickr, UIActivityType.postToVimeo] activityVC.excludedActivityTypes = excludeActivities self.present(activityVC, animated: true, completion: nil) } else { print("file not copied so can't be shared") } } 

Это один из моих ранних Свифт, поэтому он не велик, но он работает. Я использовал его на днях в развернутой копии моего приложения для отладки проблемы, просто отправлю электронное письмо себе и открыть с помощью Sqlite viewer на вашем Mac.

Фактический файл sqlite, вероятно, будет находиться в общем контейнере.

Что для меня работает – это зарегистрировать URL-адрес магазина и использовать его для его поиска:

 print(container.persistentStoreCoordinator.persistentStores.first!.url!) 

Получает что-то вроде

file:///Users/developer/Library/Developer/CoreSimulator/Devices/2EAE0CD4-7899-45A3-8E83-E7D79DEEA08F/data/Containers/Data/Application/37F48A5E-7DAB-4E30-A752-F5B62826A15A/Library/Application%20Support/Events.sqlite

  • Тип «Любой» Не имеет подстрочных членов в xcode 8 Swift 3
  • iOS Swift Email Deep Linking
  • Swift3: UITableViewCell и UIButton - Показать и скрыть UITableViewCell, щелкнув UIButton
  • Как передать значение из DetailView в TableViewList
  • Swift не поддерживает SDK «iPhoneSimulator9.3.sdk»?
  • Xcode 8, не может сочетаться с симулятором часов
  • не отображает сборку в магазине Apple, используя xcode 8
  • iOS 10, NSUserDefaults не работает
  • Необходимая подпись кода отсутствует для библиотеки
  • Непризнанный селектор, отправленный в экземпляр Swift 3
  • Странные ошибки при проверке архива
  • Давайте будем гением компьютера.