Action Extension: o que é, como funciona e desenvolvimento da extensão

Autor: IT Sectr Publicado: 2026-06-15 Tempo de leitura: 10 min

Action Extension é uma extensão iOS que executa ações personalizadas em conteúdo de outros aplicativos sem alternar de contexto. Ao contrário do Share Extension, que envia dados para outro aplicativo, o Action Extension transforma o conteúdo no local: traduz texto, altera filtros de imagem, verifica ortografia ou gera PDF. De acordo com a Apple (2024), o Action Extension é o segundo tipo de extensão mais popular depois do Share Extension, usado em 42% dos aplicativos da categoria “Produtividade”. A ação instantânea sem iniciar o aplicativo principal é a principal vantagem para o usuário.

Principais pontos

  • Action Extension — extensão iOS para transformar conteúdo no aplicativo host.
  • NSExtensionContext — contexto de execução com dados de entrada e saída.
  • UTI — Uniform Type Identifiers para determinar o tipo de conteúdo processado.
  • UIActivity — mecanismo legado para implementar ações no iOS 6–7.
  • App Groups — transferência de dados processados de volta ao aplicativo.

O que é Action Extension

Action Extension é um tipo de extensão iOS que permite realizar ações em conteúdo diretamente no contexto do aplicativo host. O usuário seleciona texto no Safari, toca em “Ações” e escolhe, por exemplo, “Verificar ortografia” — a extensão processa o texto e retorna o resultado sem sair do navegador. A extensão recebe dados de entrada via NSExtensionContext e pode retornar conteúdo modificado.

O Action Extension apareceu no iOS 8 como parte da arquitetura de extensões de aplicativos. Sua principal característica é que a extensão não tem interface própria (opcional) e é executada no contexto do aplicativo host. O usuário não sai da tela atual, garantindo atrito cognitivo mínimo. Segundo a Apple, o Action Extension é o único tipo de extensão que pode ler e modificar simultaneamente o conteúdo do aplicativo host (via NSExtensionContext com retorno de resultado).

Onde o Action Extension é usado

O Action Extension é usado em diversos cenários: traduzir texto no navegador, criar PDF a partir de uma página web, aplicar filtro a uma foto na galeria, verificar ortografia em qualquer campo de texto, encurtar URL, criptografar texto e adicionar favoritos. A versatilidade torna o Action Extension uma ferramenta popular para aplicativos das categorias “Utilitários” e “Produtividade”.

Action Extension vs Share Extension

Action Extension e Share Extension são frequentemente confundidos, mas seus propósitos são fundamentalmente diferentes. O Share Extension envia conteúdo do aplicativo host para o seu aplicativo; o Action Extension processa o conteúdo e o devolve. A diferença afeta a arquitetura, a experiência do usuário e os requisitos de configuração do Info.plist.

CaracterísticaAction ExtensionShare Extension
PropósitoTransformação de conteúdoTransferência de conteúdo para o aplicativo
InterfaceOpcional (personalizada)SLComposeServiceViewController
Retorno de dadosSim, via completeRequestNão
ContextoPermanece no aplicativo hostAlterna para a extensão
Posição no menuAction Sheet (parte superior)Share Sheet (parte inferior)
Ação típicaTradução, correção, filtroSalvar, publicar

Como o usuário escolhe uma ação

O Action Extension aparece no menu de ações (Action Sheet) ao tocar no botão “Compartilhar” ou “...”. O iOS coloca automaticamente os Action Extensions na parte superior da folha (ações) e os Share Extensions na parte inferior (aplicativos). Cenário do usuário: selecionou texto → tocou em “Ações” → escolheu seu Action Extension → recebeu o resultado processado sem alternar de aplicativo.

Arquitetura do Action Extension

O Action Extension consiste em um target no Xcode, um UIViewController para exibir a interface (opcional), NSExtensionContext para entrada/saída de dados e configuração Info.plist. A arquitetura é mais simples que a do Share Extension: não há interface de composição obrigatória e a extensão pode funcionar completamente sem UI.

Componentes do Action Extension

Target — um bundle separado com um identificador herdado do aplicativo principal. UIViewController — interface opcional para exibir progresso, configurações ou resultados. NSExtensionContext — um contêiner com dados de entrada (inputItems) e o método completeRequest para retornar resultados. Info.plist — configuração de ativação via NSExtensionActivationRule e atributos (NSExtensionAttributes) para especificar os tipos de conteúdo suportados.

NSExtensionContext e fluxos de dados

O Action Extension recebe dados de entrada via extensionContext?.inputItems — um array de NSExtensionItem. Cada item contém anexos com dados e UTI. Após o processamento, a extensão chama completeRequest(returningItems:) com um array de NSExtensionItem de saída. O aplicativo host recebe os dados processados e os exibe. Modelo assíncrono: a extensão pode realizar operações longas, mantendo o contexto por até 30 segundos.

Criar um Action Extension

Vamos criar um Action Extension em Swift para traduzir texto selecionado. A extensão recebe texto do aplicativo host, envia para um servidor de tradução e retorna o resultado. ActionViewController é o controlador base criado pelo Xcode ao adicionar um target.

swift
import UIKit
import MobileCoreServices

class ActionViewController: UIViewController {

    @IBOutlet var resultLabel: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        extractTextAndTranslate()
    }

    func extractTextAndTranslate() {
        guard let item = extensionContext?.inputItems.first
                as? NSExtensionItem
        else { return }

        for attachment in item.attachments ?? [] {
            attachment.loadItem(
                forTypeIdentifier: kUTTypePlainText as String
            ) { [weak self] (text, error) in
                guard let inputText = text as? String else { return }
                TranslationService().translate(inputText, from: "en", to: "ru") {
                    translated in
                    DispatchQueue.main.async {
                        self?.resultLabel?.text = translated
                    }
                }
            }
        }
    }
}

Após o processamento, a extensão retorna o resultado ao aplicativo host. completeRequest com dados de saída é um cenário alternativo onde a extensão não mostra uma UI, mas retorna imediatamente o conteúdo processado.

swift
// Returning processed text to host app
let resultItem = NSExtensionItem()
let resultData = translated.data(using: .utf8)!
let attachment = NSItemProvider(
    item: resultData,
    typeIdentifier: kUTTypePlainText as String
)
resultItem.attachments = [attachment]
extensionContext?.completeRequest(
    returningItems: [resultItem], completionHandler: nil
)

Processamento de dados e retorno de resultados

O Action Extension pode funcionar em dois modos: com UI e sem UI. No modo sem UI, a extensão realiza a ação completamente em segundo plano e chama completeRequest imediatamente após o processamento. No modo com UI, a extensão mostra um controlador, o usuário confirma a ação e só então o completeRequest envia o resultado. A seleção do modo depende da complexidade da ação e da necessidade de entrada do usuário.

Carregar dados do anexo

O método loadItem(forTypeIdentifier:) funciona de forma assíncrona — os dados podem ser grandes (imagens, vídeos). O NSItemProvider gerencia o streaming e o cache. Para imagens use kUTTypeImage, para arquivos use kUTTypeFileURL. Importante: loadItem pode ser chamado em uma thread de fundo — atualize a UI apenas via DispatchQueue.main.

Retornar dados modificados

O Action Extension retorna dados processados via completeRequest com um array de NSExtensionItem. Cada item corresponde ao tipo de dados de saída. O aplicativo host pode substituir o conteúdo original pelo processado — por exemplo, substituir a imagem original por uma filtrada. NSExtensionItem suporta as mesmas UTI da entrada, além de adicionais (por exemplo, public.html para conteúdo web).

Casos de uso do Action Extension

O Action Extension é usado em dezenas de cenários — desde utilitários simples até fluxos de trabalho empresariais complexos. Exemplos clássicos abrangem operações de texto, gráficos e arquivos, bem como integração de conteúdo web.

Cenários de texto

Action Extension para texto: tradução, verificação ortográfica, contagem de caracteres, alteração de maiúsculas/minúsculas, criptografia, geração de código QR a partir de texto. O usuário seleciona texto em qualquer aplicativo com campo de texto (Safari, Notas, Mail) e realiza a ação com um toque. Realce de sintaxe de código, formatação Markdown e encurtamento de URL são exemplos populares de Action Extension para usuários avançados.

Cenários gráficos

Para imagens, o Action Extension oferece: aplicar filtros, cortar, redimensionar, converter formatos (HEIC para JPEG), adicionar marca d'água, reconhecer texto (OCR) e compactar. O processamento de imagens deve ser rápido — o usuário espera um resultado em 2–3 segundos. Para operações pesadas, use Core Image na GPU ou filas em segundo plano.

Cenários web

Action Extension para URL: criar PDF a partir de uma página web, salvar no Pocket/Pinterest, verificar velocidade do site, arquivar página, obter metadados Open Graph, gerar captura de tela da página. A geração de PDF é um dos cenários mais procurados: o usuário converte uma página web em PDF sem abrir serviços de terceiros.

Perguntas frequentes

Qual é a diferença principal entre Action Extension e Share Extension?

O Share Extension envia conteúdo do aplicativo host para o seu aplicativo. O Action Extension processa o conteúdo no local e retorna o resultado. Share — transferência, Action — transformação. Essa diferença fundamental determina a arquitetura e a UX.

Um Action Extension pode não ter interface?

Sim. Se a ação não exigir entrada do usuário (por exemplo, contagem de caracteres), a extensão pode realizá-la em segundo plano e retornar imediatamente o resultado via completeRequest. No Info.plist você precisa especificar NSExtensionActivationSupportsWebURL ou outra UTI que corresponda ao tipo de dados.

Em quais aplicativos o Action Extension aparece?

Em qualquer aplicativo que suporte UIActivityViewController ou controladores de ação padrão. Estes incluem Safari, Fotos, Arquivos, Notas, Mail e milhares de aplicativos de terceiros. O Action Extension não funciona em aplicativos que não usam os mecanismos de ação padrão do iOS.

Como retornar conteúdo processado ao aplicativo host?

Através de extensionContext.completeRequest(returningItems:) com um array de NSExtensionItem. Cada item de saída contém um NSItemProvider com os dados processados. O aplicativo host recebe o resultado no delegado do UIActivityViewController ou um callback similar.

Quais são as limitações do Action Extension?

A extensão executa por até 30 segundos, após os quais o iOS a encerra forçadamente. Não há acesso direto ao aplicativo principal — apenas através de App Groups. O Action Extension não pode realizar tarefas em segundo plano após a conclusão. Para operações longas, use NSURLSession em segundo plano com uma notificação no próximo início.

Resumo

  • Action Extension — extensão iOS para transformar conteúdo diretamente no aplicativo host.
  • Difere do Share Extension por retornar dados processados via NSExtensionContext.
  • Pode funcionar com UI ou completamente em segundo plano sem interface.
  • Suporta todos os tipos de conteúdo: texto, imagens, URL, arquivos via UTI.
  • Usado para tradução, filtros, geração de PDF, OCR e verificação ortográfica.
  • Limite de tempo de execução — 30 segundos, acesso ao aplicativo — via App Groups.
  • Action Extension é usado em 42% dos aplicativos da categoria “Produtividade”.

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