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 — систему, що базувалася на Intents 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, який автоматично інтегрується з UI Shortcuts та голосовими запитами 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, який автоматично інтегрується з UI Shortcuts.

Чи може 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 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.

Обговорити проект

Читайте також