Photo Editing Extension: qué es y capacidades de la extensión para iOS

Autor: IT Sectr Publicado: 2026-06-15 Tiempo de lectura: 9 min

Photo Editing Extension es un mecanismo de iOS que permite a las aplicaciones de terceros añadir herramientas de edición directamente en la aplicación Fotos del sistema. A diferencia de los editores completos, la extensión no carga la foto en una aplicación separada — el usuario aplica filtros, ajusta colores o agrega efectos sin salir de la interfaz estándar. Según la documentación para desarrolladores de Apple (2025), PhotoKit proporciona más de 40 API para trabajar con recursos fotográficos, incluyendo PHAdjustmentData y PHContentEditingController.

Puntos Clave

  • Photo Editing Extension integra herramientas de edición en la aplicación Fotos de iOS sin cambiar de programa
  • La arquitectura se basa en el protocolo PHContentEditingController, que gestiona la visualización de la interfaz y la obtención de la imagen original
  • La extensión utiliza edición no destructiva — todos los cambios se guardan como AdjustmentData, mientras que el original permanece intacto
  • Para trabajar con la imagen, la extensión recibe PHContentEditingInput con el archivo completo de la foto y metadatos
  • PhotoKit proporciona acceso a los recursos fotográficos a través de PHAsset, PHAssetResource y PHImageManager

Qué es Photo Editing Extension en iOS

Photo Editing Extension es un tipo de extensión de aplicación en iOS que incorpora herramientas de procesamiento de imágenes en la interfaz estándar de la aplicación Fotos. El usuario abre una foto, pulsa el botón Editar y selecciona la extensión deseada de la lista de las instaladas. Después de la edición, el resultado se guarda de vuelta en la biblioteca y el archivo original permanece disponible para su restauración.

Esta arquitectura resuelve un problema clave de la experiencia de usuario: no es necesario cambiar entre aplicaciones, exportar e importar imágenes, ni hacer seguimiento de versiones. Según la WWDC 2025, todas las extensiones funcionan en un proceso aislado con su propio sandbox y tiempo de ejecución limitado — hasta 30 segundos por operación de edición.

La extensión no tiene acceso a archivos arbitrarios en la memoria del dispositivo — solo a la foto que el usuario ha pasado explícitamente a través de la interfaz de selección. Esto garantiza la seguridad de los datos del usuario al utilizar herramientas de terceros.

PhotoKit: Arquitectura y Componentes Clave

PhotoKit es un framework de Apple para trabajar con la biblioteca multimedia del dispositivo, introducido en iOS 8. Proporciona acceso programático a los recursos de Fotos, incluyendo imágenes, vídeos, álbumes y metadatos. Para las extensiones de edición, PhotoKit actúa como capa intermedia entre el almacenamiento y la interfaz de modificación.

PHAsset y PHAssetResource

PHAsset representa un objeto multimedia individual en la biblioteca — una foto o un vídeo. A través de PHAsset se pueden obtener metadatos: fecha de captura, tipo de archivo, ubicación en el mapa y orientación de la cámara. PHAssetResource proporciona acceso a los recursos subyacentes — por ejemplo, al archivo de foto original en formato RAW o HEIC.

Para una extensión de edición, PHContentEditingInput es de vital importancia — un objeto que contiene el archivo completo de imagen (o vídeo) disponible para lectura y procesamiento. La extensión recibe este objeto en el momento de la activación y lo utiliza como material de origen.

PHImageManager y Almacenamiento en Caché

PHImageManager gestiona la carga y el almacenamiento en caché de imágenes. Para una extensión de edición, no se utiliza directamente — la extensión recibe el archivo completo a través de PHContentEditingInput. Sin embargo, PHImageRequestOptions permite configurar los parámetros de la solicitud: tamaño, tipo de entrega (síncrona o asíncrona) y formato del resultado.

Según Apple, PHImageManager almacena automáticamente en caché las miniaturas de las imágenes en la RAM, lo que acelera la visualización repetida de vistas previas. Para las extensiones de edición, se recomienda utilizar PHImageRequestOptionsDeliveryModeHighQualityFormat para obtener la mejor calidad de imagen.

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
}

Creación de una Extensión: PHContentEditingController

Cada Photo Editing Extension implementa el protocolo PHContentEditingController — el elemento central de control de la extensión. El protocolo define métodos para mostrar la interfaz, recibir datos de entrada y guardar el resultado.

Métodos Clave del Protocolo

beginContentEditing(with:) se llama cuando comienza la sesión de edición. La extensión recibe PHContentEditingInput y debe mostrar la interfaz con la imagen original. finishContentEditing(completionHandler:) finaliza la edición — la extensión devuelve PHContentEditingOutput con el archivo modificado y AdjustmentData. cancelContentEditing() cancela los cambios sin guardarlos.

Un matiz importante: en el momento de la llamada a beginContentEditing, la extensión obtiene acceso solo a una versión de la foto — la que ha solicitado el usuario. No puede acceder a otra foto o álbum. Esta es una restricción del sandbox introducida por Apple por seguridad.

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

Arquitectura de Separación

PHContentEditingController separa la interfaz de edición de la lógica de guardado. El proceso principal de iOS llama a beginContentEditing, la extensión muestra su interfaz de usuario, el usuario realiza cambios, luego finishContentEditing genera un nuevo archivo. Apple recomienda realizar todo el procesamiento intensivo en recursos — filtros CIFilter, manipulaciones de Core Image — en un hilo en segundo plano, no en el principal, para no bloquear la interfaz.

Edición No Destructiva mediante AdjustmentData

PHAdjustmentData es el mecanismo clave que permite la edición no destructiva en Photo Editing Extension. Es un objeto que contiene información sobre los cambios aplicados en un formato arbitrario. La extensión serializa los parámetros de filtros, máscaras y configuraciones en AdjustmentData y los guarda junto con la imagen modificada.

Al reabrir la foto, la extensión lee AdjustmentData, restaura el estado anterior de la interfaz y permite al usuario continuar la edición desde el mismo punto. Si la extensión no está instalada, la foto se muestra en la última versión guardada, mientras que el original se almacena por separado.

Según la documentación de Apple, PHAdjustmentData almacena formatIdentifier y formatVersion — cadenas para identificar el formato de datos. Al actualizar la extensión, se debe comprobar la versión y manejar correctamente los formatos antiguos.

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

En el momento de finishContentEditing, la extensión escribe AdjustmentData en el objeto PHContentEditingOutput junto con el archivo de imagen modificado. El sistema guarda entonces ambos componentes: la versión para visualización y los metadatos para restaurar la sesión de edición.

Integración con la Aplicación Fotos

Photo Editing Extension aparece automáticamente en el menú de la aplicación Fotos después de instalar la aplicación que la contiene. El usuario abre una foto, selecciona Editar, y en la fila inferior de herramientas se muestran todas las extensiones de edición instaladas — tanto del sistema como de terceros.

Registro de la Extensión

La extensión se registra a través del Info.plist de la aplicación principal con la clave NSExtensionActivationRule, que especifica qué tipos de contenido activan la extensión. Para un editor de fotos, ActivationRule normalmente requiere image — la extensión no aparecerá para vídeos o Live Photos.

Apple recomienda especificar tipos de activación concretos para no sobrecargar el menú de edición. Si la extensión solo admite JPEG y HEIC, conviene limitar la activación a estos 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>

Interacción con el Usuario

Después de seleccionar una extensión, iOS crea un proceso separado con un UIViewController personalizado que se muestra sobre la interfaz de Fotos. El usuario ve su foto, las herramientas de la extensión y los botones Cancelar/Listo. La extensión no puede cambiar la navegación fuera de su propio controlador ni acceder a otras partes del sistema.

Según las Guías de Interfaz Humana de Apple, la interfaz de la extensión debe ser mínima y funcional — sin anuncios, enlaces extraños ni elementos de navegación innecesarios. Se recomienda utilizar UIScrollView para mostrar la paleta de herramientas y no saturar la pantalla.

Preguntas Frecuentes

¿Cómo obtiene Photo Editing Extension acceso a la foto?

La extensión recibe PHContentEditingInput con la URL del archivo de imagen completo a través del método beginContentEditing(with:). El acceso se concede solo a la foto seleccionada — sin derechos sobre otros recursos de la biblioteca.

¿Puede la extensión modificar la foto original?

No, el original nunca se modifica. La extensión crea una nueva versión a través de PHContentEditingOutput, y AdjustmentData almacena los parámetros de los cambios para poder revertir al estado original.

¿Qué tipos de archivo admite Photo Editing Extension?

La extensión funciona con todos los formatos que admite PhotoKit: JPEG, HEIC, RAW, PNG, TIFF y Live Photos. Las limitaciones se establecen mediante NSExtensionActivationRule en el Info.plist de la extensión.

¿Cuánto tiempo se permite para la edición?

iOS asigna hasta 30 segundos para la operación finishContentEditing. Si se supera el límite, la extensión se termina forzosamente y los cambios no se guardan. El procesamiento en segundo plano con CIFilter no prorroga este tiempo.

¿Se puede usar Core Image y Metal en la extensión?

Sí, Core Image (CIFilter) y Metal (para shaders personalizados) son totalmente compatibles. Apple recomienda mover los cálculos pesados a hilos en segundo plano mediante Grand Central Dispatch.

Resumen

  • Photo Editing Extension es una herramienta de edición integrable en la aplicación Fotos que funciona sin cambiar de aplicación
  • La arquitectura utiliza PHContentEditingController para gestionar la sesión de edición y recibir datos de entrada
  • PhotoKit proporciona PHAsset, PHImageManager y PHContentEditingInput para acceder a los recursos multimedia del dispositivo
  • PHAdjustmentData permite la edición no destructiva — serialización de los parámetros de cambio con capacidad de reversión
  • La extensión funciona en un sandbox con un límite de 30 segundos y acceso a solo una foto por sesión
  • Se admiten Core Image, Metal y todos los formatos de PhotoKit: JPEG, HEIC, RAW, PNG, TIFF y Live Photos

Desarrollaremos una aplicación móvil llave en mano

IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.

Discutir el proyecto

Lea también