Table of Contents
Construir una aplicación de lista de voz para hacer en iOS con integración de Siri
El control de voz se ha convertido en una expectativa clave en aplicaciones de productividad modernas. Al permitir a los usuarios gestionar tareas sin manos, los desarrolladores de iOS pueden crear una experiencia de lista de tareas mucho más accesible y eficiente. Siri, asistente de voz inteligente de Apple, proporciona un marco robusto para integrar comandos de voz directamente en su aplicación. Esta guía le lleva a través de cada paso de la creación de una aplicación de lista de voz habilitada para hacer, desde la configuración inicial del proyecto hasta el manejo de alta intención y las mejores prácticas de implementación.
Comprender SiriKit y su papel en la gestión de tareas
SiriKit es un marco que permite que su aplicación extienda su funcionalidad a Siri. En lugar de construir una interfaz de voz separada, usted define las acciones que los usuarios pueden realizar a través de comandos de voz, y Siri maneja el reconocimiento de discursos y el procesamiento de lenguaje natural. Para una aplicación de lista de tareas, SiriKit permite acciones como agregar una tarea, eliminar una tarea, mostrar tareas actuales, o incluso marcar una tarea como completa.
El marco utiliza intents] — objetos que representan acciones de usuario. Su aplicación define intenciones personalizadas para las operaciones específicas que soporta. Cuando un usuario habla un comando como "Hey Siri, agrega la leche a mi lista de compras en MyToDoApp", Siri coincide con la frase a su intención, extrae parámetros (como el nombre de tarea y el identificador de lista), y da la intención al manejador de su aplicación.
Los principales beneficios de usar SiriKit incluyen:
- Operación libre de mano: Los usuarios pueden gestionar tareas mientras conducen, cocinan o ejercen.
- Mayor accesibilidad: El control de voz ayuda a los usuarios con discapacidad motora o visual.
- Consistencia con las interacciones de voz del sistema: Su aplicación se siente como un ciudadano de primera clase iOS.
- Integración cortada: Los usuarios pueden crear atajos personalizados de Siri para acciones frecuentemente utilizadas.
SiriKit vs. Otras soluciones de voz
Usted podría preguntarse si utilizar SiriKit, reconocimiento de discurso personalizado (a través del marco de la expresión), o un servicio de terceros como Google Speech-to-Text. SiriKit es el enfoque recomendado para integrarse con el asistente del sistema porque no requiere una grabación de audio independiente UI, no configuración de reconocimiento de discursos, y funciona en todos los dispositivos de Apple. El marco de la palabra es mejor adecuado para aplicaciones que necesitan procesar secuencias de audio arbitrarias (por ejemplo).
Configuración de su proyecto para la integración de Siri
Crear una aplicación habilitada para voz comienza con la configuración estándar del proyecto Xcode. También necesitará habilitar la capacidad de Siri y añadir una extensión de Intents para manejar solicitudes incluso cuando la aplicación no se esté ejecutando.
Paso 1: Crear un nuevo proyecto de código X
Lanza Xcode y crea un nuevo proyecto usando la plantilla App]]. Da a tu proyecto un nombre, como VoiceTodo, y asegura que SwiftUI o UIKit se seleccionen en función de tu preferencia. Guarda el proyecto.
Paso 2: Permite la Capability Siri
En la pestaña de su objetivo de aplicación ]Signing " Capabilities], haga clic en + Capacidad botón y busque Siri. Agregue la capacidad y asegure que la casilla de verificación sea revisada. Este paso es obligatorio; sin ella, Siri no reconocerá sus intenciones.
Paso 3: Agregue una extensión de las intenciones
Para permitir que Siri maneje intenciones incluso cuando su aplicación está en el fondo o no se lanzó, necesita un Extensión de los Intentos. Ir a File > New > Target, seleccione Extensión de los intitantes [LT:5]
Paso 4: Crear un archivo de definición de las intenciones
En su objetivo principal de la aplicación, cree un nuevo archivo usando la plantilla Intents Definition] (encontrada bajo plantillas de recursos). Nombrarlo TodoIntents.intentdefinition. Este archivo es donde define sus intenciones personalizadas. Se compartirá automáticamente con su objetivo de extensión de Intents si lo configura correctamente.
Para asegurar que el archivo de definición esté disponible para ambos objetivos, seleccione el archivo TodoIntents.intentdefinition] en el navegador del proyecto y, en el Inspector de Archivo, agregue su aplicación principal y la extensión de las intenciones a la lista ]Afiliación de sargento.
Definición de las Intenciones Aduanas para Operaciones de Hacer
Con el archivo de definición de las intenciones listo, ahora puede crear las intenciones específicas que potenciarán sus comandos de voz. Para una aplicación básica de lista de tareas, usted querrá al menos tres intenciones: AñadirIntent, RemoveTaskIntent, y [Fhow.
Creando el AddTaskIntent
- Abrir TodoIntents.intentdefinition]. Haga clic en + en la parte inferior izquierda del lienzo y seleccione Nueva Intención].
- Nombra la intención .
- Bajo Parameters], agregue un nuevo parámetro llamado de tipo ].Acceda. Opcionalmente, agregue un parámetro si su aplicación soporta múltiples listas.
- Establecer el parámetro ] Nombre de la pantalla (por ejemplo, "Nombre de la pestaña") y Promptar (por ejemplo, "¿Cuál tarea debo añadir?").Este aviso aparece cuando Siri necesita aclaración.
- En la sección Response], elija ]] éxito y defina una plantilla de respuesta como "Añadir {{taskName} a su lista de tareas".
- Asegúrese de Clase de fondo] se verifica y el nombre de clase es .
Crear el RemoveTaskIntent
Repita el proceso para un con un parámetro . La respuesta podría ser "Removido {{taskName}}" o "{{taskName}} no se encuentra." También puede añadir un ]Failure] tipo de respuesta para cuando la tarea no existe.
Creando el ShowTasksIntent
Para , es posible que no necesite ningún parámetro. En lugar de ello, confíe en la respuesta para contener una lista de tareas. En la sección de respuesta, agregue una Content] propiedad de tipo .Canción]. Usa una plantilla de respuesta como “Tienes {cont} tareas: {contenido}” [Finalmente”
Generando clases de intención
Después de definir todos los intentos, construir su proyecto. Xcode generará automáticamente clases de Swift para cada intención y su respuesta. Estas clases viven en la carpeta DerivedData pero son visibles en el editor. Los utilizarás en tu código de manipulador.
Implementar el manejo de intención en su aplicación y extensión
Ahora que las intenciones están definidas, usted necesita escribir el código que los maneja cuando Siri invoca su aplicación.
Manejo de las Intenciones en la extensión de las Intenciones
El objetivo de extensión de las intenciones incluye un archivo predeterminado . Abrelo y reemplaza su contenido con una clase que se ajusta a los protocolos de manipulación de intenciones generados. Cada intención tendrá su propio método de manipulador.
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)
}
}
Tienda de datos compartida
El código anterior hace referencia a un hipotético . Debido a que la extensión de las patentes se ejecuta en un proceso separado, no puede acceder directamente al modelo de datos principal de su aplicación. Necesita utilizar un contenedor compartido (App Group) para almacenar tareas en un lugar común como un UserDefaults] suite o una tienda de datos núcleo que vive en el directorio de grupo de aplicaciones.
Manejo de Intents en la Aplicación Principal
Cuando su aplicación es frontal y el usuario activa un acceso directo a Siri, también puede querer manejar los intentos directamente en la aplicación principal (sin la extensión). Puede ajustar su delegado de aplicación o delegado de escena a los mismos protocolos de intención. Sin embargo, para la mayoría de los casos de uso, la extensión es suficiente porque funciona independientemente de si la aplicación está en primer plano.
Función de ampliación: Confirmación, Deshacer y Parámetros
Para hacer que su lista de voz sea robusta, agregue soporte para diálogos de confirmación y resolución de parámetros.
Métodos de resolución
Para cada parámetro, puede implementar un método que valida o pide aclaración. Por ejemplo, si el usuario dice "Añadir huevos" sin especificar qué lista, su método puede incitar: "¿A qué lista quieres añadir huevos?" Si usted tiene una lista, resolva automáticamente a esa lista.
Respuestas de confirmación
Puede dejar que Siri le pida al usuario que confirme una acción antes de ejecutarla. Esto es útil para operaciones destructivas como la eliminación de tareas. En su clase de respuesta de intención, agregue un Confirmación] tipo de respuesta. Al manejar la intención, puede devolver una respuesta de confirmación que incluye los detalles. Siri pedirá al usuario que confirme, y si se confirma, su método se llamará de nuevo.
URL Manejo para el enlace profundo
Después de realizar una acción, puede que desee abrir su aplicación para mostrar la lista actualizada. Su manejador de intenciones puede llamar si está disponible, o su aplicación principal puede responder a esquemas de URL. Agregue una propiedad a su definición de intención para permitir un enlace profundo automático.
Prueba tu aplicación de voz
Pruebas de integración Siri requiere alguna configuración porque los comandos hablados no pueden simularse directamente. Utilice los siguientes enfoques:
Usando el Simulador Siri en Xcode
Ejecute su aplicación principal en un simulador, luego detenga la aplicación. A continuación, ejecute el objetivo de extensión de las patentes utilizando un esquema configurado para el simulador. Xcode lanzará una interfaz Siri simulada donde puede escribir su comando. Esta es la forma más rápida de probar sin un dispositivo físico.
Pruebas con un dispositivo real
Para el reconocimiento exacto de tus intenciones específicas, prueba en un dispositivo iOS real que funciona iOS 14 o posterior. Después de instalar tu app, abre Ajustes > Siri & Search > MyToDoApp y asegura que las intenciones se toggled. Diga "Hey Siri, agrega código de escritura a mi lista de tareas en MyToDoApp" y verifica el resultado.
Problemas comunes y depuración
- No se reconoce la intención:] Verificar que la página Info.plist de la extensión de las patentes incluye los nombres de clase de intención bajo IntentsSoportados.
- No se comparte la información:] Asegurar que ambos objetivos pertenecen al mismo Grupo de Aplicación y que la ruta de almacenamiento de datos es correcta.
- Response not spoken: Usa plantillas de respuesta que incluyen variables ; Siri las lee en voz alta.
- Falta el parámetro:] Implementar métodos de resolución para manejar la entrada ambigua.
Implementación y Consideraciones de App Store
Al enviar su aplicación a la App Store, debe declarar la capacidad de Siri. En App Store Connect, agregue una nota en las notas de revisión explicando lo que sus intenciones hacen y proporcionar comandos de prueba. Apple probablemente probará con un dispositivo real, así que asegúrese de que todo funcione correctamente.
Para maximizar la adopción de los usuarios, considere las mejores prácticas siguientes:
- Usuarios a bordo: Mostrar un breve tutorial sobre comandos de voz disponibles cuando la aplicación se lanza por primera vez.
- Atajos de apoyo: Permitir a los usuarios crear atajos vocales personalizados para tareas específicas (por ejemplo, “Hey Siri, añadir comestibles”) a través y ].
- Localizar sus intenciones: Proveer impulsos localizados y plantillas de respuesta para diferentes idiomas.
- Errores de desplazamiento con gracia: Siempre devuelve una respuesta significativa —aunque la tarea no lo haga— para guiar al usuario.
Características avanzadas y pasos siguientes
Una vez que tenga la lista de voz de base que se puede hacer funcionar, puede ampliarla con:
- Fecha de parálisis del lenguaje natural:] Los usuarios dicen “Agregar la leche para mañana” y establecer automáticamente una fecha de debido uso .
- Apoyo de la estructura y la etiqueta: Añada parámetros para categorías como o .
- Integración de la aplicación: Utilizar el trabajo de SiriKit , Media, u otros dominios si su aplicación se expande más allá de las listas de tareas.
- Vocabulario personalizado: Proveer una lista de vocabulario para entrenar a Siri para reconocer frases específicas de la aplicación como “mi lista de comestibles” o “trabaja tareas”.
Conclusión
Construir una aplicación de lista de voz para hacer con la integración de Siri es una manera práctica para mejorar la productividad de los usuarios y la accesibilidad. Al definir las intenciones personalizadas, implementar los controladores en una extensión dedicada, y utilizar una tienda de datos compartida, puede crear una experiencia sin manos. Los pasos descritos en esta guía —desde la configuración de proyectos hasta la prueba y la presentación— le darán una base sólida.
Para más detalles, consulte el documento oficial de Apple SiriKit documentation y la Guía de cortes. Si usted es nuevo en el desarrollo de iOS, también revise Iniciar el desarrollo de aplicaciones iOS (Swift) para conceptos fundacionales