Construire une application de liste de tâches vocale sur iOS avec intégration Siri

En permettant aux utilisateurs de gérer les tâches sans les mains, les développeurs iOS peuvent créer une expérience de liste de tâches beaucoup plus accessible et efficace. Siri, l'assistant voix intelligent Apple, fournit un cadre solide pour intégrer les commandes vocales directement dans votre application. Ce guide vous permet de parcourir chaque étape de la construction d'une application de liste de tâches vocales, de la configuration initiale du projet à la gestion d'intention avancée et les meilleures pratiques de déploiement. Que vous soyez un développeur iOS chevronné ou nouveau à SiriKit, les techniques décrites ici vous aideront à ajouter des interactions vocales puissantes et en langage naturel à votre application.

Comprendre SiriKit et son rôle dans la gestion des tâches

SiriKit est un cadre qui permet à votre application d'étendre ses fonctionnalités à Siri. Au lieu de construire une interface vocale séparée, vous définissez les actions que les utilisateurs peuvent effectuer par des commandes vocales, et Siri gère la reconnaissance de la parole et le traitement du langage naturel. Pour une application de liste à faire, SiriKit permet des actions telles que l'ajout d'une tâche, la suppression d'une tâche, l'affichage des tâches courantes ou même la notation d'une tâche comme terminée.

Le framework utilise Intents — objets qui représentent des actions de l'utilisateur. Votre application définit des intentions personnalisées pour les opérations spécifiques qu'elle supporte. Lorsqu'un utilisateur parle une commande comme -Hey Siri, ajoutez du lait à ma liste de magasins dans MyToDoApp, -Siri correspond à la phrase à votre intention, extrait des paramètres (comme le nom de la tâche et l'identificateur de la liste), et passe l'intention à votre gestionnaire d'applications. Votre application effectue ensuite l'action et renvoie une réponse. Siri utilise cette réponse pour confirmer le résultat à l'utilisateur.

Les principaux avantages de l'utilisation de SiriKit sont les suivants :

  • Fonctionnement sans poignées :[ Les utilisateurs peuvent gérer les tâches pendant la conduite, la cuisson ou l'exercice.
  • Accessibilité accrue : Le contrôle de la voix aide les utilisateurs ayant des déficiences motrices ou visuelles.
  • Consistance avec les interactions vocales système: Votre application se sent comme un citoyen iOS de première classe.
  • Intégration raccourcie :[ Les utilisateurs peuvent créer des raccourcis Siri personnalisés pour les actions fréquemment utilisées.

SiriKit vs. Autres solutions vocales

SiriKit est l'approche recommandée pour l'intégration avec l'assistant système, car il ne nécessite pas d'interface d'enregistrement audio séparée, pas de configuration de reconnaissance vocale, et il fonctionne sur les appareils Apple. Le cadre de la parole est mieux adapté pour les applications qui doivent traiter des flux audio arbitraires (p. ex., transcription). Pour une application de liste à faire où vous avez seulement besoin d'un ensemble de commandes fixes, SiriKit est le gagnant clair.

Mettre en place votre projet d'intégration Siri

La création d'une application vocale commence par la configuration standard du projet Xcode. Vous devrez également activer la capacité Siri et ajouter une extension Intents pour gérer les requêtes même si l'application n'est pas en cours d'exécution.

Étape 1: Créer un nouveau projet de Xcode

Lancez Xcode et créez un nouveau projet en utilisant le modèle App (iOS). Donnez à votre projet un nom, tel que VoiceTodo, et assurez-vous que SwiftUI ou UIKit est sélectionné en fonction de votre préférence.

Étape 2: Activer la capacité Siri

Dans votre cible d'applications Signing & Capabilities onglet, cliquez sur le + Capacity bouton et recherchez Siri. Ajoutez la capacité et assurez-vous que la case à cocher est cochée. Cette étape est obligatoire; sans elle, Siri ne reconnaîtra pas vos intentions.

Étape 3: Ajouter une extension d'intentions

Pour permettre à Siri de gérer les intentions même lorsque votre application est en arrière-plan ou non lancée, vous avez besoin d'une extension d'intention[. Allez dans File > New > Target, sélectionnez extension d'intention dans la section -Extension d'applications, et nommez-la (p. ex., VoiceTodoIntents.Xcode créera une cible séparée avec son propre fichier Info.plist et . Dans l'extension Info.plist, vérifiez que le tableau IntentsSupported[ contient les noms de vos intentions personnalisées (que nous définirons ensuite).

Étape 4: Créer un fichier de définition d'intentions

Dans votre cible principale, créez un nouveau fichier en utilisant le modèle Intents Definition (trouvé sous Templates de ressources). Nommez-le TodoIntents.intentdefinition[. Ce fichier définit vos intentions personnalisées. Il sera automatiquement partagé avec votre cible Extension d'intentions si vous le configurez correctement.

Pour s'assurer que le fichier de définition est disponible pour les deux cibles, sélectionnez le fichier TodoIntents.intendefinition dans le navigateur du projet et, dans l'inspecteur de fichiers, ajoutez à la fois votre application principale et l'extension Intents à la liste Target Membership. Cette étape est souvent négligée mais est critique pour générer les classes Swift nécessaires.

Définition des intentions personnalisées pour les opérations à effectuer

Pour une application de base de liste de tâches, vous aurez au moins trois intentions : AddTaskIntent, RetirerTaskIntent, et ShowTasksIntent.

Création de l'intention d'ajouter une tâche

  1. Ouvrir TodoIntents.intentdefinition. Cliquez sur le + à la gauche inférieure de la toile et sélectionnez Nouvelle intention.
  2. Nommez l'intention .
  3. Sous Paramètres, ajouter un nouveau paramètre nommé de type String. En option, ajouter un paramètre si votre application supporte plusieurs listes.
  4. Définir les paramètres Afficher le nom (par exemple, =Nom de la tâche) et Prompt[ (par exemple, =Quelle tâche dois-je ajouter?==). Cette invite apparaît lorsque Siri a besoin de clarification.
  5. Dans la section Réponse, choisissez Succès et définissez un modèle de réponse comme -Ajouté {{taskName}} à votre liste de tâches.
  6. Assurez-vous que La classe est cochée et que le nom de la classe est .

Création de l'intention de supprimer

Répétez le processus pour un avec un paramètre . La réponse peut être ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Création de la tâche d'affichage

Pour , vous n'avez peut-être pas besoin de paramètres. Au lieu de cela, vous pouvez vous appuyer sur la réponse pour contenir une liste de tâches. Dans la section de réponse, ajoutez une propriété [Contenu de type String. Utilisez un modèle de réponse comme -Vous avez {{count}} tâches : {{content}}. Le peut être un jeu de propriétés personnalisé programmatiquement.

Classes d'intention génératrices

Après avoir défini toutes les intentions, créez votre projet. Xcode générera automatiquement des classes Swift pour chaque intention et sa réponse. Ces classes vivent dans le dossier Data , mais sont visibles dans l'éditeur. Vous les utiliserez dans votre code de gestionnaire.

Mise en œuvre de la manipulation d'intention dans votre application et extension

Maintenant que les intentions sont définies, vous devez écrire le code qui les gère lorsque Siri invoque votre application.

Manipulation des intentions dans la prolongation des intentions

La cible d'extension d'intentions comprend un fichier par défaut . Ouvrez-le et remplacez son contenu par une classe conforme aux protocoles de manipulation d'intention générés. Chaque intention aura sa propre méthode de gestion.

import Intents

class IntentHandler: INExtension, AddTaskIntentHandling, RemoveTaskIntentHandling, ShowTasksIntentHandling {

 override func handler(for intent: INIntent) -> Any? {
 return self
 }

 // MARK: - Add Task
 func handle(intent: AddTaskIntent, completion: @escaping (AddTaskIntentResponse) -> Void) {
 guard let taskName = intent.taskName else {
 completion(AddTaskIntentResponse.failure(taskName: "unknown"))
 return
 }
 // Persist the task to your data store (Core Data, UserDefaults, etc.)
 // For simplicity, we'll assume a shared data manager
 TaskDataManager.shared.addTask(taskName: taskName, listName: intent.listName ?? "Default")
 completion(AddTaskIntentResponse.success(taskName: taskName))
 }

 func resolveTaskName(for intent: AddTaskIntent, with completion: @escaping (INStringResolutionResult) -> Void) {
 if let taskName = intent.taskName, !taskName.isEmpty {
 completion(.success(with: taskName))
 } else {
 // Prompt user for a task name
 completion(.needsValue())
 }
 }

 // MARK: - Remove Task
 func handle(intent: RemoveTaskIntent, completion: @escaping (RemoveTaskIntentResponse) -> Void) {
 guard let taskName = intent.taskName else {
 completion(.failure(taskName: "unknown"))
 return
 }
 let removed = TaskDataManager.shared.removeTask(taskName: taskName)
 if removed {
 completion(.success(taskName: taskName))
 } else {
 completion(.notFound(taskName: taskName))
 }
 }

 // MARK: - Show Tasks
 func handle(intent: ShowTasksIntent, completion: @escaping (ShowTasksIntentResponse) -> Void) {
 let tasks = TaskDataManager.shared.allTasks()
 let taskList = tasks.map { $0.name }.joined(separator: ", ")
 let count = tasks.count
 let response = ShowTasksIntentResponse.success(count: count, content: taskList)
 completion(response)
 }
}

Magasin de données partagé

Le code ci-dessus fait référence à un hypothétique . Parce que l'extension Intents fonctionne dans un processus séparé, vous ne pouvez pas accéder directement au modèle de données principal de votre application. Vous devez utiliser un conteneur partagé (Groupe d'applications) pour stocker des tâches dans un emplacement commun tel qu'une suite partagée UserDefaults[ ou un stockage Core Data qui vit dans le répertoire du groupe d'applications.

Manipulation des intentions dans l'application principale

Lorsque votre application est la plus en avant et que l'utilisateur déclenche un raccourci Siri, vous pouvez également gérer les intentions directement dans l'application principale (sans l'extension). Vous pouvez conformer votre délégué de l'application ou délégué de scène à la même intention. Cependant, dans la plupart des cas d'utilisation, l'extension est suffisante parce qu'elle fonctionne indépendamment de la présence de l'application dans le premier plan.

Extension de la fonctionnalité : confirmation, annulation et paramètres

La manipulation de base de l'intention n'est que le début. Pour rendre votre liste de tâches vocaux robuste, ajoutez le support pour les dialogues de confirmation et la résolution des paramètres.

Méthodes de résolution

Pour chaque paramètre, vous pouvez implémenter une méthode qui valide ou demande des éclaircissements. Par exemple, si l'utilisateur dit -Ajouter des œufs - sans spécifier quelle liste, votre méthode --peut inviter : - Quelle liste voulez-vous ajouter des œufs à ?- Si vous n'avez qu'une liste, résolvez automatiquement cette liste.

Réponses de confirmation

Vous pouvez laisser Siri demander à l'utilisateur de confirmer une action avant de l'exécuter. Ceci est utile pour les opérations destructrices comme la suppression des tâches. Dans votre classe de réponse intention, ajoutez un type de réponse Confirmation. Lorsque vous manipulez l'intention, vous pouvez retourner une réponse de confirmation qui inclut les détails. Siri demandera alors à l'utilisateur de confirmer, et si elle est confirmée, votre méthode sera appelée à nouveau avec un drapeau.

Gestion des URL pour le lien profond

Après avoir effectué une action, vous pouvez ouvrir votre application pour afficher la liste mise à jour. Votre gestionnaire d'intention peut appeler si disponible, ou votre application principale peut répondre aux schémas d'URL. Ajouter une propriété à votre définition d'intention pour permettre la liaison automatique profonde.

Tester votre application vocale

Tester l'intégration Siri nécessite une certaine configuration car les commandes parlées ne peuvent pas être simulées directement. Utilisez les approches suivantes :

Utilisation du Siri Simulator dans Xcode

Exécutez votre application principale sur un simulateur, puis arrêtez l'application. Ensuite, exécutez la cible d'extension d'intentions en utilisant un schéma configuré pour le simulateur. Xcode lancera une interface Siri simulée où vous pouvez taper votre commande. C'est la façon la plus rapide de tester sans appareil physique.

Test avec un appareil réel

Pour une reconnaissance précise de vos intentions spécifiques, testez sur un appareil iOS fonctionnant sous iOS 14 ou plus tard. Après avoir installé votre application, ouvrez Settings > Siri & Rechercher > MyToDoApp et assurez-vous que les intentions sont assombries. Dites -Hey Siri, ajoutez du code d'écriture à ma liste de tâches dans MyToDoApp et vérifiez le résultat.

Questions communes et débogage

  • Intention non reconnue : Vérifier que l'extension d'intentions Info.plist inclut les noms de classe d'intention sous Intentions appuyées.
  • Données non partagées: Assurez-vous que les deux cibles appartiennent au même groupe d'application et que le chemin de stockage des données est correct.
  • Réponse non parlée: Utiliser des modèles de réponse qui incluent variables; Siri les lit à haute voix.
  • Paramètre manquant : Mettre en œuvre des méthodes de résolution pour gérer les entrées ambiguës.

Déploiement et considérations relatives à l'App Store

Lors de la soumission de votre application à l'App Store, vous devez déclarer la capacité Siri. Dans App Store Connect, ajoutez une note dans les notes de révision expliquant ce que vos intentions font et fournir des commandes de test. Apple va probablement tester avec un appareil réel, donc assurez-vous que tout fonctionne correctement.

Pour maximiser l'adoption par les utilisateurs, il faut tenir compte des pratiques exemplaires suivantes :

  • Utilisateurs embarqués:[ Afficher un tutoriel sur les commandes vocales disponibles lorsque l'application est lancée pour la première fois.
  • Shortcuts de support:[ Permet aux utilisateurs de créer des raccourcis vocaux personnalisés pour des tâches spécifiques (p. ex., -Hey Siri, ajouter des courses) via et .
  • Localiser vos intentions :[ Fournir des instructions et des modèles de réponse localisés pour différentes langues.
  • Return toujours une réponse significative — même si la tâche échoue — pour guider l'utilisateur.

Caractéristiques avancées et prochaines étapes

Une fois que la liste de base de la voix est en service, vous pouvez l'étendre avec :

  • La date de la langue naturelle parsing:[ Laissez les utilisateurs dire -Ajouter acheter du lait pour demain et définir automatiquement une date d'échéance en utilisant .
  • Ajouter des paramètres pour des catégories comme ou .
  • Intégration inter-applications:[Utilisez SiriKit=2]Workout, Media[, ou d'autres domaines si votre application s'étend au-delà des listes de tâches.
  • Vocabulaire personnalisé:[ Fournir une liste de vocabulaire pour former Siri à reconnaître des phrases spécifiques à l'application comme --ma liste d'épicerie - ou -- tâches de travail.

Conclusion

En définissant des objectifs personnalisés, en mettant en œuvre des gestionnaires dans une extension dédiée et en utilisant un data store partagé, vous pouvez créer une expérience mains libres sans couture. Les étapes décrites dans ce guide — de la configuration du projet à la soumission et au test — vous donnent une base solide. L'interaction vocale devient plus répandue, l'intégration de Siri à votre application le met en évidence dans l'App Store. Commencez à expérimenter avec SiriKit aujourd'hui et laissez vos utilisateurs gérer leurs tâches aussi facilement que par la parole.

Pour plus de détails, consultez le document officiel d'Apple SiriKit[ et le Guide des raccourcis[. Si vous êtes nouveau dans le développement d'iOS, consultez aussi Commencez à développer des applications iOS (Swift)[ pour les concepts fondamentaux.