AppIntent: шта је, модел Siri интената и Swift

Аутор: IT Sectr Објављено: 2026-06-16 Време читања: 8 мин

AppIntent — Apple оквир, представљен у iOS 16 као замена за застарели Intents framework, који пружа декларативни API за интеграцију апликација са Siri, Shortcuts и Spotlight. За разлику од старог приступа, који је захтевао посебан Intent Definition File и генерисање ObjC кода, AppIntent користи чисти Swift са протоколима AppIntent и AppEnum. Према Apple Developer Documentation, 2026, AppIntent смањује обим кода за креирање једног интента у просеку за 60% у поређењу са Intents framework, а време интеграције Siri команди се смањује са неколико дана на неколико сати.

Главно

  • AppIntent — декларативни Apple оквир за креирање Siri, Shortcuts и Spotlight интената почев од iOS 16.
  • Протокол AppIntent — основни градивни блок: назив, опис, параметри и метода perform() одређују логику команде.
  • AppEntity — протокол за описивање ентитета са којима раде интенти: пројекти, задаци, контакти, датотеке.
  • AppEnum — декларативно набрајање параметара, које аутоматски генерише UI за избор у Shortcuts.
  • Асинхроност — интенти подржавају async/await, траке напретка и IntentDialog за дијалог са корисником.

Шта је AppIntent и чему служи?

AppIntent — Apple оквир за декларативно описивање команди које ваша апликација може да изврши на захтев Siri, Shortcuts, Spotlight, Control Center и Action Button. У основи је протокол AppIntent у којем развојач описује назив интента, његове параметре и методу perform() — логику која се извршава. Оквир аутоматски генерише кориснички интерфејс за конфигурисање параметара у апликацији Shortcuts и гласовне фразе за Siri.

Пре AppIntent-а, развојачи су користили Intents framework — систем заснован на Intent Definition File-у, који је генерисао Objective-C код и захтевао конфигурисање посебног Intents Extension-а. Овај процес је био компликован: чак једноставан интент је захтевао до 5 конфигурационих датотека. AppIntent елиминише ову сложеност — интент се описује у једној Swift датоци, а систем аутоматски генерише све потребно за интеграцију са Siri и Shortcuts.

Према WWDC 2024 Session „Dive deeper into App Intents“, Apple види AppIntent као централни механизам за проширење функционалности апликација изван традиционалног UI-ја. До изласка iOS 18, више од 70% апликација из топ 100 App Store већ користе AppIntent за интеграцију са Shortcuts и Siri, а просечан корисник iOS 18 покреће 4–6 интената дневно путем гласовних команди или виџета.

Где се користе AppIntent

  • Siri — гласовне команде: „Hey Siri, додај задатак у MyApp“
  • Shortcuts — аутоматизација у апликацији Пречице са подешавањем параметара
  • Spotlight — претрага и извршавање команди директно из претражне линије
  • Control Center — дугмићи за брза акција на iOS 18+
  • Action Button — подешавање акције за дугме iPhone 15 Pro и новије

AppIntent vs Intents framework: кључне разлике

Intents framework (iOS 10–15) је захтевао креирање .intentdefinition датотеке, генерисање ObjC/Swift класа путем Xcode-а, конфигурисање Intents Extension-а и App Intent Configuration. AppIntent (iOS 16+) потпуно замењује овај проток чистим Swift кодом без генерације, екстензија и додатних конфигурација. То чини процес креирања интената доступним за обичног iOS развојача без потребе за учење SiriKit-а.

Кључна предност AppIntent-а је декларативност. Развојач описује шта интент ради, а не како се интегрише са системом. Оквир сам обрађује Siri дијалошке сценарије, приказ параметара у Shortcuts-у и преношење контекста између интената. У старом Intents framework-у, сваки аспект интеграције морао је бити ручно кодиран, укључујући INUIHostedView за приказ UI интента.

Поређење приступа

КарактеристикаIntents frameworkAppIntent
Обим кода100–300 линија по интенту30–60 линија
Потребне датотеке.intentdefinition, Extension, Config1 Swift датотека
Генерисање кодаОбавезно (Xcode -> ObjC)Није потребно
АсинхроностСамо completion handlerasync/await + напредак
IntentDialogНеУграђени Siri дијалози

Основни протоколи: AppIntent, AppEntity, AppEnum

AppIntent — централни протокол који дефинише интент. Садржи title (назив за Siri), description (опис у Shortcuts), параметре (путем @Parameter) и методу perform() која враћа IntentResult. Резултат може бити IntentDialog (дијалог са Siri), вредност за враћање у Shortcuts или грешка. Сваки интент може такође да пружи suggestedInvocationPhrase — фразу за гласовни позив.

AppEntity описује ентитете са којима раде интенти. На примјер, ако апликација управља пројектима, AppEntity Project садржи id, displayRepresentation (како приказати ентитет у UI-ју) и defaultQuery (како претраживати ентитете). AppEnum — набрајање за параметре избора које аутоматски генерише UI са picker елементом у Shortcuts-у. Уместо ручног креирања листе параметара, довољно је декларисати enum који испуњава AppEnum.

Примјер AppEnum и параметра

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

Параметри интената и њихова валидација

Параметри AppIntent-а се декларишу путем property wrapper @Parameter, који се аутоматски интегрише са Shortcuts UI-јем и Siri гласовним упитима. Сваки параметар има title (приказан у Shortcuts) и може да садржи опис, подразумеване вредности, ограничења. AppIntent подржава стандардне типове: String, Int, Double, Bool, као и прилагођене типове кроз AppEntity и AppEnum.

Валидација параметара се обавља у методи perform() пре извршавања логике. Ако су параметри неисправни, интент враћа грешку путем IntentError. За сложену валидацију може се имплементирати метода validate(), која се позива пре perform() и може да пружи повратну информацију кориснику кроз IntentDialog још пре извршавања команде. Ово је посебно корисно у Siri гласовним сценаријима, где је лакше поново питати корисника него извршити неисправну команду.

Параметри са валидацијом

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

Креирање интента у Swift-у: примјер

Пун примјер интента за претрагу белешки у апликацији приказује рад са AppEntity и EntityQuery. Интент SearchNotesIntent прима низ за претрагу и враћа листу пронађених белешки. AppEntity Note описује структуру белешке, а EntityQuery имплементира претрагу у складишту. Резултат се враћа кроз IntentResult са низом ентитета, који Shortcuts приказује кориснику.

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

Интеграција са Shortcuts и Siri

Након декларисања AppIntent-а, интеграција са Shortcuts и Siri се дешава аутоматски. Апликација Shortcuts скенира све AppIntent-е из инсталираних апликација и приказује их у листи доступних акција. Корисник може да дода интент у своју команду, конфигурише његове параметре и комбинује га са другим акцијама. За Siri, интенти се појављују као гласовне команде без додатне конфигурације од стране развојача.

Развојач може да побољша интеграцију додавањем suggestedInvocationPhrase — препоручене фразе за гласовни позив. На примјер, за интент додавања задатка: suggestedInvocationPhrase = "Add new task". Siri анализира ову фразу и предлаже је кориснику при учењу гласовних команди. Такође се може навести categories — категорију интента (create, view, search, edit), која помаже Shortcuts-у да групише акције по значењу.

Категорије интената за Shortcuts

КатегоријаПримјерПонашање у Shortcuts
.createCreateTaskIntentГрупише се са другим акцијама креирања
.viewViewWeatherIntentПриказује се у категорији „Преглед“
.searchSearchNotesIntentОзначава се као акција претраге
.editUpdateTaskIntentГрупише се са акцијама уређивања

Често постављана питања

Да ли је потребно креирати посебан Intents Extension за AppIntent?

Не. AppIntent не захтева посебан Intents Extension. Интенти се компилирају директно у главну апликацију, што поједностављује архитектуру и елиминише потребу за међупроцесном комуникацијом.

Да ли AppIntent ради на старијим верзијама iOS?

AppIntent је доступан на iOS 16+, iPadOS 16+, macOS 13+, watchOS 9+. За iOS 15 и старије потребно је користити Intents framework. Препоручује се подршка оба API-ја за широку покривеност уређаја.

Које типове података се могу вратити из интента?

IntentsResult подржава String, Int, Double, Bool, низове AppEntity, IntentDialog и прилагођене типове. Сложене структуре података се враћају кроз EntityQuery, који се аутоматски интегрише са Shortcuts UI-јем.

Може ли AppIntent да се извршава на серверу?

Да, путем AppIntentsPackage — пакета који омогућава извршавање интената на серверској страни. Ово је корисно за апликације са серверском логиком где интенти морају имати приступ подацима који нису доступни локално.

Како отклонити AppIntent без физичког уређаја?

Користите симулатор iOS 16+ са апликацијом Shortcuts. Додајте интент у команду Shortcuts на симулатору и покрените је. За Siri сценарије потребан је физички уређај, јер симулатор не подржава гласовни улаз.

Закључак

  • AppIntent — декларативни Apple оквир за креирање Siri, Shortcuts и Spotlight интената, представљен у iOS 16 као замена Intents framework.
  • Протокол AppIntent описује команду: title, параметре (@Parameter) и методу perform() са async/await, која враћа IntentResult.
  • AppEntity и AppEnum — протоколи за декларативно описивање ентитета и набрајања, који аутоматски генеришу UI у Shortcuts.
  • Валидација параметара кроз методу validate() омогућава провјеру података пре извршавања интента и враћање Siri дијалога.
  • Интеграција са Shortcuts и Siri се дешава аутоматски након декларисања интента; suggestedInvocationPhrase побољшава гласовну препознатливост.
  • AppIntentsPackage омогућава извршавање интената на серверу ради приступа удаљеним подацима и логици.

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође