VerifiedActionBinding

public struct VerifiedActionBinding<FeatureType, ActionType> where FeatureType : ConditionalFeature, ActionType : Action

A type used to prevent direct execution of actions on ConditionalFeature(s), such that ActionSession only has functions to perform actions using VerifiedActionBinding and not a perform() using a ConditionalActionBinding.

This makes it impossible to directly perform an action of a conditional feature without first requesting access to it, as these request instances are only created by the framework and must be used to perform such actions.

The protocol extensions on ConditionalFeature only supports request and not perform, forcing the caller to test if the feature is available first and at least explicitly ignore the feature not available path, but hopefully provide a code path for that.

  • Call to invoke the system Add Voice Shortcut view controller for the given input to the conditionally-available action represented by this action request. The action must support creating an NSUserActivity using Flint’s Activities conventions.

    This call will throw if the input fails to be converted to an intent or activity.

    This will create a shortcut that invokes the activity created for the Action‘s. If the Action does not support Activities, this will fail.

    • param input: The input to pass to the action when it is later invoked from the Siri Shortcut by the user.
    • param presenter: The UIViewController to use to present the view controller
    • param completion: The closure to call with the result of the operation

    Declaration

    Swift

    @available(iOS 12, *)
    public func addVoiceShortcut(withInput input: ActionType.InputType,
                                 presenter: UIViewController,
                                 completion: ((_ result: AddVoiceShortcutResult) -> Void)? = nil) throws
  • Perform an intent intended for this action. The action will be passed the input extracted from the intent, and a presenter that automatically calls the completion handler passed as an argument.

    This call will throw if the intent fails to be converted to an input for the action.

    • param intent: The intent received from an Intent Extension handler. This must be of the same type as this actions’s IntentType
    • param completion: The intent handler completion closure from an Intent Extension handler.

    • return: The result of performing the action.

    Declaration

    Swift

    func perform(withIntent intent: ActionType.IntentType, completion: @escaping (ActionType.IntentResponseType) -> Void) throws -> MappedActionResult
  • Perform an intent intended for this action. The action will be passed the input extracted from the intent, and the presenter (which must be an IntentResponsePresenter) passed in here is passed to the action.

    This call will throw if the intent fails to be converted to an input for the action.

    • param intent: The intent received from an Intent Extension handler. This must be of the same type as this actions’s IntentType
    • param completion: The intent handler completion closure from an Intent Extension handler.

    • return: The result of performing the action.

    Declaration

    Swift

    func perform(withIntent intent: ActionType.IntentType, presenter: ActionType.PresenterType) throws -> MappedActionResult
  • Call to invoke the system Add Voice Shortcut view controller for the given input to the conditionally-available action represented by this action request. The action must support creating an INIntent for a custom intent extension to be invoked.

    This will create a shortcut that invokes the INIntent returned by the Action‘s intent(withInput:) function. If that function returns nil (or is not defined by your Action), it will attempt to create an NSUserActivity for the Action and instead use that. If the Action does not support Activities, this will fail.

    This call will throw if the input fails to be converted to an intent or activity.

  • param input: The input to pass to the action when it is later invoked from the Siri Shortcut by the user.
  • param presenter: The UIViewController to use to present the view controller
  • param completion: A closure called with the outcome.

  • Note

    This variant exists for the specialisation that will call intent(withInput:) on the Action to create an an intent for the shortcut.

    Declaration

    Swift

    @available(iOS 12, *)
    func addVoiceShortcut(withInput input: ActionType.InputType,
                                 presenter: UIViewController,
                                 completion: ((_ result: AddVoiceShortcutResult) -> Void)? = nil) throws
  • Show the system’s Voice Shortcut editing UI for the given shortcut. You obtain instances of these shortcuts from INVoiceShortcutCenter which has APIs to return the shortcuts that currently exist.

    This call will throw if the input fails to be converted to an intent or activity.

  • param shortcut: The voice shortcut received from INVoiceShortcutCenter
  • param presenter: A view controller from which the editing UI will be presented
  • param completion: A closure called with the outcome of the editing.

  • Declaration

    Swift

    @available(iOS 12, *)
    func editVoiceShortcut(_ shortcut: INVoiceShortcut,
                                  presenter: UIViewController,
                                  completion: ((_ result: EditVoiceShortcutResult) -> Void)? = nil)
  • Create an INShortcut instance for the given input. Use when pre-registering shortcuts with INVoiceShortcuteCenter

    This call will throw if the input fails to be converted to an intent or activity.

    • param input: The input to the action, for which you wish to create a shortcut
    • return: The shortcut, or nil if the action’s intent(withInput:) function vetoed creation of the intent by returning nil.

    Declaration

    Swift

    @available(iOS 12, *)
    func shortcut(withInput input: ActionType.InputType) throws -> INShortcut?
  • Donate an intent-based shortcut to this Action to Siri for the given input.

    This call will throw if the input fails to be converted to an intent or activity.

    • param input: The input to the action, for which you wish to donate a shortcut

    Declaration

    Swift

    @available(iOS 12, *)
    func donateToSiri(withInput input: ActionType.InputType) throws