Share Extension — qué es, cómo funciona y desarrollo de la extensión

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

Share Extension es una extensión de iOS que añade tu aplicación al menú Compartir del sistema. El usuario puede enviar contenido desde Safari, Fotos, Archivos o cualquier otra aplicación directamente a la tuya — sin copiar ni cambiar entre ventanas. Según Apple (2024), las aplicaciones con Share Extension reciben un 35% más de contenido de usuario que las aplicaciones sin capacidad de compartir. La extensión procesa texto, imágenes, vídeo, URL y archivos mediante una interfaz unificada NSExtensionItem.

Puntos clave

  • Share Extension — extensión de iOS para enviar contenido a una aplicación desde otros programas.
  • NSExtensionItem — contenedor para transferir datos entre la aplicación anfitriona y la extensión.
  • Info.plist — configuración de los tipos de contenido que procesa la extensión.
  • SLServiceTypes — mapeo a redes sociales (Twitter, Facebook) para modo heredado.
  • App Groups — almacenamiento compartido para transferir datos entre la extensión y la aplicación.

Qué es Share Extension

Share Extension es un tipo de extensión de iOS que aparece en el menú Compartir del sistema al seleccionar contenido en cualquier aplicación. El usuario resalta texto en Safari, pulsa Compartir y ve tu aplicación en la lista de acciones disponibles. Tras la selección, el contenido se pasa a la extensión para procesarlo: guardarlo, publicarlo, enviarlo o transformarlo.

A diferencia de Action Extension, Share Extension se especializa en recibir contenido de aplicaciones externas. Action Extension, por el contrario, envía datos desde tu aplicación hacia fuera. Share Extension es un punto de entrada de contenido de usuario, un elemento clave para la adquisición de usuarios: los usuarios prueban tu aplicación a través de Share Extension sin instalarla por completo. App Store prohíbe las aplicaciones cuya única función es mostrar anuncios mediante Share Extension (App Store Review Guideline 4.2).

Por qué Share Extension es importante para tu aplicación

Share Extension reduce la barrera de entrada: los usuarios envían contenido a tu aplicación desde un contexto familiar — navegador, galería, gestor de archivos. Según Branch (2024), las aplicaciones con Share Extension muestran una retención un 28% mayor en el día 7. Un efecto adicional es la viralidad: cada vez que un usuario ve tu aplicación en la hoja Compartir, se produce branding pasivo sin gasto en publicidad.

Cómo funciona Share Extension

El mecanismo de Share Extension se basa en la transferencia de contenido mediante contenedores del sistema NSExtensionItem. La aplicación anfitriona (Safari, Fotos) empaqueta el contenido seleccionado en un NSExtensionItem con un tipo especificado (public.image, public.url, public.plain-text). El sistema pasa este contenedor a la extensión, que extrae los datos mediante extensionContext.inputItems.

Ciclo de vida de la extensión

Share Extension se ejecuta en un proceso separado con tiempo de ejecución limitado — aproximadamente 30 segundos para procesar. La extensión no debe realizar operaciones largas síncronas. Para subir archivos grandes, usa NSURLSession con configuración en segundo plano. SLComposeServiceViewController es la clase base para Share Extension con vista previa del contenido y botón de envío.

Tipos de datos y Uniform Type Identifiers

iOS utiliza Uniform Type Identifiers (UTI) para determinar el tipo de contenido que se transfiere. Los principales UTI para Share Extension: public.image (fotos, capturas de pantalla), public.url (enlaces), public.plain-text (texto), public.video (archivos de vídeo) y public.file-url (archivos). La extensión registra los UTI compatibles en Info.plist mediante la clave NSExtensionActivationRule.

Arquitectura de la extensión

Share Extension consta de tres componentes: el target en Xcode, SLComposeServiceViewController y la configuración de Info.plist. La arquitectura determina qué tipos de contenido se procesan, cómo se muestra la interfaz y dónde se guardan los datos.

ComponenteFunciónCaracterísticas
TargetTarget de la extensión en XcodeBundle separado con un identificador
ViewControllerInterfaz y lógica de procesamientoSLComposeServiceViewController o personalizado
Info.plistConfiguración de activación y UTINSExtensionActivationRule con predicados
App GroupsAlmacenamiento compartido con la aplicaciónUserDefaults suite para transferencia de datos

NSExtensionActivationRule

El elemento clave de configuración de Share Extension es la regla de activación. Determina en qué condiciones aparece la extensión en la hoja Compartir. La regla se define en Info.plist como un diccionario con restricciones: número máximo de imágenes, longitud mínima de texto, presencia obligatoria de URL. La regla estándar activa la extensión para un solo tipo de contenido cualquiera.

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>

Creación de Share Extension

Veamos un ejemplo práctico de creación de una Share Extension en Swift para una aplicación de marcadores. La extensión recibe una URL desde Safari, muestra una interfaz de vista previa y guarda el enlace en App Group. SLComposeServiceViewController proporciona una interfaz de usuario ya preparada con un campo de texto y un botón de 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)
            }
        }
    }
}

Tras enviar el contenido, la extensión finaliza llamando a completeRequest — este es un paso obligatorio; sin él, el sistema no liberará el proceso de la extensión. Importante: Share Extension se ejecuta en un entorno limitado con acceso restringido a la red y al sistema de archivos — usa sesiones en segundo plano para subir contenido.

Procesamiento de tipos de contenido

Share Extension debe manejar correctamente diferentes tipos de datos de entrada: texto, imágenes, vídeo, URL y archivos. Cada tipo usa su propio UTI y método de extracción. Manejo universal — iterando por attachment.attachments con comprobaciones hasItemConformingToTypeIdentifier.

Manejo de imágenes

Las imágenes se pasan como public.image con la posibilidad de obtenerlas mediante UIImage o Data. Para imágenes grandes, usa jpegData(compressionQuality:) antes de guardarlas. Share Extension no debe modificar la imagen original sin permiso explícito del usuario. Se recomienda guardar el original en App Group y crear una vista previa para mostrarla en la interfaz.

Manejo de URL y texto

Safari y otros navegadores pasan las URL como public.url y el texto seleccionado como public.plain-text. Un único NSExtensionItem puede contener ambos tipos simultáneamente — la URL de la página y el texto seleccionado en ella. Share Extension debe comprobar todos los attachments y extraer los datos relevantes. Escenario combinado: guardar la URL como marcador y el texto como nota adjunta.

App Groups y transferencia de datos

Share Extension y la aplicación principal se ejecutan en procesos diferentes y no comparten acceso al sistema de archivos. El intercambio de datos utiliza el mecanismo de App Groups: un contenedor compartido con un identificador group.*. Tras guardar datos en App Group, la extensión notifica a la aplicación mediante CFNotificationCenter o Darwin Notify.

Configuración de App Groups

Los App Groups se activan en las Capacidades del target: selecciona App Groups y añade un identificador (por ejemplo, group.com.example.myapp). Ambos targets — la aplicación principal y la extensión — deben tener acceso al mismo grupo. UserDefaults suite permite leer y escribir datos en el almacenamiento compartido con una sobrecarga mínima.

swift
// Guardar datos en App Group desde 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()

Preguntas frecuentes

¿En qué se diferencia Share Extension de Action Extension?

Share Extension recibe contenido de otras aplicaciones en la tuya. Action Extension, por el contrario, realiza una acción sobre el contenido dentro de la aplicación anfitriona — traducir texto, modificar una imagen. Share Extension es recepción, Action Extension es transformación.

¿Qué UTI debo especificar en Info.plist?

Depende del tipo de contenido que maneje tu aplicación. Para marcadores — public.url. Para un editor de fotos — public.image. Para notas — public.plain-text. Para varios tipos, usa NSExtensionActivationRule con una combinación de predicados AND/OR.

¿Por qué Share Extension no aparece en la hoja Compartir?

Una causa común es una regla NSExtensionActivationRule incorrecta o una discrepancia de UTI. Verifica en Info.plist: la regla de activación debe coincidir con el tipo de contenido probado. También asegúrate de que la extensión esté activada en Ajustes → tu aplicación → Siri y Buscar. Xcode clean build a menudo resuelve el problema.

¿Cuánto tiempo tiene Share Extension para procesar?

El sistema asigna aproximadamente 30 segundos para la ejecución. Después, iOS finaliza forzosamente el proceso de la extensión. Para operaciones de larga duración, usa una NSURLSession en segundo plano y maneja el resultado en el siguiente inicio de la aplicación.

¿Se puede mostrar una interfaz personalizada en Share Extension?

Sí, en lugar de SLComposeServiceViewController puedes usar un UIViewController normal. En este caso, controlas completamente la interfaz. Sin embargo, debes implementar los botones de enviar y cancelar tú mismo. Interfaz personalizada se recomienda para escenarios no estándar de procesamiento de contenido.

Resumen

  • Share Extension — extensión de iOS que añade tu aplicación al menú Compartir del sistema.
  • El contenido se transfiere mediante NSExtensionItem con Uniform Type Identifiers.
  • La configuración de activación se define en Info.plist mediante NSExtensionActivationRule.
  • SLComposeServiceViewController — interfaz base con vista previa y envío.
  • App Groups — mecanismo de intercambio de datos entre la extensión y la aplicación.
  • Share Extension funciona en un entorno limitado (30 seg, acceso restringido).
  • Las aplicaciones con Share Extension reciben un 35% más de contenido de usuario.

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