Comment download le file de stockage sqlite de l'extension iMessage sur MacBook

Nous développons une extension iMessage. Il utilise datatables de base avec succès. Nous devons évaluer le file store.sqlite, mais nous ne le trouvons pas.

Nous essayons de le find comme ceci:

  • Dans Xcode: Fenêtre -> Périphériques
  • Dans les Installed Apps , select notre extension
  • Download Container ...

Mais le conteneur est vide:


Mettre à jour:

Grâce à la réponse de @ Mundi, nous avons découvert comment get l'URL des templates:

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

Maintenant, nous essayons de copyr le model dans le dossier Documents , pour pouvoir le download plus tard sur notre MacBook via Xcode (voir ci-dessus).

Malheureusement, le path vers `Documents:

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

est à nouveau dans /var/mobile/Containers/ :

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

Comment pouvons-nous download le file Model.sqlite à partir d'un conteneur partagé vers notre MacBook?

Votre meilleur pari avec ceci est d'écrire un exportateur en utilisant l'action de partage de courrier. Dans l'une de mes applications, j'autorise l'user à exporter toutes datatables en envoyant une copy du file sqlite par courrier électronique.

 func exportAllDataSqlite() { let documentsUrl = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first! var newFilePath: URL! var mutablePathComponents = [Ssortingng]() 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 dateSsortingng = "\(dateComponents.day)-\(dateComponents.month)-\(dateComponents.year)" mutablePathComponents[mutablePathComponents.count-1] = "Events App \(dateSsortingng).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 copyd so can't be shared") } } 

C'est une de mes premières Swift donc pas génial mais ça marche. Je l'ai utilisé l'autre jour dans une copy déployée de mon application pour déboguer un problème, il suffit d'envoyer un courriel à vous-même et ouvrir avec une visionneuse Sqlite sur votre mac.

Le file sqlite réel est susceptible d'être dans un conteneur partagé.

Ce qui fonctionne pour moi est d'save l'URL du magasin et de l'utiliser pour le localiser:

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

Donne quelque chose comme

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