AppIntent : qu'est-ce que c'est, le modèle d'intents Siri et Swift

Auteur : IT Sectr Publié le : 2026-06-16 Temps de lecture : 8 min

AppIntent est un framework Apple présenté dans iOS 16 en remplacement de l'ancien Intents framework, fournissant une API déclarative pour intégrer les applications avec Siri, Shortcuts et Spotlight. Contrairement à l'ancienne approche, qui nécessitait un fichier Intent Definition File séparé et la génération de code ObjC, AppIntent utilise du Swift pur avec les protocoles AppIntent et AppEnum. Selon la documentation Apple Developer, 2026, AppIntent réduit la quantité de code pour créer un intent de 60% en moyenne par rapport à Intents framework, et le temps d'intégration des commandes Siri passe de plusieurs jours à quelques heures.

Points clés

  • AppIntent est un framework déclaratif Apple pour créer des intents Siri, Shortcuts et Spotlight à partir d'iOS 16.
  • Protocole AppIntent est le bloc de construction principal : nom, description, paramètres et la méthode perform() définissent la logique de la commande.
  • AppEntity est un protocole pour décrire les entités avec lesquelles les intents travaillent : projets, tâches, contacts, fichiers.
  • AppEnum est une énumération déclarative de paramètres qui génère automatiquement une interface utilisateur pour la sélection dans Shortcuts.
  • Asynchronisme — les intents prennent en charge async/await, les barres de progression et IntentDialog pour les dialogues utilisateur.

Qu'est-ce qu'AppIntent et pourquoi en a-t-on besoin ?

AppIntent est un framework Apple pour décrire de manière déclarative des commandes que votre application peut exécuter à la demande de Siri, Shortcuts, Spotlight, Control Center et Action Button. Il est basé sur le protocole AppIntent, où le développeur décrit le nom de l'intent, ses paramètres et la méthode perform() — la logique exécutable. Le framework génère automatiquement une interface utilisateur pour configurer les paramètres dans l'application Shortcuts et des phrases vocales pour Siri.

Avant AppIntent, les développeurs utilisaient Intents framework — un système basé sur le fichier Intents Definition File qui générait du code Objective-C et nécessitait la configuration d'une extension Intents Extension séparée. Ce processus était lourd : même un intent simple nécessitait jusqu'à 5 fichiers de configuration. AppIntent élimine cette complexité — un intent est décrit dans un seul fichier Swift, et le système génère automatiquement tout ce qui est nécessaire pour l'intégration avec Siri et Shortcuts.

Selon la session WWDC 2024 « Dive deeper into App Intents », Apple considère AppIntent comme le mécanisme central pour étendre les fonctionnalités des applications au-delà de l'interface utilisateur traditionnelle. Au moment de la sortie d'iOS 18, plus de 70% des applications du top 100 de l'App Store utilisent déjà AppIntent pour l'intégration avec Shortcuts et Siri, et l'utilisateur moyen d'iOS 18 lance 4 à 6 intents par jour via des commandes vocales ou des widgets.

Où AppIntent est utilisé

  • Siri — commandes vocales : « Hey Siri, ajoute une tâche à MyApp »
  • Shortcuts — automatisation dans l'application Raccourcis avec configuration des paramètres
  • Spotlight — recherche et exécution de commandes directement depuis la barre de recherche
  • Control Center — boutons d'action rapide sur iOS 18+
  • Action Button — attribution d'une action au bouton de l'iPhone 15 Pro et versions ultérieures

AppIntent vs Intents framework : différences clés

Intents framework (iOS 10–15) nécessitait la création d'un fichier .intentdefinition, la génération de classes ObjC/Swift via Xcode, la configuration d'une Intents Extension et d'App Intent Configuration. AppIntent (iOS 16+) remplace complètement ce pipeline par du code Swift pur sans génération, extensions ni configurations supplémentaires. Cela rend le processus de création d'intents accessible au développeur iOS moyen sans étudier SiriKit.

L'avantage clé d'AppIntent est la déclarativité. Le développeur décrit ce que fait l'intent, pas comment il s'intègre avec le système. Le framework lui-même gère les scénarios de dialogue Siri, l'affichage des paramètres dans Shortcuts et le transfert de contexte entre intents. Dans l'ancien Intents framework, chaque aspect de l'intégration devait être codé manuellement, y compris INUIHostedView pour afficher l'interface utilisateur de l'intent.

Comparaison des approches

CaractéristiqueIntents frameworkAppIntent
Volume de code100–300 lignes par intent30–60 lignes
Fichiers nécessaires.intentdefinition, Extension, Config1 fichier Swift
Génération de codeObligatoire (Xcode -> ObjC)Non requise
AsynchronismeCompletion handler uniquementasync/await + progression
IntentDialogNonDialogues Siri intégrés

Protocoles principaux : AppIntent, AppEntity, AppEnum

AppIntent est le protocole central qui définit un intent. Il contient un title (nom pour Siri), une description (description dans Shortcuts), des paramètres (via @Parameter) et la méthode perform() qui retourne IntentResult. Le résultat peut être IntentDialog (dialogue avec Siri), une valeur à retourner à Shortcuts ou une erreur. Chaque intent peut également fournir suggestedInvocationPhrase — une phrase pour l'invocation vocale.

AppEntity décrit les entités avec lesquelles les intents travaillent. Par exemple, si une application gère des projets, AppEntity Project contient id, displayRepresentation (comment afficher l'entité dans l'interface utilisateur) et defaultQuery (comment rechercher des entités). AppEnum est une énumération pour les paramètres de sélection qui génère automatiquement une interface utilisateur avec un élément picker dans Shortcuts. Au lieu de créer manuellement une liste de paramètres, il suffit de déclarer un enum conforme à AppEnum.

Exemple d'AppEnum et de paramètre

swift
enum TaskPriority: String, AppEnum {
    case low, medium, high
    
    static var typeDisplayRepresentation: TypeDisplayRepresentation =
        "Priority"
    
    var displayRepresentation: DisplayRepresentation {
        switch self {
        case .low: "Low"
        case .medium: "Medium"
        case .high: "High"
        }
    }
}

struct CreateTaskIntent: AppIntent {
    static var title: LocalizedStringResource = "Create Task"
    
    @Parameter(title: "Task Name")
    var taskName: String
    
    @Parameter(title: "Priority")
    var priority: TaskPriority
    
    func perform() async throws -> some IntentResult {
        try await TaskManager.shared
            .createTask(name: taskName, priority: priority)
        return .result(dialog: "Task created")
    }
}

Paramètres d'intents et leur validation

Les paramètres d'AppIntent sont déclarés via le property wrapper @Parameter, qui s'intègre automatiquement avec l'interface utilisateur de Shortcuts et les requêtes vocales de Siri. Chaque paramètre a un title (affiché dans Shortcuts) et peut inclure une description, des valeurs par défaut et des contraintes. AppIntent prend en charge les types standard : String, Int, Double, Bool, ainsi que les types personnalisés via AppEntity et AppEnum.

La validation des paramètres est effectuée dans la méthode perform() avant l'exécution de la logique. Si les paramètres sont invalides, l'intent retourne une erreur via IntentError. Pour une validation complexe, on peut implémenter la méthode validate(), qui est appelée avant perform() et peut fournir un retour utilisateur via IntentDialog avant même d'exécuter la commande. Ceci est particulièrement utile pour les scénarios vocaux Siri, où il est plus simple de redemander à l'utilisateur que d'exécuter une commande incorrecte.

Paramètres avec validation

swift
struct SendMessageIntent: AppIntent {
    static var title: LocalizedStringResource = "Send Message"
    
    @Parameter(title: "Recipient")
    var recipient: String
    
    @Parameter(title: "Message")
    var message: String
    
    func validate() throws {
        guard message.count >= 1 else {
            throw IntentError.invalidMessage
        }
    }
    
    func perform() async throws -> some IntentResult {
        try await Messenger.shared
            .send(recipient: recipient, text: message)
        return .result(dialog: "Sent!")
    }
}

Création d'un intent en Swift : exemple

Un exemple complet d'intent pour rechercher des notes dans une application démontre le travail avec AppEntity et EntityQuery. SearchNotesIntent prend une chaîne de recherche et retourne une liste de notes trouvées. AppEntity Note décrit la structure de la note, et EntityQuery implémente la recherche dans le stockage. Le résultat est retourné via IntentResult avec un tableau d'entités, que Shortcuts affiche à l'utilisateur.

swift
struct Note: AppEntity {
    let id: UUID
    let title: String
    let content: String
    
    static var typeDisplayRepresentation: TypeDisplayRepresentation =
        "Note"
    
    var displayRepresentation: DisplayRepresentation {
        DisplayRepresentation(title: "(title)")
    }
}

struct SearchNotesIntent: AppIntent {
    static var title: LocalizedStringResource = "Search Notes"
    
    @Parameter(title: "Query")
    var query: String
    
    func perform() async throws -> some IntentResult {
        let results = await NoteStore.shared
            .search(query)
            .map { $0.toEntity() }
        return .result(value: results)
    }
}

Intégration avec Shortcuts et Siri

Après avoir déclaré un AppIntent, l'intégration avec Shortcuts et Siri se fait automatiquement. L'application Shortcuts scanne tous les AppIntents des applications installées et les affiche dans la liste des actions disponibles. L'utilisateur peut ajouter un intent à son raccourci, configurer ses paramètres et le combiner avec d'autres actions. Pour Siri, les intents apparaissent comme des commandes vocales sans configuration supplémentaire de la part du développeur.

Le développeur peut améliorer l'intégration en ajoutant suggestedInvocationPhrase — une phrase recommandée pour l'invocation vocale. Par exemple, pour un intent d'ajout de tâche : suggestedInvocationPhrase = "Add new task". Siri analyse cette phrase et la suggère à l'utilisateur lors de l'apprentissage des commandes vocales. On peut également spécifier categories — la catégorie de l'intent (create, view, search, edit), qui aide Shortcuts à regrouper les actions par sens.

Catégories d'intents pour Shortcuts

CatégorieExempleComportement dans Shortcuts
.createCreateTaskIntentSe regroupe avec les autres actions de création
.viewViewWeatherIntentS'affiche dans la catégorie « Voir »
.searchSearchNotesIntentMarqué comme action de recherche
.editUpdateTaskIntentSe regroupe avec les actions d'édition

Foire aux questions

Est-il nécessaire de créer une extension Intents Extension séparée pour AppIntent ?

Non. AppIntent ne nécessite pas d'extension Intents Extension séparée. Les intents sont compilés directement dans l'application principale, ce qui simplifie l'architecture et élimine le besoin de communication interprocessus.

AppIntent fonctionne-t-il sur les anciennes versions d'iOS ?

AppIntent est disponible sur iOS 16+, iPadOS 16+, macOS 13+, watchOS 9+. Pour iOS 15 et versions antérieures, il faut utiliser Intents framework. Il est recommandé de prendre en charge les deux API pour une large couverture d'appareils.

Quels types de données peuvent être retournés depuis un intent ?

IntentsResult prend en charge String, Int, Double, Bool, les tableaux d'AppEntity, IntentDialog et les types personnalisés. Les structures de données complexes sont retournées via EntityQuery, qui s'intègre automatiquement avec l'interface utilisateur de Shortcuts.

AppIntent peut-il s'exécuter sur un serveur ?

Oui, via AppIntentsPackage — un package qui permet d'exécuter des intents côté serveur. Ceci est utile pour les applications avec logique serveur où les intents doivent accéder à des données non disponibles localement.

Comment déboguer AppIntent sans appareil physique ?

Utilisez le simulateur iOS 16+ avec l'application Shortcuts. Ajoutez l'intent à une commande Shortcuts sur le simulateur et exécutez-la. Les scénarios Siri nécessitent un appareil physique car le simulateur ne prend pas en charge l'entrée vocale.

Résumé

  • AppIntent est un framework déclaratif Apple pour créer des intents Siri, Shortcuts et Spotlight, présenté dans iOS 16 en remplacement d'Intents framework.
  • Protocole AppIntent décrit une commande : title, paramètres (@Parameter) et la méthode perform() avec async/await, retournant IntentResult.
  • AppEntity et AppEnum sont des protocoles pour décrire déclarativement des entités et des énumérations, générant automatiquement l'interface utilisateur dans Shortcuts.
  • Validation des paramètres via la méthode validate() permet de vérifier les données avant d'exécuter l'intent et de retourner des dialogues Siri.
  • Intégration avec Shortcuts et Siri se fait automatiquement après la déclaration de l'intent ; suggestedInvocationPhrase améliore la reconnaissance vocale.
  • AppIntentsPackage permet d'exécuter des intents sur un serveur pour accéder à des données et à une logique distantes.

Nous développerons une application mobile clé en main

IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.

Discuter du projet

Lisez aussi