Intents Extension är en iOS-förlängning som gör det möjligt för tredjepartsappar att bearbeta Siris röstkommandon och interagera med systemtjänster via SiriKit. Appen definierar egna intents i Intents.intentdefinition, implementerar hanterare baserade på INIntentHandler och registrerar dem för igenkänning av röstfraser. Enligt Apple Developer Documentation (2025) stöder SiriKit över 20 intentdomäner — från meddelanden och betalningar till träning och bokningar, och från iOS 14 har stöd för anpassade intents via IntentsExtension lagts till.
Huvudpunkter
Intents Extension är en appförlängning som gör det möjligt för Siri, Shortcuts och andra systemtjänster att anropa appens funktionalitet via det standardiserade INIntentHandler-protokollet. När användaren säger „Hej Siri, skicka ett meddelande i Messenger X”, aktiverar Siri motsvarande förlängning, skickar förfrågans parametrar och tar emot resultatet för att uttala det.
Till skillnad från andra typer av förlängningar fungerar Intents Extension i bakgrunden utan synligt gränssnitt — Siri själv visar svaret med röst eller en textkarta. Förlängningen kan eventuellt tillhandahålla ett anpassat gränssnitt via INUIHostedViewProviding, som visas inuti Siri före kommandots utförande för bekräftelse.
Förlängningen har inte åtkomst till enhetens skärm och kan inte initiera åtgärder självständigt — endast som svar på en förfrågan från Siri eller Shortcuts. Detta säkerställer säkerheten: användaren har alltid kontroll över vilka åtgärder appen utför via röstkommandon.
SiriKit är Apples ramverk för integration med Siri, introducerat i iOS 10. Det definierar domäner — kategorier av åtgärder som Siri kan bearbeta: meddelanden, telefonsamtal, betalningar, listor, påminnelser, foton, träning, bokningar och andra. Varje domän har en fast uppsättning intents och svar.
INSendMessageIntent — skicka meddelanden. INStartWorkoutIntent — starta träning. INSearchForPhotosIntent — söka foton. INRequestRideIntent — beställa taxi. Varje domän definierar obligatoriska och valfria parametrar som Siri extraherar från röstförfrågan. Enligt Apple krävs ingen intentdefinition-fil för standarddomäner — det räcker att implementera motsvarande handler.
För appar som inte passar in i standarddomänerna har möjligheten till anpassade intents funnits sedan iOS 14. Appen definierar egna kommandotyper och deras parametrar via Intents.intentdefinition, och Siri lär sig att känna igen motsvarande fraser baserat på exempel som tillhandahålls av utvecklaren.
Intents Extension registreras via nyckeln IntentsSupported i Info.plist, där alla intentklasser som förlängningen bearbetar listas. Siri använder denna lista för att välja lämplig förlängning vid igenkänning av ett röstkommando. Om flera förlängningar stöder samma intent erbjuder Siri användaren ett val.
class MessageIntentHandler: NSObject,
INSendMessageIntentHandling {
func handle(
intent: INSendMessageIntent,
completion: @escaping
(INSendMessageIntentResponse) -> Void
) {
let response = INSendMessageIntentResponse(
code: .success, userActivity: nil)
completion(response)
}
}
INIntentHandler — protokollet som definierar metoder för att bearbeta varje steg i intentets arbete: upplösning av parametrar, bekräftelse och utförande. Förlängningen implementerar dessa metoder för varje typ av intent som den stöder.
resolve — kontroll och förtydligande av intentparametrar. Siri anropar denna metod för varje parameter. Om en parameter inte har angetts eller är felaktig returnerar förlängningen en begäran om förtydligande, och Siri ställer en ytterligare fråga till användaren. confirm — bekräftelse av avsikten. Förlängningen kontrollerar om den kan utföra intentet i det aktuella sammanhanget. handle — själva utförandet av operationen och returnering av resultatet.
Uppdelningen i tre steg är avgörande för röst-UX: om en parameter inte känns igen utför Siri inte åtgärden utan frågar igen. Till exempel, om användaren sa „Skicka ett meddelande till Alexei”, men det finns tre Alexei i kontakterna — förlängningen returnerar resolve med en begäran om förtydligande, och Siri frågar „Till vilken Alexei?”.
INIntentResponse — objektet som förlängningen returnerar i completion efter utförandet av intentet. Response innehåller resultatkoden (success, failure, requiresAuthentication, inProgress) och valfria data för Siri att uttala. Koden avgör hur Siri reagerar: success — röstbekräftelse, failure — felmeddelande, inProgress — indikation på en långvarig operation.
func resolve(
for intent: INSendMessageIntent,
with completion: @escaping
(INStringResolutionResult) -> Void
) {
if let text = intent.content, !text.isEmpty {
completion(.success(with: text))
} else {
completion(.needsValue())
}
}
Från och med iOS 14 har utvecklare fått möjlighet att definiera egna intents utanför SiriKits standarddomäner. Anpassade intents beskrivs i filen Intents.intentdefinition — detta är en visuell redigerare i Xcode där nya kommandotyper med parametrar och svar skapas.
Varje anpassat intent består av INIntent (definition av förfrågan) och INIntentResponse (definition av svar). INIntent innehåller parametrar med datatyp — String, Integer, CurrencyAmount, hittade objekt och andra. INIntentResponse innehåller egenskaper för att returnera resultatet och en array med svarskoder. Xcode genererar automatiskt Swift-klasser baserat på denna definition.
Apple rekommenderar att ett anpassat intent inte har fler än 5 parametrar — ett överdrivet antal försämrar röstigenkänningen och komplicerar användarupplevelsen. För varje parameter är det lämpligt att tillhandahålla exempelfraser i Assistant Dialog så att Siri lär sig att känna igen dem korrekt.
I Intents.intentdefinition kan man för varje intent ange exempelmeningar — fraser som användaren kommer att säga till Siri för att aktivera intentet. Exempel: „Beställ kaffe i MinApp”, „Be MinApp att hitta ett pizzarecept”. Siri använder dessa fraser för att lära sig igenkänning och erbjuder dem till användaren vid konfigurering av Shortcuts.
// Intents.intentdefinition (visuell redigerare)
Intent: OrderCoffeeIntent
Parameters:
- beverage (String)
- size (String)
- quantity (Integer)
Response:
- orderNumber (String)
- price (CurrencyAmount)
Phrases:
- "Order coffee in MyApp"
- "Get a latte from MyApp"
INUIHostedViewProviding — protokollet som gör det möjligt för Intents Extension att visa ett anpassat gränssnitt inuti Siri före kommandots utförande. Till exempel vid beställning av taxi kan förlängningen visa en karta med rutten och kostnaden, och användaren bekräftar åtgärden genom att trycka.
Protokollet definierar metoden configure(with:for:completion:), där förlängningen tar emot intentet och returnerar en UIViewController som bäddas in i Siri. Styrenhetens storlek är begränsad — maximal höjd 200 punkter. Användning av kompakta kort med nyckelinformation rekommenderas: belopp, tid, adress.
Det anpassade gränssnittet är valfritt — om förlängningen inte implementerar INUIHostedViewProviding visar Siri ett standardkort med intenttypen och appen. För de flesta intents räcker standardgränssnittet, och Apple rekommenderar att lägga till anpassat gränssnitt endast när det verkligen förbättrar förståelsen — till exempel för att visa en rutt eller bekräfta en betalning.
För intents relaterade till ekonomi eller personuppgifter krävs autentisering. INIntentResponse stöder koden requiresAuthentication, som tvingar Siri att begära Face ID eller Touch ID före utförande. Efter autentisering får förlängningen bekräftelse via ett separat handle-anrop, där autentiseringsstatusen kontrolleras.
Apple betonar särskilt: Intents Extension ska inte begära eget lösenord eller biometri — systemautentisering används. Lagring av åtkomsttoken i Keychain med delad åtkomst mellan appen och förlängningen är standardpraxis för långlivade sessioner.
class IntentViewController: UIViewController {
func configure(
with intent: INIntent,
completion: @escaping
(UIViewController?) -> Void
) {
let cardView = ConfirmationCardView()
let hostingController =
UIHostingController(rootView: cardView)
completion(hostingController)
}
}
Vanliga frågor
Ja, förlängningen kan bearbeta intents från Shortcuts-appen utan röstinmatning. Användaren skapar en genväg från de föreslagna åtgärderna, och förlängningen utför den utan Siris medverkan.
Anpassade intents är tillgängliga från iOS 14 och nyare. För iOS 10–13 är endast standarddomäner i SiriKit tillgängliga. Anpassade intents kräver Intents.intentdefinition och generering av Swift-klasser.
Siri väntar på svar från förlängningen i cirka 15 sekunder. Vid överskridande av gränsen meddelar Siri användaren att åtgärden misslyckades. För långvariga operationer, använd svarskoden inProgress.
Använd Keychain med delad åtkomst via en access group mellan huvudappen och förlängningen. App Group shared UserDefaults är ett alternativ men är sämre än Keychain när det gäller säkerhet.
Intents Extension bearbetar logiken — resolve, confirm, handle. Intents UI Extension tillhandahåller ett anpassat gränssnitt för visning inuti Siri via INUIHostedViewProviding. Båda kan fungera tillsammans.
Sammanfattning
Vi utvecklar en mobil applikation nyckelfärdigt
IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.
Läs också