Как удалить ярлыки Siri из вашего приложения для iOS?

#swift #viewcontroller #shortcut #sirishortcuts #nsuseractivity

#swift #viewcontroller #ярлык #sirishortcuts #nsuseractivity

Вопрос:

Использование iOS13.6.1, Swift5.2.4, XCode11.6,

Следуя документации Apple, я пытаюсь удалить определенный ярлык Siri из своего приложения.

Следующий код показывает, как я создал ярлык Siri в первую очередь.

Приведенный ниже код показывает мою пробную версию для повторного удаления того же ярлыка Siri из моего приложения.

К сожалению, ярлык Siri не удален из моего приложения.

Есть идеи, как я могу удалить его навсегда?

 extension EditMediaViewController {
    @available(iOS 12.0, *)
    func createSiriButton(documentID: String, invitationCode: String) -> INUIAddVoiceShortcutButton {
        
        let siriShortcutButton = INUIAddVoiceShortcutButton(style: .whiteOutline)
        
        let activity = NSUserActivity(activityType: "MyIdentifierStringCodeABCDEF")
        
        activity.title = "Test"
        activity.suggestedInvocationPhrase = "Test"
        
        activity.isEligibleForSearch = true
        activity.isEligibleForPrediction = true
        activity.persistentIdentifier = NSUserActivityPersistentIdentifier("MyIdentifierStringCodeABCDEF")
        activity.becomeCurrent()
        
        siriShortcutButton.shortcut = INShortcut(userActivity: activity)
        
        return siriShortcutButton
    }
}

extension EditMediaViewController: INUIAddVoiceShortcutButtonDelegate {
    @available(iOS 12.0, *)
    func present(_ addVoiceShortcutViewController: INUIAddVoiceShortcutViewController, for addVoiceShortcutButton: INUIAddVoiceShortcutButton) {
        addVoiceShortcutViewController.delegate = self
        addVoiceShortcutViewController.modalPresentationStyle = .formSheet
        present(addVoiceShortcutViewController, animated: true, completion: nil)
    }
    
    @available(iOS 12.0, *)
    func present(_ editVoiceShortcutViewController: INUIEditVoiceShortcutViewController, for addVoiceShortcutButton: INUIAddVoiceShortcutButton) {
        editVoiceShortcutViewController.delegate = self
        editVoiceShortcutViewController.modalPresentationStyle = .formSheet
        present(editVoiceShortcutViewController, animated: true, completion: nil)
    }
}

extension EditMediaViewController: INUIAddVoiceShortcutViewControllerDelegate {
    @available(iOS 12.0, *)
    func addVoiceShortcutViewController(_ controller: INUIAddVoiceShortcutViewController, didFinishWith voiceShortcut: INVoiceShortcut?, error: Error?) {
        controller.dismiss(animated: true, completion: nil)
    }
    
    @available(iOS 12.0, *)
    func addVoiceShortcutViewControllerDidCancel(_ controller: INUIAddVoiceShortcutViewController) {
        controller.dismiss(animated: true, completion: nil)
    }
}

extension EditMediaViewController: INUIEditVoiceShortcutViewControllerDelegate {
    @available(iOS 12.0, *)
    func editVoiceShortcutViewController(_ controller: INUIEditVoiceShortcutViewController, didUpdate voiceShortcut: INVoiceShortcut?, error: Error?) {
        controller.dismiss(animated: true, completion: nil)
    }
    
    @available(iOS 12.0, *)
    func editVoiceShortcutViewController(_ controller: INUIEditVoiceShortcutViewController, didDeleteVoiceShortcutWithIdentifier deletedVoiceShortcutIdentifier: UUID) {
        controller.dismiss(animated: true, completion: nil)
    }
    
    @available(iOS 12.0, *)
    func editVoiceShortcutViewControllerDidCancel(_ controller: INUIEditVoiceShortcutViewController) {
        controller.dismiss(animated: true, completion: nil)
    }
}

  

Вот моя попытка удалить тот же ярлык Siri (но он не работает — почему?):

 let activity = NSUserActivity(activityType: "MyIdentifierStringCodeABCDEF")
let activityPersistentIdentifier = NSUserActivityPersistentIdentifier("MyIdentifierStringCodeABCDEF")
NSUserActivity.deleteSavedUserActivities(withPersistentIdentifiers: [activityPersistentIdentifier]) {
    print("one deleted")
}
INInteraction.deleteAll { (error) in
    print("all deleted")
}
INInteraction.delete(with: [activityPersistentIdentifier]) { (error) in
    print(error)
}
  

Комментарии:

1. вы поняли, как удалить ярлык Siri?

2. нет — пока нет ответа… Я отчаянно хочу узнать, как это работает…. У вас есть решение?

3. нет, здесь та же проблема. решение не найдено.