Swift Academy · Lección

App Intents y Shortcuts

Exponga acciones a Siri y Shortcuts.

Lección 4 de 413 pasos

App Intents y Shortcuts es una lección gratuita de Swift Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Swift Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Swift Academy incluye 4 lecciones en total.

Qué son los App Intents

El framework App Intents expone las acciones de su app al sistema —Siri, Shortcuts, Spotlight, los widgets y el botón de acción—. Describe una acción una sola vez como un tipo de Swift y esta pasa a estar disponible en todas partes, controlada por voz y automatizable.

import AppIntents
// Define an action as a type; the system can run it
// from Siri, Shortcuts, Spotlight, widgets, etc.

Definir un AppIntent

Un intent adopta AppIntent, declara un title visible para el usuario e implementa perform(), que realiza el trabajo y devuelve un resultado. El framework lo descubre automáticamente; no es necesario registrarlo.

import AppIntents
struct AddTaskIntent: AppIntent {
    static var title: LocalizedStringResource = "Add Task"
    func perform() async throws -> some IntentResult {
        // create the task here
        return .result()
    }
}

Parámetros

Use el wrapper de propiedad @Parameter para solicitar datos al usuario (o a Siri). El sistema solicita los valores que falten y los valida. Cada parámetro tiene un título que se muestra en el editor de Shortcuts.

import AppIntents
struct AddTaskIntent: AppIntent {
    static var title: LocalizedStringResource = "Add Task"
    @Parameter(title: "Title")
    var taskTitle: String
    func perform() async throws -> some IntentResult {
        return .result()
    }
}

Devolver valores y mostrar un diálogo

Un intent puede devolver datos y pronunciar una confirmación. Las variantes de IntentResult, como .result(value:dialog:), permiten devolver un valor con tipo junto con un diálogo hablado o visible que Siri lee al usuario.

import AppIntents
struct CountTasksIntent: AppIntent {
    static var title: LocalizedStringResource = "Count Tasks"
    func perform() async throws
        -> some IntentResult & ProvidesDialog {
        let count = 5
        return .result(
            dialog: "You have \(count) tasks")
    }
}

Resumen de parámetros

parameterSummary describe la frase que se muestra en el editor de Shortcuts e inserta los parámetros en un lenguaje natural, como Añadir \(taskTitle) a mi lista. Esto hace que la acción se entienda claramente al combinarla en shortcuts.

import AppIntents
struct AddTaskIntent: AppIntent {
    static var title: LocalizedStringResource = "Add Task"
    @Parameter(title: "Title") var taskTitle: String
    static var parameterSummary: some ParameterSummary {
        Summary("Add \(\.$taskTitle) to my list")
    }
    func perform() async throws -> some IntentResult {
        .result()
    }
}

Entidades

Un AppEntity representa un objeto del modelo que el sistema puede interpretar: una tarea, una nota o una lista de reproducción. Con una entidad y una consulta, Siri y Shortcuts permiten que los usuarios elijan un elemento de sus datos como valor de un parámetro.

import AppIntents
struct TaskEntity: AppEntity {
    static var typeDisplayRepresentation:
        TypeDisplayRepresentation = "Task"
    var id: String
    var displayRepresentation: DisplayRepresentation {
        DisplayRepresentation(title: "\(id)")
    }
    static var defaultQuery = TaskQuery()
}

Consultas de entidades

Un EntityQuery indica al sistema cómo buscar sus entidades por identificador y cómo mostrar sugerencias. Esto proporciona el selector que el usuario ve al elegir un valor en Shortcuts o al responder a Siri.

import AppIntents
struct TaskQuery: EntityQuery {
    func entities(for ids: [String]) async throws
        -> [TaskEntity] {
        ids.map { TaskEntity(id: $0) }
    }
    func suggestedEntities() async throws -> [TaskEntity] {
        [TaskEntity(id: "Groceries")]
    }
}

App Shortcuts

Un AppShortcut permite ejecutar un intent mediante la voz sin configuración previa: el usuario no necesita crear primero un shortcut. Debe proporcionar frases de activación que incluyan el token del nombre de la app para que Siri conozca el contexto.

import AppIntents
struct AddTaskShortcut: AppShortcutsProvider {
    static var appShortcuts: [AppShortcut] {
        AppShortcut(
            intent: AddTaskIntent(),
            phrases: ["Add a task in \(.applicationName)"],
            shortTitle: "Add Task",
            systemImageName: "plus")
    }
}

Frases de activación

Las frases deben contener \(.applicationName) para que Siri pueda distinguir el contexto. Proporcione varias formas naturales en las que los usuarios podrían expresarlo. El sistema se encarga de encontrar coincidencias, por lo que no necesita analizar el lenguaje por su cuenta.

import AppIntents
// Provide variants; applicationName is required:
// phrases: [
//   "Add a task in \(.applicationName)",
//   "Create a task with \(.applicationName)",
//   "New \(.applicationName) task"
// ]
let phrases = "include applicationName token"
_ = phrases

Más allá de Siri

Como los intents son declarativos, el mismo AddTaskIntent puede controlar un widget interactivo Button(intent:), un control del Centro de control o una acción de Shortcuts; todos ejecutan su perform() sin necesidad de lógica adicional.

import AppIntents
import SwiftUI
// In an interactive widget:
// Button(intent: AddTaskIntent()) {
//     Label("Add", systemImage: "plus")
// }
let reuse = "one intent, many surfaces"
_ = reuse

Localizar intents

Los títulos y los diálogos utilizan LocalizedStringResource, por lo que se traducen mediante su String Catalog. Las frases de activación también se localizan para cada idioma, lo que permite que Siri responda a los usuarios en su propio idioma.

import AppIntents
struct GreetIntent: AppIntent {
    static var title: LocalizedStringResource = "Greet"
    func perform() async throws
        -> some IntentResult & ProvidesDialog {
        .result(dialog: "Welcome back")
    }
}

Comprobación rápida

Recuerde qué hace que las frases de un AppShortcut sean válidas.

Repaso

Ha aprendido sobre App Intents:

  • Adopte el protocolo AppIntent con un title y un perform(); recopile datos de entrada mediante @Parameter y descríbalos con parameterSummary.
  • Modele los datos como AppEntity con un EntityQuery para proporcionar selectores y sugerencias.
  • Exponga acciones de voz mediante frases de AppShortcut que incluyan \(.applicationName).
  • El mismo intent permite usar Siri, Shortcuts, widgets interactivos y controles, y se localiza mediante LocalizedStringResource.
Gratis para empezar

Aprende Swift con un tutor de IA — gratis

Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.

Cursos
122
Lecciones
409

Preguntas frecuentes

¿La lección «App Intents y Shortcuts» es gratis?

Sí — el texto completo de «App Intents y Shortcuts» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Swift Academy, actualiza a CoddyKit PRO. El curso de Swift Academy incluye 4 lecciones en total.

¿Qué aprenderé en «App Intents y Shortcuts»?

Exponga acciones a Siri y Shortcuts. Practicas Swift Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Swift Academy?

No se requiere experiencia previa. Swift Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «App Intents y Shortcuts»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Swift Academy?

Sí. Cada lección de Swift Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Cómo crear un widget con WidgetKit
  2. Proveedores de líneas de tiempo y snapshots
  3. Descripción general de las extensiones de apps
  4. App Intents y Shortcuts
← Volver a Swift Academy