iOS: Как получить доступ к сохраненным данным приложения изнутри его UNNotificationServiceExtension?
Есть ли способ получить данные, сохраненные в "песочнице" приложения для iOS, из его экземпляра Notification-Service-Extension? Я хочу получить некоторые данные из базы данных, прежде чем передать contenhandler.
Я проверил изнутри моего
override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
...
print("NotificationService didReceive UNNotificationRequest, contentHandler: \(contentHandler)")
let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
let filePath = "\(documentsPath)/Database.db"
print(" documentsPath: \(filePath)")
let fileManager = FileManager.default
var isDir : ObjCBool = false
if fileManager.fileExists(atPath: filePath, isDirectory:&isDir) {
if isDir.boolValue {
print(" file exists and is a directory")
} else {
print(" file exists and is a NOT a directory")
}
} else {
print("file does not exist")
}...
и для меня это выглядит так, будто у расширения есть своя песочница с собственной папкой документов.
Приложение использует папку "Приложение", в то время как расширение использует папку "PluginKitPlugin", как внутри "/var/mobile/Containers/Data/".
ОБНОВЛЕНИЕ: Кажется, что это не возможно достигнуть контейнера песочницы приложений.
1 ответ
Решение
Из Руководства по программированию расширения приложения, расширение приложения может обмениваться данными с вашим приложением, используя группы приложений.
Читать:
if let defaults = UserDefaults(suiteName: "my.app.group") {
if let value = defaults.value(forKey: "key") {
NSLog("\(value)")
}
}
Написать:
if let defaults = UserDefaults(suiteName: "my.app.group") {
defaults.set("value", forKey: "key")
}
Также
- MMWormhole: передача сообщений между приложениями и расширениями iOS.
- Червоточина: более элегантный способ передачи сообщений между приложениями и расширениями iOS.