AppIntent: vad är det, modell för Siri-intents och Swift

Författare: IT Sectr Publicerad: 2026-06-16 Lästid: 8 min

AppIntent — Apple-ramverk, introducerat i iOS 16 som ersättning för det föråldrade Intents framework, som tillhandahåller ett deklarativt API för integration av appar med Siri, Shortcuts och Spotlight. Till skillnad från det gamla tillvägagångssättet, som krävde en separat Intent Definition File och generering av ObjC-kod, använder AppIntent ren Swift med protokollen AppIntent och AppEnum. Enligt Apple Developer Documentation, 2026, AppIntent minskar mängden kod för att skapa ett intent med i genomsnitt 60% jämfört med Intents framework, och integrationstiden för Siri-kommandon minskar från flera dagar till flera timmar.

Huvudpunkter

  • AppIntent — deklarativt Apple-ramverk för att skapa Siri-, Shortcuts- och Spotlight-intents från och med iOS 16.
  • Protokollet AppIntent — grundläggande byggsten: namn, beskrivning, parametrar och metoden perform() bestämmer kommandots logik.
  • AppEntity — protokoll för att beskriva entiteter som intents arbetar med: projekt, uppgifter, kontakter, filer.
  • AppEnum — deklarativ uppräkning av parametrar, som automatiskt genererar UI för val i Shortcuts.
  • Asynkronicitet — intents stöder async/await, förloppsindikatorer och IntentDialog för dialoger med användaren.

Vad är AppIntent och vad används det till?

AppIntent — Apple-ramverk för deklarativ beskrivning av kommandon som din app kan utföra på begäran av Siri, Shortcuts, Spotlight, Control Center och Action Button. I grunden ligger protokollet AppIntent, där utvecklaren beskriver intentets namn, dess parametrar och metoden perform() — den logik som utförs. Ramverket genererar automatiskt användargränssnittet för att konfigurera parametrar i Shortcuts-appen och röstfraser för Siri.

Innan AppIntent kom använde utvecklare Intents framework — ett system baserat på Intent Definition File, som genererade Objective-C-kod och krävde konfiguration av en separat Intents Extension. Denna process var krånglig: även ett enkelt intent krävde upp till 5 konfigurationsfiler. AppIntent eliminerar denna komplexitet — intentet beskrivs i en Swift-fil och systemet genererar automatiskt allt som behövs för integration med Siri och Shortcuts.

Enligt WWDC 2024 Session “Dive deeper into App Intents”, ser Apple AppIntent som den centrala mekanismen för att utöka appars funktionalitet bortom traditionellt UI. Vid tiden för iOS 18-släppet använder över 70% av apparna i top 100 på App Store redan AppIntent för integration med Shortcuts och Siri, och den genomsnittliga iOS 18-användaren startar 4–6 intents per dag via röstkommandon eller widgetar.

Var används AppIntent

  • Siri — röstkommandon: “Hey Siri, lägg till uppgift i MyApp”
  • Shortcuts — automatisering i appen Genvägar med parameterkonfiguration
  • Spotlight — sökning och exekvering av kommandon direkt från sökfältet
  • Control Center — knappar för snabbåtgärder på iOS 18+
  • Action Button — konfiguration av åtgärd för knappen på iPhone 15 Pro och nyare

AppIntent vs Intents framework: viktiga skillnader

Intents framework (iOS 10–15) krävde skapande av .intentdefinition-fil, generering av ObjC/Swift-klasser via Xcode, konfiguration av Intents Extension och App Intent Configuration. AppIntent (iOS 16+) ersätter helt denna pipeline med ren Swift-kod utan generering, tillägg och extra konfigurationer. Detta gör processen att skapa intents tillgänglig för den genomsnittliga iOS-utvecklaren utan att behöva lära sig SiriKit.

Den största fördelen med AppIntent är dess deklarativa natur. Utvecklaren beskriver vad intentet gör, inte hur det integreras med systemet. Ramverket hanterar själv Siri-dialogscenarier, visning av parametrar i Shortcuts och överföring av kontext mellan intents. I det gamla Intents framework måste varje aspekt av integration kodas manuellt, inklusive INUIHostedView för att visa intentets UI.

Jämförelse av tillvägagångssätt

EgenskapIntents frameworkAppIntent
Kodmängd100–300 rader per intent30–60 rader
Nödvändiga filer.intentdefinition, Extension, Config1 Swift-fil
KodgenereringObligatorisk (Xcode -> ObjC)Krävs inte
AsynkronicitetEndast completion handlerasync/await + förlopp
IntentDialogNejInbyggda Siri-dialoger

Huvudprotokoll: AppIntent, AppEntity, AppEnum

AppIntent — det centrala protokollet som definierar intentet. Det innehåller title (namn för Siri), description (beskrivning i Shortcuts), parametrar (via @Parameter) och metoden perform() som returnerar IntentResult. Resultatet kan vara IntentDialog (dialog med Siri), ett värde att returnera till Shortcuts eller ett fel. Varje intent kan också tillhandahålla suggestedInvocationPhrase — en fras för röstandrop.

AppEntity beskriver entiteter som intents arbetar med. Till exempel, om appen hanterar projekt, innehåller AppEntity Project id, displayRepresentation (hur entiteten visas i UI) och defaultQuery (hur entiteter söks). AppEnum — uppräkning för valparametrar som automatiskt genererar UI med ett picker-element i Shortcuts. Istället för att manuellt skapa en parameterlista räcker det att deklarera en enum som följer AppEnum.

Exempel på AppEnum och parameter

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")
    }
}

Intentparametrar och deras validering

Parametrar för AppIntent deklareras via property wrapper @Parameter, som automatiskt integreras med Shortcuts UI och Siri-röstförfrågningar. Varje parameter har en title (visas i Shortcuts) och kan innehålla beskrivning, standardvärden, begränsningar. AppIntent stöder standardtyper: String, Int, Double, Bool, samt anpassade typer via AppEntity och AppEnum.

Validering av parametrar utförs i metoden perform() innan logiken exekveras. Om parametrar är felaktiga returnerar intentet ett fel via IntentError. För komplex validering kan metoden validate() implementeras, som anropas före perform() och kan ge feedback till användaren via IntentDialog även innan kommandot utförs. Detta är särskilt användbart i Siri-röstscenarier, där det är lättare att fråga användaren igen än att utföra ett felaktigt kommando.

Parametrar med validering

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!")
    }
}

Skapa ett intent i Swift: exempel

Ett komplett exempel på ett intent för att söka anteckningar i en app demonstrerar arbete med AppEntity och EntityQuery. Intentet SearchNotesIntent tar emot en söksträng och returnerar en lista med hittade anteckningar. AppEntity Note beskriver anteckningens struktur och EntityQuery implementerar sökningen i lagret. Resultatet returneras via IntentResult med en array av entiteter, som Shortcuts visar för användaren.

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)
    }
}

Integration med Shortcuts och Siri

Efter deklaration av AppIntent sker integration med Shortcuts och Siri automatiskt. Shortcuts-appen skannar alla AppIntent från installerade appar och visar dem i listan över tillgängliga åtgärder. Användaren kan lägga till intentet i sitt kommando, konfigurera dess parametrar och kombinera med andra åtgärder. För Siri visas intents som röstkommandon utan ytterligare konfiguration från utvecklaren.

Utvecklaren kan förbättra integrationen genom att lägga till suggestedInvocationPhrase — en rekommenderad fras för röstandrop. Till exempel, för ett intent att lägga till en uppgift: suggestedInvocationPhrase = "Add new task". Siri analyserar denna fras och föreslår den för användaren vid inlärning av röstkommandon. Man kan också ange categories — intentets kategori (create, view, search, edit), som hjälper Shortcuts att gruppera åtgärder efter betydelse.

Kategorier av intents för Shortcuts

KategoriExempelBeteende i Shortcuts
.createCreateTaskIntentGrupperas med andra skapandeåtgärder
.viewViewWeatherIntentVisas i kategorin “Visa”
.searchSearchNotesIntentMarkeras som sökåtgärd
.editUpdateTaskIntentGrupperas med redigeringsåtgärder

Vanliga frågor

Behövs en separat Intents Extension för AppIntent?

Nej. AppIntent kräver ingen separat Intents Extension. Intents kompileras direkt i huvudappen, vilket förenklar arkitekturen och eliminerar behovet av interprocesskommunikation.

Fungerar AppIntent på äldre versioner av iOS?

AppIntent är tillgängligt på iOS 16+, iPadOS 16+, macOS 13+, watchOS 9+. För iOS 15 och äldre måste Intents framework användas. Det rekommenderas att stödja båda API:erna för bred enhetstäckning.

Vilka datatyper kan returneras från ett intent?

IntentsResult stöder String, Int, Double, Bool, arrayer av AppEntity, IntentDialog och anpassade typer. Komplexa datastrukturer returneras via EntityQuery, som automatiskt integreras med Shortcuts UI.

Kan AppIntent köras på en server?

Ja, via AppIntentsPackage — ett paket som möjliggör körning av intents på serversidan. Detta är användbart för appar med serverlogik där intents behöver åtkomst till data som inte är tillgänglig lokalt.

Hur felsöker man AppIntent utan fysisk enhet?

Använd iOS 16+-simulatorn med Shortcuts-appen. Lägg till intentet i ett Shortcuts-kommando på simulatorn och kör det. För Siri-scenarier krävs en fysisk enhet eftersom simulatorn inte stöder röstinmatning.

Sammanfattning

  • AppIntent — deklarativt Apple-ramverk för att skapa Siri-, Shortcuts- och Spotlight-intents, introducerat i iOS 16 som ersättning för Intents framework.
  • Protokollet AppIntent beskriver kommandot: title, parametrar (@Parameter) och metoden perform() med async/await, som returnerar IntentResult.
  • AppEntity och AppEnum — protokoll för deklarativ beskrivning av entiteter och uppräkningar, som automatiskt genererar UI i Shortcuts.
  • Validering av parametrar via metoden validate() möjliggör kontroll av data innan intentet körs och returnering av Siri-dialoger.
  • Integration med Shortcuts och Siri sker automatiskt efter deklaration av intentet; suggestedInvocationPhrase förbättrar röstigenkänning.
  • AppIntentsPackage möjliggör körning av intents på server för åtkomst till fjärrdata och logik.

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.

Diskutera projektet

Läs också