2017-02-09 9 views
3

Есть ли способ получить данные, сохраненные в песочнице приложения iOS, внутри его экземпляра Notification-Service-Extension? Я хочу захватить некоторые данные из базы данных, прежде чем передать передатчик.iOS: Как получить сохраненные данные приложения изнутри UNNotificationServiceExtension?

Я проверил внутри моего

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 /».

ОБНОВЛЕНИЕ: Похоже, что доступ к контейнеру для песочных приложений невозможен.

ответ

3

Из руководства по программированию расширения приложений, расширение приложения может быть Sharing Data with Your Containing App с использованием групп приложений.

Read:

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 приложений и расширений.
  • Wormhole: Более элегантный способ передачи сообщений между приложениями iOS и расширениями.
+0

это интересно спасибо. но когда я хочу получить доступ к моей базе данных приложений, мне нужно будет скопировать ее в общий контейнер - не то решение, которое я бы предпочел. но очень интересно. – headkit

+0

поэтому, когда вы редактируете свой ответ и добавляете «невозможно», я могу просто отметить его как принятый. – headkit