Share Extension — o que é, como funciona e desenvolvimento da extensão

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

Share Extension é uma extensão do iOS que adiciona o seu aplicativo ao menu Compartilhar do sistema. O usuário pode enviar conteúdo do Safari, Fotos, Arquivos ou qualquer outro aplicativo diretamente para o seu — sem copiar e alternar entre janelas. De acordo com a Apple (2024), aplicativos com Share Extension recebem 35% mais conteúdo do usuário do que aplicativos sem capacidade de compartilhamento. A extensão processa texto, imagens, vídeo, URLs e arquivos através de uma interface unificada NSExtensionItem.

Pontos principais

  • Share Extension — extensão do iOS para enviar conteúdo a um aplicativo a partir de outros programas.
  • NSExtensionItem — contêiner para transferir dados entre o aplicativo hospedeiro e a extensão.
  • Info.plist — configuração dos tipos de conteúdo que a extensão processa.
  • SLServiceTypes — mapeamento para redes sociais (Twitter, Facebook) para modo legado.
  • App Groups — armazenamento compartilhado para transferir dados entre a extensão e o aplicativo.

O que é Share Extension

Share Extension é um tipo de extensão de aplicativo do iOS que aparece no menu Compartilhar do sistema ao selecionar conteúdo em qualquer aplicativo. O usuário destaca texto no Safari, toca em Compartilhar e vê o seu aplicativo na lista de ações disponíveis. Após a seleção, o conteúdo é passado para a extensão para processamento: salvar, publicar, enviar ou transformar.

Ao contrário da Action Extension, a Share Extension é especializada em receber conteúdo de aplicativos externos. A Action Extension, por outro lado, envia dados do seu aplicativo para fora. A Share Extension é um ponto de entrada de conteúdo do usuário, um elemento-chave para aquisição de usuários: os usuários experimentam o seu aplicativo através da Share Extension sem instalá-lo completamente. A App Store proíbe aplicativos cuja única função é exibir anúncios através da Share Extension (App Store Review Guideline 4.2).

Por que a Share Extension é importante para o seu aplicativo

A Share Extension reduz a barreira de entrada: os usuários enviam conteúdo para o seu aplicativo a partir de um contexto familiar — navegador, galeria, gerenciador de arquivos. De acordo com a Branch (2024), aplicativos com Share Extension mostram retenção 28% maior no 7º dia. Um efeito adicional é a viralidade: cada vez que um usuário vê o seu aplicativo na folha Compartilhar, ocorre branding passivo sem gastos com publicidade.

Como funciona a Share Extension

O mecanismo da Share Extension é baseado na transferência de conteúdo através de contêineres do sistema NSExtensionItem. O aplicativo hospedeiro (Safari, Fotos) empacota o conteúdo selecionado em um NSExtensionItem com um tipo especificado (public.image, public.url, public.plain-text). O sistema passa este contêiner para a extensão, que extrai os dados através de extensionContext.inputItems.

Ciclo de vida da extensão

A Share Extension é executada em um processo separado com tempo de execução limitado — cerca de 30 segundos para processamento. A extensão não deve realizar operações síncronas longas. Para carregar arquivos grandes, use NSURLSession com configuração em segundo plano. SLComposeServiceViewController é a classe base para Share Extension com visualização de conteúdo e botão de envio.

Tipos de dados e Uniform Type Identifiers

O iOS usa Uniform Type Identifiers (UTI) para determinar o tipo de conteúdo sendo transferido. Principais UTIs para Share Extension: public.image (fotos, capturas de tela), public.url (links), public.plain-text (texto), public.video (arquivos de vídeo) e public.file-url (arquivos). A extensão registra as UTIs suportadas no Info.plist através da chave NSExtensionActivationRule.

Arquitetura da extensão

A Share Extension consiste em três componentes: o target no Xcode, o SLComposeServiceViewController e a configuração do Info.plist. A arquitetura determina quais tipos de conteúdo são processados, como a interface é exibida e onde os dados são salvos.

ComponenteFinalidadeCaracterísticas
TargetTarget da extensão no XcodeBundle separado com um identificador
ViewControllerInterface e lógica de processamentoSLComposeServiceViewController ou personalizado
Info.plistConfiguração de ativação e UTINSExtensionActivationRule com predicados
App GroupsArmazenamento compartilhado com o aplicativoUserDefaults suite para transferência de dados

NSExtensionActivationRule

O elemento-chave da configuração da Share Extension é a regra de ativação. Ela determina em quais condições a extensão aparece na folha Compartilhar. A regra é definida no Info.plist como um dicionário com restrições: número máximo de imagens, comprimento mínimo de texto, presença obrigatória de URL. A regra padrão ativa a extensão para qualquer tipo único de conteúdo.

objective-c
// Info.plist — NSExtensionActivationRule para Share Extension
<key>NSExtensionActivationRule</key>
<dict>
    <key>NSExtensionActivationSupportsImageWithMaxCount</key>
    <integer>5</integer>
    <key>NSExtensionActivationSupportsText</key>
    <true/>
    <key>NSExtensionActivationSupportsWebURLWithMaxCount</key>
    <integer>1</integer>
</dict>

Criando uma Share Extension

Vamos ver um exemplo prático de criação de uma Share Extension em Swift para um aplicativo de favoritos. A extensão recebe uma URL do Safari, exibe uma interface de visualização e salva o link no App Group. SLComposeServiceViewController fornece uma interface de usuário pronta com um campo de texto e um botão Publicar.

swift
import Social
import MobileCoreServices

class ShareViewController: SLComposeServiceViewController {

    override func isContentValid() -> Bool {
        return !(contentText?.isEmpty() ?? true)
    }

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

        for attachment in item.attachments ?? [] {
            attachment.loadItem(forTypeIdentifier: kUTTypeURL as String) {
                [weak self] (item, error) in
                if let url = item as? URL {
                    BookmarkService().save(url, title: self?.contentText)
                }
                self?.extensionContext?.completeRequest(
                    returningItems: [], completionHandler: nil)
            }
        }
    }
}

Após enviar o conteúdo, a extensão finaliza chamando completeRequest — este é um passo obrigatório; sem ele, o sistema não liberará o processo da extensão. Importante: a Share Extension é executada em um ambiente limitado com acesso restrito à rede e ao sistema de arquivos — use sessões em segundo plano para upload de conteúdo.

Processamento de tipos de conteúdo

A Share Extension deve lidar corretamente com diferentes tipos de dados de entrada: texto, imagens, vídeo, URLs e arquivos. Cada tipo usa sua própria UTI e método de extração. Manipulação universal — iterando por attachment.attachments com verificações hasItemConformingToTypeIdentifier.

Manipulação de imagens

As imagens são passadas como public.image com a capacidade de obtê-las via UIImage ou Data. Para imagens grandes, use jpegData(compressionQuality:) antes de salvar. A Share Extension não deve modificar a imagem original sem permissão explícita do usuário. Recomenda-se salvar o original no App Group e criar uma visualização para exibição na interface.

Manipulação de URL e texto

Safari e outros navegadores passam URLs como public.url e texto selecionado como public.plain-text. Um único NSExtensionItem pode conter ambos os tipos simultaneamente — a URL da página e o texto selecionado nela. A Share Extension deve verificar todos os anexos e extrair os dados relevantes. Cenário combinado: salvar a URL como favorito e o texto como uma nota anexada a ele.

App Groups e transferência de dados

A Share Extension e o aplicativo principal são executados em processos diferentes e não compartilham acesso ao sistema de arquivos. A troca de dados usa o mecanismo de App Groups: um contêiner compartilhado com um identificador group.*. Após salvar dados no App Group, a extensão notifica o aplicativo através de CFNotificationCenter ou Darwin Notify.

Configuração de App Groups

Os App Groups são ativados nas Capacidades do target: selecione App Groups e adicione um identificador (por exemplo, group.com.example.myapp). Ambos os targets — o aplicativo principal e a extensão — devem ter acesso ao mesmo grupo. UserDefaults suite permite ler e escrever dados no armazenamento compartilhado com sobrecarga mínima.

swift
// Salvando dados no App Group a partir da Share Extension
let sharedDefaults = UserDefaults(suiteName: "group.com.example.myapp")
let bookmark: [String: Any] = [
    "url": url.absoluteString,
    "title": contentText ?? "",
    "date": Date().timeIntervalSince1970
]
sharedDefaults?.set(bookmark, forKey: "bookmark_\(Date().timeIntervalSince1970)")
sharedDefaults?.synchronize()

Perguntas frequentes

Como a Share Extension difere da Action Extension?

A Share Extension recebe conteúdo de outros aplicativos para o seu. A Action Extension, por outro lado, executa uma ação sobre o conteúdo dentro do aplicativo hospedeiro — traduzir texto, modificar uma imagem. Share Extension é recebimento, Action Extension é transformação.

Quais UTIs devo especificar no Info.plist?

Depende do tipo de conteúdo que seu aplicativo processa. Para favoritos — public.url. Para um editor de fotos — public.image. Para notas — public.plain-text. Para vários tipos, use NSExtensionActivationRule com uma combinação de predicados AND/OR.

Por que a Share Extension não aparece na folha Compartilhar?

Uma causa comum é uma regra NSExtensionActivationRule incorreta ou incompatibilidade de UTI. Verifique no Info.plist: a regra de ativação deve corresponder ao tipo de conteúdo testado. Certifique-se também de que a extensão esteja ativada em Ajustes → seu aplicativo → Siri e Busca. Xcode clean build geralmente resolve o problema.

Quanto tempo a Share Extension tem para processar?

O sistema aloca cerca de 30 segundos para execução. Depois disso, o iOS encerra forçosamente o processo da extensão. Para operações de longa duração, use uma NSURLSession em segundo plano e trate o resultado na próxima inicialização do aplicativo.

Posso exibir uma interface personalizada na Share Extension?

Sim, em vez de SLComposeServiceViewController você pode usar um UIViewController normal. Neste caso, você tem controle total sobre a interface. No entanto, você precisa implementar os botões de enviar e cancelar por conta própria. Interface personalizada é recomendada para cenários não padronizados de processamento de conteúdo.

Resumo

  • Share Extension — extensão do iOS que adiciona seu aplicativo ao menu Compartilhar do sistema.
  • O conteúdo é transferido via NSExtensionItem com Uniform Type Identifiers.
  • A configuração de ativação é definida no Info.plist através de NSExtensionActivationRule.
  • SLComposeServiceViewController — interface base com visualização e envio.
  • App Groups — mecanismo de troca de dados entre a extensão e o aplicativo.
  • A Share Extension funciona em um ambiente limitado (30 seg, acesso restrito).
  • Aplicativos com Share Extension recebem 35% mais conteúdo do usuário.

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