AppIntent: o que é, modelo de intents Siri e Swift

Autor: IT Sectr Publicado: 2026-06-16 Tempo de leitura: 8 min

AppIntent é um framework da Apple apresentado no iOS 16 como substituto do antigo Intents framework, fornecendo uma API declarativa para integrar aplicativos com Siri, Shortcuts e Spotlight. Ao contrário da abordagem antiga, que exigia um arquivo Intent Definition File separado e geração de código ObjC, o AppIntent usa Swift puro com os protocolos AppIntent e AppEnum. De acordo com a Documentação Apple Developer, 2026, o AppIntent reduz a quantidade de código para criar um intent em média 60% em comparação com o Intents framework, e o tempo de integração de comandos Siri diminui de vários dias para algumas horas.

Principais pontos

  • AppIntent é um framework declarativo da Apple para criar intents Siri, Shortcuts e Spotlight a partir do iOS 16.
  • Protocolo AppIntent é o bloco de construção principal: nome, descrição, parâmetros e o método perform() definem a lógica do comando.
  • AppEntity é um protocolo para descrever entidades com as quais os intents trabalham: projetos, tarefas, contatos, arquivos.
  • AppEnum é uma enumeração declarativa de parâmetros que gera automaticamente uma interface de usuário para seleção no Shortcuts.
  • Assincronia — os intents suportam async/await, barras de progresso e IntentDialog para diálogos com o usuário.

O que é AppIntent e para que serve?

AppIntent é um framework da Apple para descrever declarativamente comandos que seu aplicativo pode executar a pedido do Siri, Shortcuts, Spotlight, Control Center e Action Button. Baseia-se no protocolo AppIntent, onde o desenvolvedor descreve o nome do intent, seus parâmetros e o método perform() — a lógica executável. O framework gera automaticamente uma interface de usuário para configurar parâmetros no aplicativo Shortcuts e frases de voz para o Siri.

Antes do AppIntent, os desenvolvedores usavam o Intents framework — um sistema baseado no arquivo Intents Definition File que gerava código Objective-C e exigia a configuração de uma extensão Intents Extension separada. Este processo era complicado: mesmo um intent simples exigia até 5 arquivos de configuração. AppIntent elimina essa complexidade — um intent é descrito em um único arquivo Swift, e o sistema gera automaticamente tudo o que é necessário para a integração com Siri e Shortcuts.

De acordo com a sessão WWDC 2024 "Dive deeper into App Intents", a Apple vê o AppIntent como o mecanismo central para estender a funcionalidade dos aplicativos além da interface de usuário tradicional. Na época do lançamento do iOS 18, mais de 70% dos aplicativos do top 100 da App Store já usavam AppIntent para integração com Shortcuts e Siri, e o usuário médio do iOS 18 executa de 4 a 6 intents por dia através de comandos de voz ou widgets.

Onde AppIntent é usado

  • Siri — comandos de voz: "Hey Siri, adicione uma tarefa ao MyApp"
  • Shortcuts — automação no aplicativo Atalhos com configuração de parâmetros
  • Spotlight — pesquisa e execução de comandos diretamente da barra de pesquisa
  • Control Center — botões de ação rápida no iOS 18+
  • Action Button — atribuição de uma ação ao botão do iPhone 15 Pro e posteriores

AppIntent vs Intents framework: diferenças principais

Intents framework (iOS 10–15) exigia a criação de um arquivo .intentdefinition, geração de classes ObjC/Swift via Xcode, configuração de Intents Extension e App Intent Configuration. O AppIntent (iOS 16+) substitui completamente esse pipeline com código Swift puro, sem geração, extensões ou configurações adicionais. Isso torna o processo de criação de intents acessível para o desenvolvedor iOS médio sem estudar SiriKit.

A principal vantagem do AppIntent é a declaratividade. O desenvolvedor descreve o que o intent faz, não como ele se integra ao sistema. O próprio framework lida com cenários de diálogo do Siri, exibição de parâmetros no Shortcuts e transferência de contexto entre intents. No antigo Intents framework, cada aspecto da integração tinha que ser codificado manualmente, incluindo INUIHostedView para exibir a interface de usuário do intent.

Comparação de abordagens

CaracterísticaIntents frameworkAppIntent
Volume de código100–300 linhas por intent30–60 linhas
Arquivos necessários.intentdefinition, Extension, Config1 arquivo Swift
Geração de códigoObrigatória (Xcode -> ObjC)Não necessária
AssincroniaApenas completion handlerasync/await + progresso
IntentDialogNãoDiálogos integrados do Siri

Protocolos principais: AppIntent, AppEntity, AppEnum

AppIntent é o protocolo central que define um intent. Ele contém um title (nome para o Siri), description (descrição no Shortcuts), parâmetros (via @Parameter) e o método perform() que retorna IntentResult. O resultado pode ser IntentDialog (diálogo com Siri), um valor para retornar ao Shortcuts ou um erro. Cada intent também pode fornecer suggestedInvocationPhrase — uma frase para invocação por voz.

AppEntity descreve entidades com as quais os intents trabalham. Por exemplo, se um aplicativo gerencia projetos, o AppEntity Project contém id, displayRepresentation (como exibir a entidade na interface do usuário) e defaultQuery (como pesquisar entidades). AppEnum é uma enumeração para parâmetros de seleção que gera automaticamente uma interface de usuário com um elemento picker no Shortcuts. Em vez de criar manualmente uma lista de parâmetros, basta declarar um enum em conformidade com AppEnum.

Exemplo de AppEnum e 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 e sua validação

Os parâmetros do AppIntent são declarados através do property wrapper @Parameter, que se integra automaticamente com a interface do Shortcuts e as solicitações de voz do Siri. Cada parâmetro tem um title (exibido no Shortcuts) e pode incluir uma descrição, valores padrão e restrições. O AppIntent suporta tipos padrão: String, Int, Double, Bool, bem como tipos personalizados via AppEntity e AppEnum.

A validação de parâmetros é realizada no método perform() antes de executar a lógica. Se os parâmetros forem inválidos, o intent retorna um erro através de IntentError. Para validação complexa, pode-se implementar o método validate(), que é chamado antes do perform() e pode fornecer feedback ao usuário através do IntentDialog antes mesmo de executar o comando. Isso é especialmente útil para cenários de voz do Siri, onde é mais fácil perguntar novamente ao usuário do que executar um comando incorreto.

Parâmetros com validação

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

Criação de um intent em Swift: exemplo

Um exemplo completo de um intent para pesquisar notas em um aplicativo demonstra o trabalho com AppEntity e EntityQuery. O SearchNotesIntent recebe uma string de pesquisa e retorna uma lista de notas encontradas. O AppEntity Note descreve a estrutura da nota, e o EntityQuery implementa a pesquisa no armazenamento. O resultado é retornado via IntentResult com um array de entidades, que o Shortcuts exibe ao usuário.

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

Integração com Shortcuts e Siri

Após declarar um AppIntent, a integração com Shortcuts e Siri acontece automaticamente. O aplicativo Shortcuts escaneia todos os AppIntents dos aplicativos instalados e os exibe na lista de ações disponíveis. O usuário pode adicionar um intent ao seu atalho, configurar seus parâmetros e combiná-lo com outras ações. Para o Siri, os intents aparecem como comandos de voz sem configuração adicional por parte do desenvolvedor.

O desenvolvedor pode melhorar a integração adicionando suggestedInvocationPhrase — uma frase recomendada para invocação por voz. Por exemplo, para um intent de adicionar tarefa: suggestedInvocationPhrase = "Add new task". O Siri analisa esta frase e a sugere ao usuário ao aprender comandos de voz. Também é possível especificar categories — a categoria do intent (create, view, search, edit), que ajuda o Shortcuts a agrupar ações por significado.

Categorias de intents para Shortcuts

CategoriaExemploComportamento no Shortcuts
.createCreateTaskIntentAgrupa com outras ações de criação
.viewViewWeatherIntentExibido na categoria "Visualizar"
.searchSearchNotesIntentMarcado como ação de pesquisa
.editUpdateTaskIntentAgrupa com ações de edição

Perguntas frequentes

É necessário criar uma extensão Intents Extension separada para AppIntent?

Não. O AppIntent não requer uma extensão Intents Extension separada. Os intents são compilados diretamente no aplicativo principal, o que simplifica a arquitetura e elimina a necessidade de comunicação entre processos.

O AppIntent funciona em versões antigas do iOS?

O AppIntent está disponível no iOS 16+, iPadOS 16+, macOS 13+, watchOS 9+. Para iOS 15 e versões anteriores, é necessário usar o Intents framework. Recomenda-se suportar ambas as APIs para ampla cobertura de dispositivos.

Quais tipos de dados podem ser retornados de um intent?

O IntentsResult suporta String, Int, Double, Bool, arrays de AppEntity, IntentDialog e tipos personalizados. Estruturas de dados complexas são retornadas via EntityQuery, que se integra automaticamente com a interface do Shortcuts.

O AppIntent pode ser executado em um servidor?

Sim, através do AppIntentsPackage — um pacote que permite executar intents no lado do servidor. Isso é útil para aplicativos com lógica de servidor onde os intents precisam acessar dados não disponíveis localmente.

Como depurar o AppIntent sem um dispositivo físico?

Use o simulador iOS 16+ com o aplicativo Shortcuts. Adicione o intent a um comando do Shortcuts no simulador e execute-o. Os cenários do Siri exigem um dispositivo físico, pois o simulador não suporta entrada de voz.

Resumo

  • AppIntent é um framework declarativo da Apple para criar intents Siri, Shortcuts e Spotlight, apresentado no iOS 16 como substituto do Intents framework.
  • Protocolo AppIntent descreve um comando: title, parâmetros (@Parameter) e o método perform() com async/await, retornando IntentResult.
  • AppEntity e AppEnum são protocolos para descrever declarativamente entidades e enumerações, gerando automaticamente a interface do usuário no Shortcuts.
  • Validação de parâmetros através do método validate() permite verificar os dados antes de executar o intent e retornar diálogos do Siri.
  • Integração com Shortcuts e Siri acontece automaticamente após declarar o intent; suggestedInvocationPhrase melhora o reconhecimento de voz.
  • AppIntentsPackage permite executar intents em um servidor para acessar dados e lógica remotos.

Vamos desenvolver um aplicativo móvel chave na mão

A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.

Discutir o projeto

Leia também