Выполните действие в хост-приложении из расширения Today (виджет), не открывая приложение ios

Я хочу управлять некоторыми действиями, содержащими приложение от сегодняшнего расширения (Widget).

Полное описание: в моем приложении некоторые действия (например, воспроизведение / пауза аудио) выполняются. И хочу управлять этим действием также с сегодняшнего расширения (виджета). Действие продолжает выполняться и в фоновом режиме.

В продлении сегодня, то же самое действие будет выполнять. поэтому для этого, если в основном содержащем приложении уже запущено действие и отправлено его в фоновое состояние, пользователь может приостановить действие из виджета. и пользователь также может запустить / приостановить действие в любое время из виджета (расширение сегодня).

Для достижения этой цели я использовал UserDefault с возможностью группирования приложений и сохранял одно логическое значение. когда виджет присутствует, он проверяет логическое значение и устанавливает состояние кнопки воспроизведения / паузы. он установлен правильно, но когда я нажимаю кнопку расширения, действие не выполняется в хост-приложении.

код:

в основном содержащий код приложения

override func viewDidLoad() {
    super.viewDidLoad()
    let objUserDefault = UserDefaults(suiteName:"group.test.TodayExtensionSharingDefaults")

    let objTemp = objUserDefault?.object(forKey: "value")

    self.btnValue.isSelected = objTemp

    NotificationCenter.default.addObserver(self, selector: #selector(self.userDefaultsDidChange), name: UserDefaults.didChangeNotification, object: nil)
}




func userDefaultsDidChange(_ notification: Notification) {

        let objUserDefault = UserDefaults(suiteName: "group.test.TodayExtensionSharingDefaults")
        objUserDefault?.synchronize()   
        let objTemp = objUserDefault?.object(forKey: "value")
        self.btnValue.isSelected = objTemp
  }

В расширенном классе:

@IBAction func onPlayPause(_ sender: UIButton) {
       DispatchQueue.main.async {
       let sharedDefaults = UserDefaults(suiteName: "group.test.TodayExtensionSharingDefaults")

       if let isPlaying = sharedDefaults?.bool(forKey: "isPlaing") {

       sharedDefaults?.set(!isPlaying, forKey: "isPlaying")

       }else{

        sharedDefaults?.set(false, forKey: "isPlaying")
        }

        sharedDefaults?.synchronize()
}

уведомление не сработало, когда пользователь обновляет настройки по умолчанию. это обновленное значение, когда приложение перезапускается.

так как решить эту проблему?

и то же самое хочет сделать противоположным способом - от приложения до виджета. (простой в использовании объект с одним действием, но как?)

И есть ли другой способ выполнить быстрое действие, содержащее приложение из расширения, не открывая приложение?

Ответы на вопрос(1)

Ваш ответ на вопрос