AppIntent: qué es, el modelo de intents de Siri y Swift

Autor: IT Sectr Publicado: 2026-06-16 Tiempo de lectura: 8 min

AppIntent es un framework de Apple presentado en iOS 16 como reemplazo del obsoleto Intents framework, que proporciona una API declarativa para integrar aplicaciones con Siri, Shortcuts y Spotlight. A diferencia del enfoque anterior, que requería un archivo Intent Definition File separado y la generación de código ObjC, AppIntent usa Swift puro con los protocolos AppIntent y AppEnum. Según la Documentación de Apple Developer, 2026, AppIntent reduce la cantidad de código para crear un intent en un promedio del 60% en comparación con Intents framework, y el tiempo de integración de comandos de Siri disminuye de varios días a varias horas.

Puntos clave

  • AppIntent es un framework declarativo de Apple para crear intents de Siri, Shortcuts y Spotlight a partir de iOS 16.
  • Protocolo AppIntent es el bloque de construcción principal: nombre, descripción, parámetros y el método perform() definen la lógica del comando.
  • AppEntity es un protocolo para describir entidades con las que trabajan los intents: proyectos, tareas, contactos, archivos.
  • AppEnum es una enumeración declarativa de parámetros que genera automáticamente una interfaz de usuario para la selección en Shortcuts.
  • Asincronía — los intents admiten async/await, barras de progreso e IntentDialog para diálogos con el usuario.

¿Qué es AppIntent y para qué sirve?

AppIntent es un framework de Apple para describir de forma declarativa comandos que tu aplicación puede ejecutar a petición de Siri, Shortcuts, Spotlight, Control Center y Action Button. Se basa en el protocolo AppIntent, donde el desarrollador describe el nombre del intent, sus parámetros y el método perform() — la lógica ejecutable. El framework genera automáticamente una interfaz de usuario para configurar parámetros en la aplicación Shortcuts y frases de voz para Siri.

Antes de AppIntent, los desarrolladores usaban Intents framework, un sistema basado en el archivo Intents Definition File que generaba código Objective-C y requería configurar una extensión Intents Extension separada. Este proceso era engorroso: incluso un intent simple requería hasta 5 archivos de configuración. AppIntent elimina esta complejidad — un intent se describe en un solo archivo Swift, y el sistema genera automáticamente todo lo necesario para la integración con Siri y Shortcuts.

Según la sesión de la WWDC 2024 "Dive deeper into App Intents", Apple considera AppIntent como el mecanismo central para extender la funcionalidad de las aplicaciones más allá de la interfaz de usuario tradicional. Para cuando se lanzó iOS 18, más del 70% de las aplicaciones del top 100 de App Store ya usaban AppIntent para la integración con Shortcuts y Siri, y el usuario medio de iOS 18 ejecuta de 4 a 6 intents al día mediante comandos de voz o widgets.

Dónde se usa AppIntent

  • Siri — comandos de voz: "Hey Siri, añade una tarea a MiApp"
  • Shortcuts — automatización en la aplicación Atajos con configuración de parámetros
  • Spotlight — búsqueda y ejecución de comandos directamente desde la barra de búsqueda
  • Control Center — botones de acción rápida en iOS 18+
  • Action Button — configuración de una acción para el botón de iPhone 15 Pro y posteriores

AppIntent vs Intents framework: diferencias clave

Intents framework (iOS 10–15) requería crear un archivo .intentdefinition, generar clases ObjC/Swift mediante Xcode, configurar Intents Extension y App Intent Configuration. AppIntent (iOS 16+) reemplaza completamente este proceso con código Swift puro sin generación, extensiones ni configuraciones adicionales. Esto hace que el proceso de creación de intents sea accesible para el desarrollador iOS promedio sin necesidad de estudiar SiriKit.

La ventaja clave de AppIntent es la declaratividad. El desarrollador describe qué hace el intent, no cómo se integra con el sistema. El framework mismo maneja los escenarios de diálogo de Siri, la visualización de parámetros en Shortcuts y la transferencia de contexto entre intents. En el antiguo Intents framework, cada aspecto de la integración debía codificarse manualmente, incluido INUIHostedView para mostrar la interfaz de usuario del intent.

Comparativa de enfoques

CaracterísticaIntents frameworkAppIntent
Volumen de código100–300 líneas por intent30–60 líneas
Archivos necesarios.intentdefinition, Extension, Config1 archivo Swift
Generación de códigoObligatoria (Xcode -> ObjC)No requerida
AsincroníaSolo completion handlerasync/await + progreso
IntentDialogNoDiálogos integrados de Siri

Protocolos principales: AppIntent, AppEntity, AppEnum

AppIntent es el protocolo central que define un intent. Contiene un title (nombre para Siri), description (descripción en Shortcuts), parámetros (mediante @Parameter) y el método perform() que devuelve IntentResult. El resultado puede ser IntentDialog (diálogo con Siri), un valor para devolver a Shortcuts o un error. Cada intent también puede proporcionar suggestedInvocationPhrase — una frase para la invocación por voz.

AppEntity describe entidades con las que trabajan los intents. Por ejemplo, si una aplicación gestiona proyectos, AppEntity Project contiene id, displayRepresentation (cómo mostrar la entidad en la interfaz de usuario) y defaultQuery (cómo buscar entidades). AppEnum es una enumeración para parámetros de selección que genera automáticamente una interfaz de usuario con un elemento picker en Shortcuts. En lugar de crear manualmente una lista de parámetros, basta con declarar un enum conforme a AppEnum.

Ejemplo de AppEnum y parámetro

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")
    }
}

Parámetros de intents y su validación

Los parámetros de AppIntent se declaran mediante el property wrapper @Parameter, que se integra automáticamente con la interfaz de usuario de Shortcuts y las solicitudes de voz de Siri. Cada parámetro tiene un title (se muestra en Shortcuts) y puede incluir una descripción, valores predeterminados y restricciones. AppIntent admite tipos estándar: String, Int, Double, Bool, así como tipos personalizados mediante AppEntity y AppEnum.

La validación de parámetros se realiza en el método perform() antes de ejecutar la lógica. Si los parámetros no son válidos, el intent devuelve un error mediante IntentError. Para validaciones complejas, se puede implementar el método validate(), que se llama antes de perform() y puede proporcionar retroalimentación al usuario a través de IntentDialog incluso antes de ejecutar el comando. Esto es especialmente útil para escenarios de voz de Siri, donde es más fácil volver a preguntar al usuario que ejecutar un comando incorrecto.

Parámetros con validación

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!")
    }
}

Creación de un intent en Swift: ejemplo

Un ejemplo completo de un intent para buscar notas en una aplicación demuestra el trabajo con AppEntity y EntityQuery. SearchNotesIntent recibe una cadena de búsqueda y devuelve una lista de notas encontradas. AppEntity Note describe la estructura de la nota, y EntityQuery implementa la búsqueda en el almacenamiento. El resultado se devuelve mediante IntentResult con un array de entidades, que Shortcuts muestra al usuario.

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)
    }
}

Integración con Shortcuts y Siri

Después de declarar un AppIntent, la integración con Shortcuts y Siri ocurre automáticamente. La aplicación Shortcuts escanea todos los AppIntents de las aplicaciones instaladas y los muestra en la lista de acciones disponibles. El usuario puede añadir un intent a su atajo, configurar sus parámetros y combinarlo con otras acciones. Para Siri, los intents aparecen como comandos de voz sin configuración adicional por parte del desarrollador.

El desarrollador puede mejorar la integración añadiendo suggestedInvocationPhrase — una frase recomendada para la invocación por voz. Por ejemplo, para un intent de añadir tarea: suggestedInvocationPhrase = "Add new task". Siri analiza esta frase y la sugiere al usuario al aprender comandos de voz. También se puede especificar categories — la categoría del intent (create, view, search, edit), que ayuda a Shortcuts a agrupar acciones por significado.

Categorías de intents para Shortcuts

CategoríaEjemploComportamiento en Shortcuts
.createCreateTaskIntentSe agrupa con otras acciones de creación
.viewViewWeatherIntentSe muestra en la categoría "Ver"
.searchSearchNotesIntentSe marca como acción de búsqueda
.editUpdateTaskIntentSe agrupa con acciones de edición

Preguntas frecuentes

¿Es necesario crear una extensión Intents Extension separada para AppIntent?

No. AppIntent no requiere una extensión Intents Extension separada. Los intents se compilan directamente en la aplicación principal, lo que simplifica la arquitectura y elimina la necesidad de comunicación entre procesos.

¿Funciona AppIntent en versiones antiguas de iOS?

AppIntent está disponible en iOS 16+, iPadOS 16+, macOS 13+, watchOS 9+. Para iOS 15 y anteriores, es necesario usar Intents framework. Se recomienda admitir ambas API para una amplia cobertura de dispositivos.

¿Qué tipos de datos se pueden devolver desde un intent?

IntentsResult admite String, Int, Double, Bool, arrays de AppEntity, IntentDialog y tipos personalizados. Las estructuras de datos complejas se devuelven mediante EntityQuery, que se integra automáticamente con la interfaz de usuario de Shortcuts.

¿Puede ejecutarse AppIntent en un servidor?

Sí, mediante AppIntentsPackage — un paquete que permite ejecutar intents en el lado del servidor. Esto es útil para aplicaciones con lógica de servidor donde los intents necesitan acceder a datos que no están disponibles localmente.

¿Cómo depurar AppIntent sin un dispositivo físico?

Usa el simulador de iOS 16+ con la aplicación Shortcuts. Añade el intent a un comando de Shortcuts en el simulador y ejecútalo. Los escenarios de Siri requieren un dispositivo físico, ya que el simulador no admite entrada de voz.

Resumen

  • AppIntent es un framework declarativo de Apple para crear intents de Siri, Shortcuts y Spotlight, presentado en iOS 16 como reemplazo de Intents framework.
  • Protocolo AppIntent describe un comando: title, parámetros (@Parameter) y el método perform() con async/await, que devuelve IntentResult.
  • AppEntity y AppEnum son protocolos para describir declarativamente entidades y enumeraciones, generando automáticamente la interfaz de usuario en Shortcuts.
  • Validación de parámetros mediante el método validate() permite verificar los datos antes de ejecutar el intent y devolver diálogos de Siri.
  • Integración con Shortcuts y Siri ocurre automáticamente después de declarar el intent; suggestedInvocationPhrase mejora el reconocimiento de voz.
  • AppIntentsPackage permite ejecutar intents en un servidor para acceder a datos y lógica remotos.

Desarrollaremos una aplicación móvil llave en mano

IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.

Discutir el proyecto

Lea también