1

Using iOS13.6.1, Swift5.2.4, XCode11.6,

Following Apple's documentation, I try to delete a particular Siri Shortcut from my app.

The following code shows how I created the Siri Shortcut in the first place.

The Code further below shows my trial to delete the same Siri Shortcut again from my app.

Unfortunately, the Siri Shortcut is not deleted from my App.

Any idea how I can delete it for good ?

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)
    }
}

Here my trial to delete the same Siri Shortcut (but it does not work - why?):

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)
}
iKK
  • 6,394
  • 10
  • 58
  • 131

0 Answers0