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.
Другие вопросы по тегам