Table of Contents
Een spraak-geactiveerde To-Do-List-app bouwen in iOS met Siri-integratie
Voice control is uitgegroeid tot een belangrijke verwachting in moderne productiviteitsapps. Door gebruikers in staat te stellen taken hands-free te beheren, kunnen iOS-ontwikkelaars een aanzienlijk toegankelijker en efficiëntere to-do lijst ervaring te creëren. Siri, Apple . intelligent voice assistant, biedt een robuust kader voor het integreren van spraak commando's direct in uw app. Deze gids loopt u door elke stap van het bouwen van een voice-enabled to-do lijst app, van de initiële project setup tot geavanceerde intent handling en implementatie beste praktijken. Of u nu een doorgewinterde iOS-ontwikkelaar of nieuw in SiriKit, de technieken die hier worden beschreven zal u helpen toevoegen krachtige, natuurlijke taal spraak interacties aan uw app.
SiriKit en zijn rol in taakbeheer begrijpen
SiriKit is een kader dat uw app in staat stelt om zijn functionaliteit uit te breiden naar Siri. In plaats van een aparte spraakinterface te bouwen, definieert u de acties die gebruikers kunnen uitvoeren via spraakopdrachten, en Siri behandelt spraakherkenning en natuurlijke taalverwerking. Voor een to-do lijst app, SiriKit maakt acties mogelijk zoals het toevoegen van een taak, het verwijderen van een taak, het tonen van huidige taken, of zelfs het markeren van een taak als voltooid.
Het kader gebruikt intents .. objecten die gebruikersacties vertegenwoordigen. Uw app definieert aangepaste intenties voor de specifieke operaties die het ondersteunt. Wanneer een gebruiker een commando spreekt zoals
De belangrijkste voordelen van het gebruik van SiriKit zijn:
- Hands-free operation: Gebruikers kunnen taken beheren tijdens het rijden, koken of sporten.
- Verbeterde toegankelijkheid: Voice control helpt gebruikers met motorische of visuele stoornissen.
- Consistentie met systeemsteminteracties: Uw app voelt als een eersteklas iOS-burger.
- Korte integratie: Gebruikers kunnen aangepaste Siri-snelkoppelingen maken voor veelgebruikte acties.
SiriKit vs. Andere spraakoplossingen
U kunt zich afvragen of SiriKit, aangepaste spraakherkenning (via het Speech framework) of een service van derden zoals Google Speech-to-Text. SiriKit is de aanbevolen aanpak voor integratie met het systeem te gebruiken omdat het geen aparte audio-opname UI, geen spraakherkenning setup, en het werkt op Apple-apparaten. Het Speech framework is beter geschikt voor apps die willekeurige audiostreams moeten verwerken (bijv. transcriptie). Voor een to-do lijst app waar u alleen een vaste set commando's nodig hebt, SiriKit is de duidelijke winnaar.
Uw project voor Siri-integratie instellen
Het aanmaken van een spraakgestuurde app begint met de standaard Xcode projectconfiguratie. U moet ook de Siri-functie inschakelen en een Intents-extensie toevoegen om verzoeken te behandelen, zelfs als de app niet draait.
Stap 1: Maak een nieuw Xcode project aan
Start Xcode en maak een nieuw project aan met behulp van het App sjabloon (iOS). Geef uw project een naam, zoals VoiceTodo, en zorg ervoor dat SwiftUI of UIKit geselecteerd wordt op basis van uw voorkeur. Sla het project op.
Stap 2: Schakel de Siri-capaciteit in
In uw app targets Signing & Capabilities tab, klik op de knop + Capability en zoek naar Siri[. Voeg de mogelijkheid toe en zorg ervoor dat het selectievakje aangevinkt is. Deze stap is verplicht; zonder deze stap zal Siri uw bedoelingen niet herkennen.
Stap 3: Voeg een Intents Extension toe
Om Siri in staat te stellen om bedoelingen te verwerken, zelfs wanneer uw app op de achtergrond staat of niet gestart is, moet u een Intents Extension.Ga naar Bestand > Nieuw > Doel[, select Intents Extension] onder de sectie .Application Extension, en noem het (bijv., ]]VoiceTodoIntents[[FLT:]]). Xcode zal een apart doel creëren met zijn eigen Info.plist en een bestand. In de extensions Info.plist, controleer of de [[FLT:]]IntentsSupported[[]] array aanwezig is en bevat de namen van uw eigen intenties (die we vervolgens zullen definiëren).
Stap 4: Maak een Intents Definition File aan
In uw hoofddoel van de app, maak een nieuw bestand met behulp van de Intents Definition sjabloon (gevonden onder Resource Sjablonen). Noem het TodoIntents.inttDefinition[]. Dit bestand is waar u uw eigen intenties definieert. Het wordt automatisch gedeeld met uw Intents Extension target als u het correct configureert.
Om ervoor te zorgen dat het definition bestand beschikbaar is voor beide doelen, selecteert u het TodoIntents.intentdefinition bestand in de projectnavigator en voegt u in de File Inspector zowel uw hoofdapp als de Intents Extension toe aan de Target Membership[] lijst. Deze stap wordt vaak over het hoofd gezien maar is van cruciaal belang voor het genereren van de nodige Swift klassen.
Aangepaste intents voor taken definiëren
Met het Intents Definition bestand klaar, kunt u nu de specifieke intenties die uw stem commando's zal voeden. Voor een basis to-do lijst app, u wilt minstens drie bedoelingen: AddTaskIntent, VerwijderTaskIntent, en ShowTasksIntent.
De AddTaskIntent aanmaken
- Open TodoIntents.intentdefinition. Klik op + linksonder in het doek en selecteer Nieuwe Intent.
- Noem de intentie .
- Voeg onder parameters een nieuwe parameter toe met de naam van het type String. Voeg eventueel een parameter toe als uw app meerdere lijsten ondersteunt.
- Stel de parameter in Afspelennaam (bijv., .Task Name
- In de Respons sectie kiest u Succes en definieert u een respons template zoals
- Zorg ervoor dat Aangepaste klasse wordt gecontroleerd en de klassenaam is.
De VerwijderTaskIntent aanmaken
Herhaal het proces voor een parameter met een parameter. Het antwoord kan
De ShowTasksintent aanmaken
Voor heb je misschien geen parameters nodig. In plaats daarvan vertrouw je op het antwoord dat een lijst van taken bevat. Voeg in de reactiesectie een Content eigenschap van het type String. Gebruik een respons template zoals
Genereren van intentklassen
Na het definiëren van alle intenties, bouwt u uw project. Xcode zal automatisch Swift-klassen genereren voor elke intentie en de respons ervan. Deze klassen leven in de DerivedData map, maar zijn zichtbaar in de editor. U zult ze gebruiken in uw handler code.
Intent Handling implementeren in uw App en Extension
Nu de intenties zijn gedefinieerd, moet je de code schrijven die ze behandelt wanneer Siri je app aanroept.
Intents verwerken in de Intents Extension
De Intents Extension target bevat een standaard bestand. Open het en vervang de inhoud door een klasse die voldoet aan de gegenereerde intent handling protocollen. Elke intentie zal zijn eigen handler methode.
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)
}
}
Gedeelde gegevensopslag
De code hierboven verwijst naar een hypothetische . Omdat de Intents Extension draait in een afzonderlijk proces, kunt u geen directe toegang tot uw app . U moet een gedeelde container (App Group) gebruiken om taken op te slaan op een gemeenschappelijke locatie zoals een gedeelde Gebruikersdefaults[] suite of een Core Data store die in de app groep directory woont. Stel een App Group-functie in zowel uw belangrijkste app als de Intents Extension in, en gebruik dezelfde identificatiecode om taken voort te zetten.
Intents verwerken in de hoofdapp
Wanneer uw app het meest frontaal is en de gebruiker een Siri-sneltoets activeert, kunt u ook de intenties direct in de hoofdapp (zonder de extensie) verwerken. U kunt uw app-delegatie of scènedelegatie conformeren aan dezelfde intent-protocollen. Echter, voor de meeste gebruiks gevallen is de extensie voldoende omdat het werkt ongeacht of de app op de voorgrond staat.
Uitbreiding van functionaliteit: bevestiging, ongedaan maken en parameters
Basis intent handling is slechts het begin. Om uw voice-enabled to-do lijst robuust te maken, voeg ondersteuning voor bevestigingsdialogen en parameter resolutie.
Resolutiemethoden
Voor elke parameter kunt u een methode implementeren die de bevestiging of verduidelijking vraagt. Bijvoorbeeld, als de gebruiker zegt .Add eitjes .. zonder vermelding van welke lijst, kan uw methode vragen: .What list wil je eieren toevoegen aan??Als u slechts een lijst, automatisch oplossen aan die lijst.
Bevestigingsantwoorden
U kunt Siri de gebruiker laten vragen om een actie te bevestigen voordat u deze uitvoert. Dit is handig voor destructieve bewerkingen zoals het verwijderen van taken. In uw intent response klasse, voeg een bevestiging responstype toe. Bij het verwerken van de intentie kunt u een bevestigingsantwoord teruggeven dat de details bevat. Siri zal de gebruiker dan vragen om te bevestigen, en indien bevestigd, zal uw methode opnieuw worden aangeroepen met een vlag.
URL-handling voor diepe koppeling
Na het uitvoeren van een actie, kunt u uw app openen om de bijgewerkte lijst te tonen. Uw intent handler kan bellen indien beschikbaar, of uw belangrijkste app kan reageren op URL-schema's. Voeg een eigenschap toe aan uw intentiedefinitie om automatisch diepe koppeling mogelijk te maken.
Uw stem-geactiveerde app testen
Het testen van Siri integratie vereist enige installatie omdat gesproken commando's niet direct kunnen worden gesimuleerd. Gebruik de volgende benaderingen:
De Siri-simulator gebruiken in Xcode
Start je hoofdapp op een simulator en stop vervolgens de app. Voer vervolgens het doel Intents Extension uit met behulp van een schema dat is ingesteld voor de simulator. Xcode zal een gesimuleerde Siri-interface starten waar je je commando kunt typen. Dit is de snelste manier om te testen zonder een fysiek apparaat.
Testen met een Real Device
Voor een nauwkeurige herkenning van uw specifieke intenties, test op een echt iOS-apparaat dat iOS 14 of hoger draait. Na het installeren van uw app, open Instellingen > Siri & Search > MyToDoApp en zorg ervoor dat de intenties worden aangeschakeld. Zeg .Hey Siri, voeg schrijf code aan mijn to-do lijst in MyToDoApp en verifieer het resultaat.
Gemeenschappelijke problemen en debuggen
- Intent niet herkend: Controleer of de Intents Extension.Info.plist de intent class namen bevat onder IntentsOndersteund.
- Gegevens niet gedeeld: Zorg ervoor dat beide doelen tot dezelfde App Group behoren en dat het pad van de gegevensopslag correct is.
- Respons niet gesproken: Gebruik responssjablonen die variabelen bevatten ; Siri leest ze hardop.
- Parameter ontbreekt: Verbeter de resolutiemethoden om dubbelzinnige input te verwerken.
Overwegingen betreffende de implementatie en de App Store
Bij het indienen van uw app in de App Store, moet u de Siri-functie aangeven. In App Store Connect, voeg een notitie in de beoordelingsnotities toe waarin wordt uitgelegd wat uw intenties doen en testcommando's worden geleverd. Apple zal waarschijnlijk testen met een echt apparaat, dus zorg ervoor dat alles correct werkt.
Om de goedkeuring van gebruikers te maximaliseren, moet u de volgende beste praktijken overwegen:
- Onboard-gebruikers: Laat een korte tutorial zien over beschikbare spraakopdrachten wanneer de app voor het eerst wordt gestart.
- Ondersteuning Sneltoetsen: Gebruikers toestaan aangepaste vocale sneltoetsen te maken voor specifieke taken (bv. .Hey Siri, voeg boodschappen toe] via en .
- Lokaliseer je intenties:] Geef gelokaliseerde prompts en respons templates voor verschillende talen.
- Maak fouten gracieus: Geef altijd een zinvol antwoord terug . Zelfs als de taak mislukt om de gebruiker te begeleiden.
Geavanceerde functies en volgende stappen
Zodra u de basis voice-enabled to-do lijst werkt, kunt u uitbreiden met:
- Natuurlijke taaldatum in parsing: Laat gebruikers zeggen
- Groeps- en tagondersteuning: Voeg parameters toe voor categorieën als of .
- Inter-app integratie: Gebruik SiriKit
- Aangepaste woordenschat: Geef een woordenschatplist om Siri te trainen om app-specifieke zinnen te herkennen zoals ..mijn boodschappenlijstje .. of ..werktaken.
Conclusie
Het bouwen van een voice-enabled to-do lijst app met Siri integratie is een praktische manier om de productiviteit en toegankelijkheid van de gebruiker te verbeteren. Door het definiëren van aangepaste intenties, het implementeren van handlers in een speciale extensie, en het gebruik van een gedeelde gegevensopslag, kunt u een naadloze hands-free ervaring te creëren. De stappen die in deze gids . .van project setup tot testen en indienen . geven u een solide basis. Als spraak interactie wordt meer voorkomende, zal het toevoegen van Siri integratie in uw app apart in de App Store. Begin met experimenteren met SiriKit vandaag en laat uw gebruikers beheren hun taken zo gemakkelijk als spreken.
Voor meer details, zie de officiële Apple-gids SiriKitdocumentatie en de Shortcuts-gids. Als je nieuw bent in iOS-ontwikkeling, bekijk dan ook Begin met het ontwikkelen van iOS-apps (zwift) voor basisconcepten.[