Photo Editing Extension: o que é e capacidades da extensão para iOS

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

Photo Editing Extension é um mecanismo do iOS que permite que aplicativos de terceiros adicionem ferramentas de edição diretamente no aplicativo Fotos do sistema. Ao contrário de editores completos, a extensão não carrega a foto em um aplicativo separado — o usuário aplica filtros, ajusta cores ou adiciona efeitos sem sair da interface padrão. De acordo com a Documentação para Desenvolvedores da Apple (2025), o PhotoKit fornece mais de 40 APIs para trabalhar com recursos fotográficos, incluindo PHAdjustmentData e PHContentEditingController.

Principais Pontos

  • Photo Editing Extension incorpora ferramentas de edição no aplicativo Fotos padrão do iOS sem alternar entre programas
  • A arquitetura é construída no protocolo PHContentEditingController, que gerencia a exibição da interface e a obtenção da imagem original
  • A extensão usa edição não destrutiva — todas as alterações são salvas como AdjustmentData, enquanto o original permanece intacto
  • Para trabalhar com a imagem, a extensão recebe PHContentEditingInput com o arquivo completo da foto e metadados
  • PhotoKit fornece acesso aos recursos fotográficos através de PHAsset, PHAssetResource e PHImageManager

O que é Photo Editing Extension no iOS

Photo Editing Extension é um tipo de extensão de aplicativo no iOS que incorpora ferramentas de processamento de imagem na interface padrão do aplicativo Fotos. O usuário abre uma foto, pressiona o botão Editar e seleciona a extensão desejada na lista de instaladas. Após a edição, o resultado é salvo de volta na biblioteca e o arquivo original permanece disponível para reversão.

Esta arquitetura resolve um problema chave da experiência do usuário: não há necessidade de alternar entre aplicativos, exportar e importar imagens ou acompanhar versões. De acordo com a WWDC 2025, todas as extensões funcionam em um processo isolado com sua própria sandbox e tempo de execução limitado — até 30 segundos por operação de edição.

A extensão não tem acesso a arquivos arbitrários na memória do dispositivo — apenas à foto que o usuário passou explicitamente através da interface de seleção. Isso garante a segurança dos dados do usuário ao usar ferramentas de terceiros.

PhotoKit: Arquitetura e Componentes Principais

PhotoKit é um framework da Apple para trabalhar com a biblioteca de mídia do dispositivo, introduzido no iOS 8. Ele fornece acesso programático aos recursos do Fotos, incluindo imagens, vídeos, álbuns e metadados. Para extensões de edição, o PhotoKit serve como uma camada intermediária entre o armazenamento e a interface de modificação.

PHAsset e PHAssetResource

PHAsset representa um objeto de mídia individual na biblioteca — uma foto ou vídeo. Através do PHAsset, é possível obter metadados: data de captura, tipo de arquivo, localização no mapa e orientação da câmera. O PHAssetResource fornece acesso aos recursos subjacentes — por exemplo, ao arquivo de foto original no formato RAW ou HEIC.

Para uma extensão de edição, o PHContentEditingInput é de vital importância — um objeto que contém o arquivo completo de imagem (ou vídeo) disponível para leitura e processamento. A extensão recebe este objeto no momento da ativação e o utiliza como material de origem.

PHImageManager e Cache

PHImageManager gerencia o carregamento e cache de imagens. Para uma extensão de edição, ele não é usado diretamente — a extensão recebe o arquivo completo através do PHContentEditingInput. No entanto, o PHImageRequestOptions permite configurar parâmetros de solicitação: tamanho, tipo de entrega (síncrona ou assíncrona) e formato do resultado.

De acordo com a Apple, o PHImageManager armazena automaticamente em cache as miniaturas de imagens na RAM, o que acelera a exibição repetida de pré-visualizações. Para extensões de edição, é recomendado usar PHImageRequestOptionsDeliveryModeHighQualityFormat para obter a melhor qualidade de imagem.

swift
let options = PHImageRequestOptions()
options.deliveryMode = .highQualityFormat
options.isSynchronous = true

PHImageManager.default().requestImage(
    for: asset,
    targetSize: .init(width: 1024, height: 1024),
    contentMode: .aspectFill,
    options: options
) { image, _ in
    // use image for display
}

Criando uma Extensão: PHContentEditingController

Cada Photo Editing Extension implementa o protocolo PHContentEditingController — o elemento central de controle da extensão. O protocolo define métodos para exibir a interface, receber dados de entrada e salvar o resultado.

Métodos Principais do Protocolo

beginContentEditing(with:) é chamado quando a sessão de edição começa. A extensão recebe PHContentEditingInput e deve exibir a interface com a imagem original. finishContentEditing(completionHandler:) finaliza a edição — a extensão retorna PHContentEditingOutput com o arquivo modificado e AdjustmentData. cancelContentEditing() cancela as alterações sem salvar.

Uma nuance importante: no momento da chamada beginContentEditing, a extensão obtém acesso apenas a uma versão da foto — aquela que foi solicitada pelo usuário. Ela não pode acessar outra foto ou álbum. Esta é uma restrição de sandbox introduzida pela Apple por segurança.

swift
class PhotoEditingViewController: UIViewController {

    override func beginContentEditing(
        with input: PHContentEditingInput
    ) {
        guard let url = input.fullSizeImageURL else { return }
        let image = CIImage(contentsOf: url)
        displayImage.image = UIImage(ciImage: image)
    }
}

Arquitetura de Separação

PHContentEditingController separa a interface de edição da lógica de salvamento. O processo principal do iOS chama beginContentEditing, a extensão mostra sua UI, o usuário faz alterações, então finishContentEditing gera um novo arquivo. A Apple recomenda realizar todo o processamento intensivo em recursos — filtros CIFilter, manipulações Core Image — em uma thread em segundo plano, não na principal, para não bloquear a interface.

Edição Não Destrutiva via AdjustmentData

PHAdjustmentData é o mecanismo chave que possibilita a edição não destrutiva no Photo Editing Extension. É um objeto que contém informações sobre as alterações aplicadas em um formato arbitrário. A extensão serializa parâmetros de filtros, máscaras e configurações em AdjustmentData e os salva junto com a imagem modificada.

Ao reabrir a foto, a extensão lê o AdjustmentData, restaura o estado anterior da interface e permite que o usuário continue a edição do mesmo ponto. Se a extensão não estiver instalada, a foto é exibida na última versão salva, enquanto o original é armazenado separadamente.

De acordo com a Documentação da Apple, PHAdjustmentData armazena formatIdentifier e formatVersion — strings para identificar o formato dos dados. Ao atualizar a extensão, você deve verificar a versão e manipular corretamente os formatos antigos.

swift
let adjustmentData = PHAdjustmentData(
    formatIdentifier: "com.example.photoediting",
    formatVersion: "1.0",
    data: NSKeyedArchiver.archivedData(
        withRootObject: params,
        requiringSecureCoding: true
    )
)
output.adjustmentData = adjustmentData

No momento do finishContentEditing, a extensão escreve AdjustmentData no objeto PHContentEditingOutput junto com o arquivo de imagem modificado. O sistema então salva ambos os componentes: a versão para exibição e os metadados para restaurar a sessão de edição.

Integração com o Aplicativo Fotos

A Photo Editing Extension aparece automaticamente no menu do aplicativo Fotos após instalar o aplicativo que a contém. O usuário abre uma foto, seleciona Editar, e na fileira inferior de ferramentas são exibidas todas as extensões de edição instaladas — tanto do sistema quanto de terceiros.

Registro da Extensão

A extensão é registrada através do Info.plist do aplicativo principal com a chave NSExtensionActivationRule, que especifica quais tipos de conteúdo ativam a extensão. Para um editor de fotos, o ActivationRule geralmente requer image — a extensão não aparecerá para vídeos ou Live Photos.

A Apple recomenda especificar tipos de ativação concretos para não sobrecarregar o menu de edição. Se a extensão suporta apenas JPEG e HEIC, vale a pena limitar a ativação a esses formatos.

xml
<!-- Info.plist -->
<key>NSExtension</key>
<dict>
    <key>NSExtensionPointIdentifier</key>
    <string>com.apple.photo-editing</string>
    <key>NSExtensionActivationRule</key>
    <string>SUBQUERY (extensionItems,
        @count <= 1)</string>
</dict>

Interação com o Usuário

Após selecionar uma extensão, o iOS cria um processo separado com um UIViewController personalizado que é exibido sobre a interface do Fotos. O usuário vê sua foto, as ferramentas da extensão e os botões Cancelar/Concluído. A extensão não pode alterar a navegação fora do seu próprio controlador nem acessar outras partes do sistema.

De acordo com as Diretrizes de Interface Humana da Apple, a interface da extensão deve ser mínima e funcional — sem anúncios, links estranhos ou elementos de navegação desnecessários. É recomendado usar UIScrollView para exibir a paleta de ferramentas e não sobrecarregar a tela.

Perguntas Frequentes

Como a Photo Editing Extension obtém acesso à foto?

A extensão recebe PHContentEditingInput com o URL do arquivo de imagem completo através do método beginContentEditing(with:). O acesso é concedido apenas a uma foto selecionada — sem direitos sobre outros recursos da biblioteca.

A extensão pode modificar a foto original?

Não, o original nunca é modificado. A extensão cria uma nova versão através do PHContentEditingOutput, e o AdjustmentData armazena os parâmetros das alterações para a capacidade de reverter ao estado original.

Quais tipos de arquivo a Photo Editing Extension suporta?

A extensão funciona com todos os formatos que o PhotoKit suporta: JPEG, HEIC, RAW, PNG, TIFF e Live Photos. As limitações são definidas através do NSExtensionActivationRule no Info.plist da extensão.

Quanto tempo é permitido para edição?

O iOS aloca até 30 segundos para a operação finishContentEditing. Se o limite for excedido, a extensão é encerrada à força e as alterações não são salvas. O processamento em segundo plano com CIFilter não prolonga este tempo.

Posso usar Core Image e Metal na extensão?

Sim, Core Image (CIFilter) e Metal (para shaders personalizados) são totalmente suportados. A Apple recomenda descarregar cálculos pesados para threads em segundo plano através do Grand Central Dispatch.

Resumo

  • Photo Editing Extension é uma ferramenta de edição incorporável no aplicativo Fotos que funciona sem alternar entre aplicativos
  • A arquitetura usa PHContentEditingController para gerenciar a sessão de edição e receber dados de entrada
  • PhotoKit fornece PHAsset, PHImageManager e PHContentEditingInput para acessar recursos de mídia do dispositivo
  • PHAdjustmentData permite edição não destrutiva — serialização dos parâmetros de alteração com capacidade de reversão
  • A extensão funciona em uma sandbox com limite de 30 segundos e acesso a apenas uma foto por sessão
  • Core Image, Metal e todos os formatos do PhotoKit são suportados: JPEG, HEIC, RAW, PNG, TIFF e Live Photos

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