Ви створили мобільний застосунок, і користувачі хочуть автоматизувати сценарії через Shortcuts. Без інтеграції з Shortcuts через App Intents їхні можливості обмежені — доводиться вручну відкривати застосунок для кожної дії. Цей фреймворк став стандартом для автоматизації iOS, дозволяючи виконувати завдання без відкриття застосунку.
Ми реалізуємо глибоку інтеграцію: від базових команд до передачі складних даних між діями. Наш досвід — понад 20 успішних проєктів для iOS, що гарантує сумісність з останніми версіями системи та відсутність багів при автоматизації.
Чому варто обрати App Intents замість SiriKit?
До появи App Intents інтеграція будувалася на SiriKit з .intentdefinition файлами та INExtension в окремому таргеті. Це вимагало багато шаблонного коду та кодогенерації. З виходом iOS, що підтримує App Intents (починаючи з iOS 16), з'явився AppIntents framework. Він простіший: менше коду, Intents видимі в Shortcuts без додаткового налаштування. Для порівняння:
| Характеристика | SiriKit | App Intents |
|---|---|---|
| Складність | Висока (окремий таргет, кодогенерація) | Низька (один файл) |
| Продуктивність | Середня | Висока (запуск без відкриття застосунку) |
| Підтримка iOS | Починаючи з iOS 10 | Починаючи з iOS 16 |
| Динамічні параметри | Через INObject | Через AppEntity (простіше) |
| App Shortcuts | Ні | Вбудовані |
App Intents виграє за всіма параметрами для нових проєктів. В розробці він у 3 рази швидший за SiriKit — менше коду і менше шаблонів. Ми рекомендуємо мігрувати з SiriKit, якщо ваш застосунок все ще використовує старий підхід. Міграція скорочує час розробки нових автоматизацій на 40%.
Як App Intents спрощують розробку?
Мінімальний Intent для Shortcuts:
struct StartWorkoutIntent: AppIntent {
static var title: LocalizedStringResource = "Начать тренировку"
static var description = IntentDescription(
"Запускает тренировку в приложении",
categoryName: "Тренировки"
)
static var openAppWhenRun: Bool = false // не открывать приложение
@Parameter(title: "Тип тренировки")
var workoutType: WorkoutType
func perform() async throws -> some IntentResult & ProvidesDialog {
try await WorkoutService.shared.start(type: workoutType)
return .result(dialog: "Тренировка \(workoutType.name) началась")
}
}
openAppWhenRun: Bool = false — ключове для автоматизацій. Intent виконується в фоні без відкриття застосунку. Для Shortcuts це критично — інакше при автоматизації екран спалахне і відкриється ваш UI.
Що таке AppEntity і навіщо він потрібен?
Статичні параметри (String, Int, Bool, Date) — просто властивості з @Parameter. Динамічні — через AppEntity з AppEntityQuery.
enum WorkoutType: String, AppEnum {
case running, cycling, swimming
static var typeDisplayRepresentation = TypeDisplayRepresentation(name: "Тип тренировки")
static var caseDisplayRepresentations: [WorkoutType: DisplayRepresentation] = [
.running: "Бег",
.cycling: "Велосипед",
.swimming: "Плавание"
]
}
AppEnum — закритий список. AppEntity + AppEntityQuery — динамічний список з бази даних застосунку. Якщо користувач додав кастомний тип тренування, він має з'явитися в Shortcuts як опція — це тільки через AppEntityQuery.entities(matching:).
| Тип параметра | Використання | Приклад |
|---|---|---|
| @Parameter | Базові типи | String, Int, Bool, Date |
| AppEnum | Закритий список | WorkoutType.running |
| AppEntity + Query | Динамічний список | Workout з CoreData |
Як передавати дані між діями в Shortcuts?
Shortcuts дозволяє передавати результат однієї дії в іншу. Для цього Intent має повернути конкретний тип, а не просто діалог.
func perform() async throws -> some IntentResult & ReturnsValue<WorkoutSummary> {
let summary = try await WorkoutService.shared.getLastSummary()
return .result(value: summary)
}
WorkoutSummary — структура з AppEntity або базовим типом. Тепер наступний блок в Shortcuts може отримати ці дані як параметр.
App Shortcuts: фрази без налаштування
AppShortcutsProvider — фрази, які працюють без ручного налаштування користувачем:
struct FitnessAppShortcuts: AppShortcutsProvider {
static var appShortcuts: [AppShortcut] {
AppShortcut(
intent: StartWorkoutIntent(),
phrases: [
"Начни тренировку в \(.applicationName)",
"Запусти \(.applicationName)"
],
shortTitle: "Начать тренировку",
systemImageName: "figure.run"
)
}
static var shortcutTileColor: ShortcutTileColor = .teal
}
Фраза з \(.applicationName) — обов'язкова. Apple перевіряє наявність імені застосунку у фразі на рев'ю (App Store Review Guidelines Section 4.2). Без нього — rejection.
Зараз можна використовувати параметри прямо у фразах: "Начни бег в \(.applicationName)" — Siri розпізнає «бег» як значення параметра workoutType.
Віджети та Shortcuts разом
Кнопки у віджетах використовують той самий AppIntent. Один Intent — працює і як дія в Shortcuts, і як кнопка у віджеті, і як голосова команда. Це значно спрощує розробку: логіка написана один раз.
Етапи інтеграції App Intents
- Аналіз сценаріїв: Визначаємо, які дії користувачі хочуть автоматизувати.
- Проектування Struct-моделі: Створюємо AppIntent, AppEntity, AppEnum для кожної дії.
- Реалізація perform(): Пишемо логіку виконання з підтримкою фонового режиму.
- Налаштування AppShortcutsProvider: Локалізуємо фрази для Siri та Shortcuts.
- Тестування: Перевіряємо на симуляторі та реальних пристроях, включаючи автоматизації.
- Деплой: Відправляємо збірку в App Store Connect і перевіряємо рев'ю.
Тестування
У симуляторі: Settings → Siri & Search → [застосунок] — показує зареєстровані Intents. Застосунок Shortcuts на симуляторі дозволяє додати Intent в automation вручну і виконати.
Для App Shortcuts: XCTest з XCTOSSignpostExpectation або просто запуск через Shortcuts.app і перевірка результату.
Що входить у роботу
- Розробка Intents з урахуванням ваших бізнес-сценаріїв.
- Налаштування
AppEntityтаAppEntityQueryдля динамічних даних. - Інтеграція
AppShortcutsProviderз локалізованими фразами. - Тестування на реальних пристроях та симуляторах.
- Документація щодо використання та підтримки.
Терміни та вартість
Базова інтеграція 3–5 Intent без AppEntity: 2–4 тижні. Повна інтеграція з AppEntity, App Shortcuts, передачею значень між діями: 5–9 тижнів. Міграція з SiriKit Intents на App Intents: 3–6 тижнів. Вартість розраховується індивідуально залежно від кількості та складності дій. Зв'яжіться з нами для оцінки вашого проєкту — ми підготуємо кошторис і терміни під ключ. Отримайте консультацію, щоб дізнатися, як App Intents може скоротити ваші витрати на розробку автоматизацій.
Додаткову інформацію можна знайти в офіційній документації Apple.
Важно: App Intents не вимагають додаткових дозволів, крім випадків використання приватних даних — у таких ситуаціях необхідно налаштувати App Tracking Transparency.







