Cómo download el file de tienda sqlite de la extensión iMessage a MacBook

Estamos desarrollando una extensión de iMessage. Utiliza Core Data con éxito. Necesitamos evaluar el file store.sqlite, pero no podemos encontrarlo.

Intentamos encontrarlo así:

  • En Xcode: Ventana -> Dispositivos
  • En Installed Apps , selecciona nuestra extensión
  • Download Container ...

Pero el contenedor está vacío:


Actualizar:

Gracias a la respuesta de @Mundi , descubrimos cómo get la URL de los models:

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

Ahora estamos intentando copyr el model en la carpeta Documents , para poder downloadlo luego a nuestro MacBook a través de Xcode (ver arriba).

Desafortunadamente, la ruta a `Documentos:

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

está nuevamente en /var/mobile/Containers/ :

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

¿Cómo podemos download el file Model.sqlite de un contenedor compartido a nuestra MacBook?

Su mejor opción con esto es escribir un exportador utilizando la acción de compartir correo. En una de mis aplicaciones, le permito al usuario exportar todos los datos enviando por correo electrónico una copy del file 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 shanetworking") } } 

Es uno de mis primeros Swift así que no es genial, pero funciona. Lo usé el otro día en una copy desplegada de mi aplicación para depurar un problema, simplemente envíate un correo electrónico a ti mismo y abre con un visor de Sqlite en tu Mac.

Es probable que el file sqlite real esté en un contenedor compartido.

Lo que me funciona es registrar la URL de la tienda y usarla para localizarla:

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

Rinde algo como

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