Table of Contents

Создание приложения для списка дел с голосовой поддержкой в iOS с интеграцией Siri

Голосовое управление стало ключевым ожиданием в современных приложениях для повышения производительности. Позволив пользователям управлять задачами без помощи рук, разработчики iOS могут создать значительно более доступный и эффективный опыт работы со списком дел. Siri, интеллектуальный голосовой помощник Apple, обеспечивает надежную основу для интеграции голосовых команд непосредственно в ваше приложение. Это руководство проведет вас через каждый шаг создания приложения с голосовым управлением для выполнения задач, от начальной настройки проекта до продвинутой обработки намерений и внедрения лучших практик. Независимо от того, являетесь ли вы опытным разработчиком iOS или новым для SiriKit, описанные здесь методы помогут вам добавить мощные голосовые взаимодействия на естественном языке в ваше приложение.

Понимание SiriKit и его роли в управлении задачами

SiriKit — это фреймворк, позволяющий вашему приложению расширить его функциональность до Siri. Вместо того, чтобы создавать отдельный голосовой интерфейс, вы определяете действия, которые пользователи могут выполнять с помощью голосовых команд, а Siri обрабатывает распознавание речи и обработку естественного языка. Для приложения списка дел SiriKit позволяет такие действия, как добавление задачи, удаление задачи, отображение текущих задач или даже пометка задачи как завершенной.

В фреймворке используются намерения — объекты, которые представляют действия пользователя. Ваше приложение определяет пользовательские намерения для конкретных операций, которые оно поддерживает. Когда пользователь говорит команду, такую как «Эй, Siri, добавьте молоко в мой список покупок в MyToDoApp», Siri сопоставляет фразу с вашим намерением, извлекает параметры (например, имя задачи и идентификатор списка) и передает намерение обработчику вашего приложения. Затем ваше приложение выполняет действие и возвращает ответ. Siri использует этот ответ для подтверждения результата пользователю.

Основные преимущества использования SiriKit включают в себя:

  • Бесплатная работа: Пользователи могут управлять задачами во время вождения, приготовления пищи или физических упражнений.
  • Повышенная доступность: Голосовой контроль помогает пользователям с двигательными или зрительными нарушениями.
  • Соответствие системным голосовым взаимодействиям: Ваше приложение чувствует себя первоклассным гражданином iOS.
  • Короткая интеграция: Пользователи могут создавать пользовательские ярлыки Siri для часто используемых действий.

SiriKit против других голосовых решений

Вы можете задаться вопросом, использовать ли SiriKit, пользовательское распознавание речи (через структуру Speech) или сторонний сервис, такой как Google Speech-to-Text. SiriKit является рекомендуемым подходом для интеграции с помощником системы, потому что он не требует отдельного интерфейса аудиозаписи, настройки распознавания речи, и он работает на устройствах Apple. Рамка Speech лучше подходит для приложений, которые должны обрабатывать произвольные аудиопотоки (например, транскрипция). Для приложения списка дел, где вам нужен только фиксированный набор команд, SiriKit является явным победителем.

Настройка проекта для интеграции Siri

Создание приложения с голосовым управлением начинается со стандартной конфигурации проекта Xcode. Вам также необходимо включить функцию Siri и добавить расширение Intents для обработки запросов, даже если приложение не работает.

Шаг 1: Создайте новый проект Xcode

Запустите Xcode и создайте новый проект с использованием шаблона App (iOS). Дайте вашему проекту имя, например VoiceTodo, и убедитесь, что SwiftUI или UIKit выбраны на основе ваших предпочтений.

Шаг 2: Включите возможности Siri

В вкладке Signing & Capabilities нажмите кнопку + Capability и найдите Siri. Добавьте возможность и убедитесь, что флажок проверен. Этот шаг является обязательным; без него Siri не распознает ваши намерения.

Шаг 3: Добавьте намерение

Чтобы Siri могла обрабатывать намерения, даже когда ваше приложение находится в фоновом режиме или не запущено, вам нужно Расширение намерения . Перейдите в Файл > Новый > Цель , выберите Расширение намерения в разделе «Расширение приложения» и назовите его (например, VoiceTodoIntents. Xcode создаст отдельную цель с собственным Info.plist и файлом . В Info.plist расширения, убедитесь, что массив IntentsSupported присутствует и содержит имена ваших пользовательских намерений (которые мы определим следующим).

Шаг 4: Создайте файл определения намерений

В вашей основной цели приложения создайте новый файл, используя шаблон Intents Definition (найден под шаблонами ресурсов). Назовите его TodoIntents.intentdefinition. Этот файл, где вы определяете свои собственные намерения. Он будет автоматически передан вашей цели расширения намерений, если вы настроите его правильно.

Чтобы убедиться, что файл определения доступен для обеих целей, выберите файл TodoIntents.intentdefinition в навигаторе проекта и в файле File Inspector добавьте как ваше основное приложение, так и расширение намерения в список Target Membership.

Определение пользовательских намерений для операций по выполнению

Теперь, когда файл определения намерений готов, вы можете создать конкретные намерения, которые будут питать ваши голосовые команды. Для базового приложения списка дел вам понадобятся по крайней мере три намерения: AddTaskIntent , RemoveTaskIntent и ShowTasksIntent .

Создание AddTaskIntent

  1. Откройте TodoIntents.intentdefinition. Нажмите + в нижнем левом углу холста и выберите Новый умысел.
  2. Назовите имя (название) [1].
  3. В разделе Параметры добавьте новый параметр, названный типа струнная .
  4. Установите параметр Display Name (например, «Task Name») и Prompt (например, «Какую задачу я должен добавить?»).
  5. В разделе Ответ выберите Успех и определите шаблон ответа, такой как «Добавленное имя задачи» в ваш список дел».
  6. Удостоверьтесь, что Таможенный класс проверен, и имя класса .

Создание RemoveTaskIntent

Повторите процесс для с параметром . Ответ может быть «Удален {{taskName}}» или «{{taskName}} не найден». Вы также можете добавить тип ответа Неудачи , когда задача не существует.

Создание ShowTasksIntent

Для вам могут не понадобиться какие-либо параметры. Вместо этого, полагайтесь на ответ, чтобы содержать список задач. В разделе ответа добавьте Содержание Свойство типа Строк . Используйте шаблон ответа, такой как «У вас есть задачи {{count}}: {{content}}». может быть пользовательским свойством, установленным программно.

Генерация намеренных классов

После определения всех намерений создайте свой проект. Xcode автоматически сгенерирует классы Swift для каждого намерения и его ответа. Эти классы живут в папке DerivedData, но видны в редакторе. Вы будете использовать их в коде обработчика.

Реализация намерений по работе с вашим приложением и расширением

Теперь, когда намерения определены, вам нужно написать код, который обрабатывает их, когда Siri вызывает ваше приложение.

Обработка намерений в расширении намерений

Цель расширения намерений включает в себя файл по умолчанию , который открывается и заменяется классом, соответствующим сгенерированным протоколам обработки намерений.

import Intents

class IntentHandler: INExtension, AddTaskIntentHandling, RemoveTaskIntentHandling, ShowTasksIntentHandling {

 override func handler(for intent: INIntent) -> Any? {
 return self
 }

 // MARK: - Add Task
 func handle(intent: AddTaskIntent, completion: @escaping (AddTaskIntentResponse) -> Void) {
 guard let taskName = intent.taskName else {
 completion(AddTaskIntentResponse.failure(taskName: "unknown"))
 return
 }
 // Persist the task to your data store (Core Data, UserDefaults, etc.)
 // For simplicity, we'll assume a shared data manager
 TaskDataManager.shared.addTask(taskName: taskName, listName: intent.listName ?? "Default")
 completion(AddTaskIntentResponse.success(taskName: taskName))
 }

 func resolveTaskName(for intent: AddTaskIntent, with completion: @escaping (INStringResolutionResult) -> Void) {
 if let taskName = intent.taskName, !taskName.isEmpty {
 completion(.success(with: taskName))
 } else {
 // Prompt user for a task name
 completion(.needsValue())
 }
 }

 // MARK: - Remove Task
 func handle(intent: RemoveTaskIntent, completion: @escaping (RemoveTaskIntentResponse) -> Void) {
 guard let taskName = intent.taskName else {
 completion(.failure(taskName: "unknown"))
 return
 }
 let removed = TaskDataManager.shared.removeTask(taskName: taskName)
 if removed {
 completion(.success(taskName: taskName))
 } else {
 completion(.notFound(taskName: taskName))
 }
 }

 // MARK: - Show Tasks
 func handle(intent: ShowTasksIntent, completion: @escaping (ShowTasksIntentResponse) -> Void) {
 let tasks = TaskDataManager.shared.allTasks()
 let taskList = tasks.map { $0.name }.joined(separator: ", ")
 let count = tasks.count
 let response = ShowTasksIntentResponse.success(count: count, content: taskList)
 completion(response)
 }
}

Shared Data Store

Код выше ссылается на гипотетический . Поскольку расширение намерения выполняется в отдельном процессе, вы не можете напрямую получить доступ к основной модели данных вашего приложения. вам нужно использовать общий контейнер (App Group) для хранения задач в общем месте, таком как общий набор UserDefaults или хранилище основных данных, которое живет в каталоге группы приложений. Настройте возможность группы приложений как в вашем основном приложении, так и в расширении намерений и используйте тот же идентификатор для сохранения задач.

Обработка намерений в главном приложении

Когда ваше приложение находится на переднем крае, и пользователь запускает ярлык Siri, вы также можете захотеть обрабатывать намерения непосредственно в главном приложении (без расширения). Вы можете сообразовать делегата приложения или делегата сцены с теми же протоколами намерения. Однако для большинства случаев использования расширения достаточно, потому что оно работает независимо от того, находится ли приложение на переднем плане.

Расширяя функциональность: подтверждение, удаление и параметры

Основная обработка намерений - это только начало. Чтобы сделать ваш список дел с поддержкой голоса надежным, добавьте поддержку диалогов подтверждения и разрешение параметров.

Методы разрешения

Для каждого параметра можно реализовать метод , который проверяет или просит разъяснения. Например, если пользователь говорит «Добавить яйца» без указания того, какой список, ваш метод может подсказать: «К какому списку вы хотите добавить яйца?» Если у вас есть только один список, автоматически решите этот список.

Ответы на подтверждение

Вы можете позволить Siri попросить пользователя подтвердить действие перед его выполнением. Это полезно для разрушительных операций, таких как удаление задач. В классе ответа на намерение добавьте тип ответа на подтверждение . При обработке намерения вы можете вернуть ответ на подтверждение, который включает в себя детали. Siri затем попросит пользователя подтвердить, и если он подтвердится, ваш метод будет вызван снова с флагом.

URL-адрес для глубокой связи

После выполнения действия вы можете открыть свое приложение, чтобы показать обновленный список. Ваш обработчик намерений может позвонить , если это доступно, или ваше основное приложение может ответить на схемы URL. Добавьте свойство к вашему определению намерения, чтобы включить автоматическое глубокое связывание.

Тестирование вашего голосового приложения

Тестирование интеграции Siri требует некоторой настройки, потому что голосовые команды не могут быть смоделированы напрямую.

Использование симулятора Siri в Xcode

Запустите основное приложение на симуляторе, затем остановите приложение. Далее запустите цель Расширения намерений с помощью схемы, настроенной для симулятора. Xcode запустит смоделированный интерфейс Siri, где вы сможете ввести команду. Это самый быстрый способ тестирования без физического устройства.

Тестирование с помощью реального устройства

Для точного распознавания ваших конкретных намерений, проверьте на реальном устройстве iOS, работающем под управлением iOS 14 или более поздней версии. После установки вашего приложения откройте Settings > Siri & Search > MyToDoApp и убедитесь, что намерения переключаются. Скажите «Эй, Siri, добавьте код записи в мой список дел в MyToDoApp» и проверьте результат.

Общие вопросы и отладка

  • Намерение не признано: Убедитесь, что Info.plist Intents Extension включает в себя имена классов намерений под Намерения, поддерживаемые .
  • Данные не передаются: Убедитесь, что обе цели принадлежат одной и той же группе приложений и что путь хранения данных правильный.
  • Ответ не произносился: Используйте шаблоны ответов, которые включают переменные ; Siri читает их вслух.
  • Параметр отсутствует: Реализуйте методы разрешения для обработки неоднозначных входных данных.

Развертывание и App Store соображения

При отправке приложения в App Store необходимо заявить о возможности Siri. В App Store Connect добавить заметку в обзорные заметки, объясняющие, что делают ваши намерения и предоставить команды тестирования. Apple, скорее всего, будет тестировать с реальным устройством, поэтому убедитесь, что все работает правильно.

Чтобы максимально увеличить количество пользователей, рассмотрите следующие лучшие практики:

  • Бортовые пользователи: Покажите краткое руководство по доступным голосовым командам при первом запуске приложения.
  • Поддержка ярлыков: Позволяет пользователям создавать собственные голосовые ярлыки для конкретных задач (например, «Эй, Siri, добавь продукты») через и .
  • Локализируйте свои намерения: Предоставьте локализованные подсказки и шаблоны ответов для разных языков.
  • Ошибки ручной работы изящно: Всегда возвращайте значимый ответ — даже если задача не удаётся — чтобы направлять пользователя.

Расширенные возможности и следующие шаги

После того, как у вас есть базовый список дел с голосовой поддержкой, вы можете расширить его:

  • Природный язык синхронизации даты: Пусть пользователи говорят «Добавить купить молоко на завтра» и автоматически установить дату, используя .
  • Группа и поддержка тегов: Добавить параметры для категорий или .
  • Межприложения интеграция: Используйте SiriKit Workout, Media или другие домены, если ваше приложение расширяется за пределы списков дел.
  • Таможенная лексика: Предоставьте список лексики, чтобы научить Siri распознавать конкретные фразы приложения, такие как «мой список продуктов» или «рабочие задачи».

Заключение

Создание приложения с голосовым списком с интеграцией Siri - это практический способ повысить производительность и доступность пользователей. Определив пользовательские намерения, реализовав обработчики в специальном расширении и используя общий хранилище данных, вы можете создать бесшовный опыт без рук. Шаги, изложенные в этом руководстве - от настройки проекта до тестирования и представления - дают вам прочную основу. По мере того, как голосовое взаимодействие становится более распространенным, добавление интеграции Siri в ваше приложение будет отличать его в App Store. Начните экспериментировать с SiriKit сегодня и позвольте вашим пользователям управлять своими задачами так же легко, как и говорить.

Более подробно см. официальную документацию Apple SiriKit и Shortcuts guide. Если вы новичок в разработке iOS, также просмотрите Start Developing iOS Apps (Swift) для основополагающих концепций.