Вы создали мобильное приложение, и пользователи хотят автоматизировать сценарии через Shortcuts. Без интеграции с Shortcuts через App Intents их возможности ограничены — приходится вручную открывать приложение для каждого действия. Этот фреймворк стал стандартом для автоматизации iOS, позволяя выполнять задачи без открытия приложения.
Мы реализуем глубокую интеграцию: от базовых команд до передачи сложных данных между действиями. Наш опыт — более 20 успешных проектов для iOS, что гарантирует совместимость с последними версиями системы и отсутствие багов при автоматизации. Типичная экономия бюджета на поддержке после внедрения App Intents составляет от 200 000 до 400 000 руб. в год, что полностью окупает разработку. Дополнительно, автоматизация рутинного ввода данных сокращает затраты на ручной QA ещё на 150 000–300 000 руб. в год.
Почему стоит выбрать 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.







