---
title: AppIntent
framework: appintents
role: symbol
role_heading: Protocol
path: appintents/appintent
---

# AppIntent

An interface you use to express app-specific actions and make them available to the rest of the system.

## Declaration

```swift
protocol AppIntent : PersistentlyIdentifiable, _SupportsAppDependencies, Sendable
```

## Mentioned in

Creating your first app intent Responding to the Action button on Apple Watch Ultra Adding parameters to an app intent Displaying static and interactive snippets Getting started with the App Intents framework

## Overview

Overview The AppIntent protocol defines the interface you use to make your app’s actions discoverable by Apple Intelligence and Siri, the Shortcuts app, and other system experiences. This protocol defines the common features that help the system identify your app’s actions and access basic information about them. Implement this protocol in all your app intents, and supplement it with other protocols as needed to support specific types of actions. Implement this protocol in a new type or existing type in your app, app extension, framework, or Swift package. In your type, use the perform() method to perform the action and return a result back to the system. If you require input from the person performing the action, add one or more variables to your type and apply the @Parameter property wrapper to each. For example, an app intent to start a workout might require the person to specify which workout they want. Before calling your perform() method, the system resolves any parameters with this wrapper by inferring values from the current conversation or by asking someone explicitly to provide the value. If your app intent requires app-specific data to perform its action, apply the @Dependency property wrapper to any variables with that data. In addition to performing an action, an app intent provides information about the action itself. Implement the title and description properties and set them to localized strings describing your action. If your app intent has parameters, fill in the parameterSummary property with a description of the action and parameters together. The system uses this information during conversations or when displaying information about your intent. The following example shows an app intent for ordering an album of music. The intent requires the person to specify the album name at order time. The intent also uses an internal album manager type to locate albums by name and initiate the purchase. struct OrderAlbum: AppIntent {     static var title: LocalizedStringResource { "Order Album" }     static var description = IntentDescription("Order a vinyl record album.")

@Parameter(title: "Album", description: "The name of the album to order.")     var albumName: String

@Dependency     private var albumManager: AlbumDataManager

func perform() async throws -> some IntentResult {         // Perform the action...         return .result()     }

static var parameterSummary: some ParameterSummary {         Summary("Order \(\.$albumName)")     } } In addition to this protocol, you can define intents that support common actions. System-defined schemas define the requirements needed to support common actions, including the app intent protocol your type needs to adopt and any parameters it needs to define. For example, the AssistantSchemas.PhotosIntent.openAlbum intent requires conformance to the OpenIntent protocol and a property with an AppEntity type for the photo album. For information about the available schemas, see doc:app-intent-domains. For additional app intent protocols you can adopt in your app, see App intent types. For information on how to create an app intent, see Creating your first app intent.

## Topics

### Creating an app intent

- [init()](appintents/appintent/init().md)

### Specifying the authentication policy

- [authenticationPolicy](appintents/appintent/authenticationpolicy.md)
- [IntentAuthenticationPolicy](appintents/intentauthenticationpolicy.md)

### Specifying the intent’s allowed target

- [allowedExecutionTargets](appintents/appintent/allowedexecutiontargets.md)
- [IntentExecutionTargets](appintents/intentexecutiontargets.md)
- [AppIntent.ExecutionTargets](appintents/appintent/executiontargets.md)

### Configuring the metadata

- [title](appintents/appintent/title.md)
- [description](appintents/appintent/description.md)
- [isDiscoverable](appintents/appintent/isdiscoverable.md)

### Performing the action

- [perform()](appintents/appintent/perform().md)
- [systemContext](appintents/appintent/systemcontext.md)
- [PerformResult](appintents/appintent/performresult.md)

### Running in the foreground or background

- [supportedModes](appintents/appintent/supportedmodes.md)
- [IntentModes](appintents/intentmodes.md)
- [continueInForeground(_:alwaysConfirm:)](appintents/appintent/continueinforeground(_:alwaysconfirm:).md)
- [needsToContinueInForegroundError(_:alwaysConfirm:)](appintents/appintent/needstocontinueinforegrounderror(_:alwaysconfirm:).md)

### Requesting more information

- [requestChoice(between:dialog:)](appintents/appintent/requestchoice(between:dialog:).md)
- [requestChoice(between:dialog:content:)](appintents/appintent/requestchoice(between:dialog:content:).md)
- [requestChoice(between:dialog:view:)](appintents/appintent/requestchoice(between:dialog:view:).md)

### Requesting confirmation

- [requestConfirmation()](appintents/appintent/requestconfirmation().md)
- [requestConfirmation(conditions:actionName:dialog:)](appintents/appintent/requestconfirmation(conditions:actionname:dialog:).md)
- [requestConfirmation(conditions:actionName:dialog:showDialogAsPrompt:content:)](appintents/appintent/requestconfirmation(conditions:actionname:dialog:showdialogasprompt:content:).md)
- [requestConfirmation(conditions:actionName:dialog:showDialogAsPrompt:snippetIntent:)](appintents/appintent/requestconfirmation(conditions:actionname:dialog:showdialogasprompt:snippetintent:)-3vewj.md)
- [requestConfirmation(conditions:actionName:dialog:showDialogAsPrompt:snippetIntent:)](appintents/appintent/requestconfirmation(conditions:actionname:dialog:showdialogasprompt:snippetintent:)-jxb8.md)

### Donating the intent to the system

- [donate()](appintents/appintent/donate()-1e60c.md)
- [donate()](appintents/appintent/donate()-jp6k.md)
- [donate(result:)](appintents/appintent/donate(result:)-36cia.md)
- [donate(result:)](appintents/appintent/donate(result:)-9b25i.md)
- [callAsFunction(donate:)](appintents/appintent/callasfunction(donate:)-3qvbt.md)
- [callAsFunction(donate:)](appintents/appintent/callasfunction(donate:)-7v1om.md)

### Summarizing the parameters

- [SummaryContent](appintents/appintent/summarycontent.md)
- [parameterSummary](appintents/appintent/parametersummary.md)
- [parameterSummary](appintents/appintent/parametersummary-4vgic.md)
- [ParameterSummaryBuilder](appintents/parametersummarybuilder.md)
- [AppIntent.Parameter](appintents/appintent/parameter.md)
- [AppIntent.Case](appintents/appintent/case.md)
- [AppIntent.DefaultCase](appintents/appintent/defaultcase.md)
- [AppIntent.Summary](appintents/appintent/summary.md)
- [AppIntent.Switch](appintents/appintent/switch.md)
- [AppIntent.When](appintents/appintent/when.md)
- [AppIntent.Option](appintents/appintent/option.md)

### Deprecated

- [openAppWhenRun](appintents/appintent/openappwhenrun.md)
- [requestConfirmation(result:confirmationActionName:showPrompt:)](appintents/appintent/requestconfirmation(result:confirmationactionname:showprompt:).md)
- [requestConfirmation(output:confirmationActionName:showPrompt:)](appintents/appintent/requestconfirmation(output:confirmationactionname:showprompt:).md)

## Relationships

### Inherits From

- [PersistentlyIdentifiable](appintents/persistentlyidentifiable.md)
- [Sendable](swift/sendable.md)
- [SendableMetatype](swift/sendablemetatype.md)

### Inherited By

- [AssistantIntent](appintents/assistantintent.md)
- [AssistantSchemaIntent](appintents/assistantschemaintent.md)
- [AudioPlaybackIntent](appintents/audioplaybackintent.md)
- [AudioRecordingIntent](appintents/audiorecordingintent.md)
- [AudioStartingIntent](appintents/audiostartingintent.md)
- [CameraCaptureIntent](appintents/cameracaptureintent.md)
- [CancellableIntent](appintents/cancellableintent.md)
- [ControlConfigurationIntent](appintents/controlconfigurationintent.md)
- [CustomIntentMigratedAppIntent](appintents/customintentmigratedappintent.md)
- [DeleteIntent](appintents/deleteintent.md)
- [DeprecatedAppIntent](appintents/deprecatedappintent.md)
- [ForegroundContinuableIntent](appintents/foregroundcontinuableintent.md)
- [LiveActivityIntent](appintents/liveactivityintent.md)
- [LiveActivityStartingIntent](appintents/liveactivitystartingintent.md)
- [LongRunningIntent](appintents/longrunningintent.md)
- [OpenIntent](appintents/openintent.md)
- [PauseWorkoutIntent](appintents/pauseworkoutintent.md)
- [PlayVideoIntent](appintents/playvideointent.md)
- [PredictableIntent](appintents/predictableintent.md)
- [ProgressReportingIntent](appintents/progressreportingintent.md)
- [PushToTalkTransmissionIntent](appintents/pushtotalktransmissionintent.md)
- [ResumeWorkoutIntent](appintents/resumeworkoutintent.md)
- [SetFocusFilterIntent](appintents/setfocusfilterintent.md)
- [SetValueIntent](appintents/setvalueintent.md)
- [ShowInAppSearchResultsIntent](appintents/showinappsearchresultsintent.md)
- [SnippetIntent](appintents/snippetintent.md)
- [StartDiveIntent](appintents/startdiveintent.md)
- [StartWorkoutIntent](appintents/startworkoutintent.md)
- [SystemIntent](appintents/systemintent.md)
- [TargetContentProvidingIntent](appintents/targetcontentprovidingintent.md)
- [UISceneAppIntent](appintents/uisceneappintent.md)
- [URLRepresentableIntent](appintents/urlrepresentableintent.md)
- [UndoableIntent](appintents/undoableintent.md)
- [WidgetConfigurationIntent](appintents/widgetconfigurationintent.md)

### Conforming Types

- [EmptySnippetIntent](appintents/emptysnippetintent.md)
- [OpenURLIntent](appintents/openurlintent.md)
- [RunSystemShortcutIntent](appintents/runsystemshortcutintent.md)

## See Also

### App intent definition

- [Creating your first app intent](appintents/creating-your-first-app-intent.md)
- [Accelerating app interactions with App Intents](appintents/acceleratingappinteractionswithappintents.md)
- [Soup Chef with App Intents: Migrating custom intents](sirikit/soup-chef-with-app-intents-migrating-custom-intents.md)
- [App intent types](appintents/app-intent-types.md)
