Action Extension: qué es, cómo funciona y desarrollo de la extensión

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

Action Extension es una extensión de iOS que realiza acciones personalizadas sobre contenido de otras aplicaciones sin cambiar de contexto. A diferencia de Share Extension, que envía datos a otra aplicación, Action Extension transforma el contenido en el mismo lugar: traduce texto, cambia filtros de imagen, corrige ortografía o genera PDF. Según Apple (2024), Action Extension es el segundo tipo de extensión más popular después de Share Extension, utilizado en el 42% de las aplicaciones de la categoría “Productividad”. La acción instantánea sin iniciar la aplicación principal es la ventaja clave para el usuario.

Puntos clave

  • Action Extension — extensión de iOS para transformar contenido en la aplicación anfitriona.
  • NSExtensionContext — contexto de ejecución con datos de entrada y salida.
  • UTI — Uniform Type Identifiers para determinar el tipo de contenido procesado.
  • UIActivity — mecanismo legacy para implementar acciones en iOS 6–7.
  • App Groups — transferencia de datos procesados de vuelta a la aplicación.

Qué es Action Extension

Action Extension es un tipo de extensión de iOS que permite realizar acciones sobre contenido directamente en el contexto de la aplicación anfitriona. El usuario selecciona texto en Safari, pulsa “Acciones” y elige, por ejemplo, “Corregir ortografía” — la extensión procesa el texto y devuelve el resultado sin salir del navegador. La extensión recibe datos de entrada a través de NSExtensionContext y puede devolver contenido modificado.

Action Extension apareció en iOS 8 como parte de la arquitectura de app extensions. Su característica clave es que la extensión no tiene interfaz propia (opcional) y se ejecuta en el contexto de la aplicación anfitriona. El usuario no abandona la pantalla actual, lo que garantiza una fricción cognitiva mínima. Según Apple, Action Extension es el único tipo de extensión que puede leer y modificar simultáneamente el contenido de la aplicación anfitriona (a través de NSExtensionContext con devolución de resultado).

Dónde se utiliza Action Extension

Action Extension se utiliza en diversos escenarios: traducir texto en el navegador, crear PDF desde una página web, aplicar un filtro a una foto en la galería, corregir ortografía en cualquier campo de texto, acortar URL, cifrar texto y añadir marcadores. La versatilidad hace de Action Extension una herramienta popular para aplicaciones de las categorías “Utilidades” y “Productividad”.

Action Extension vs Share Extension

Action Extension y Share Extension a menudo se confunden, pero sus propósitos son fundamentalmente diferentes. Share Extension envía contenido de la aplicación anfitriona a tu aplicación; Action Extension procesa el contenido y lo devuelve. La diferencia afecta la arquitectura, la experiencia del usuario y los requisitos de configuración de Info.plist.

CaracterísticaAction ExtensionShare Extension
PropósitoTransformación de contenidoTransferencia de contenido a la aplicación
InterfazOpcional (personalizada)SLComposeServiceViewController
Devolución de datosSí, mediante completeRequestNo
ContextoPermanece en la aplicación anfitrionaCambia a la extensión
Posición en el menúAction Sheet (parte superior)Share Sheet (parte inferior)
Acción típicaTraducción, corrección, filtroGuardado, publicación

Cómo el usuario elige una acción

Action Extension aparece en el menú de acciones (Action Sheet) al pulsar el botón “Compartir” o “...”. iOS coloca automáticamente las Action Extensions en la parte superior de la hoja (acciones) y las Share Extensions en la parte inferior (aplicaciones). Escenario del usuario: seleccionó texto → pulsó “Acciones” → eligió tu Action Extension → recibió el resultado procesado sin cambiar de aplicación.

Arquitectura de Action Extension

Action Extension consta de un target en Xcode, un UIViewController para mostrar la interfaz (opcional), NSExtensionContext para la entrada/salida de datos y la configuración de Info.plist. La arquitectura es más simple que la de Share Extension: no hay una interfaz de composición obligatoria y la extensión puede funcionar completamente sin UI.

Componentes de Action Extension

Target — un bundle separado con un identificador heredado de la aplicación principal. UIViewController — interfaz opcional para mostrar progreso, configuración o resultados. NSExtensionContext — un contenedor con datos de entrada (inputItems) y el método completeRequest para devolver resultados. Info.plist — configuración de activación mediante NSExtensionActivationRule y atributos (NSExtensionAttributes) para especificar los tipos de contenido compatibles.

NSExtensionContext y flujos de datos

Action Extension recibe datos de entrada a través de extensionContext?.inputItems — un array de NSExtensionItem. Cada elemento contiene attachments con datos y UTI. Tras el procesamiento, la extensión llama a completeRequest(returningItems:) con un array de NSExtensionItem de salida. La aplicación anfitriona recibe los datos procesados y los muestra. Modelo asíncrono: la extensión puede realizar operaciones largas, manteniendo el contexto hasta 30 segundos.

Crear un Action Extension

Veamos cómo crear un Action Extension en Swift para traducir texto seleccionado. La extensión recibe texto de la aplicación anfitriona, lo envía a un servidor de traducción y devuelve el resultado. ActionViewController es el controlador base creado por Xcode al añadir un 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
                    }
                }
            }
        }
    }
}

Después del procesamiento, la extensión devuelve el resultado a la aplicación anfitriona. completeRequest con datos de salida es un escenario alternativo en el que la extensión no muestra una UI sino que devuelve inmediatamente el contenido procesado.

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
)

Procesamiento de datos y devolución de resultados

Action Extension puede funcionar en dos modos: con UI y sin UI. En el modo sin UI, la extensión realiza la acción completamente en segundo plano y llama a completeRequest inmediatamente después del procesamiento. En el modo con UI, la extensión muestra un controlador, el usuario confirma la acción y solo entonces completeRequest envía el resultado. La selección del modo depende de la complejidad de la acción y la necesidad de entrada del usuario.

Carga de datos desde attachment

El método loadItem(forTypeIdentifier:) funciona de forma asíncrona — los datos pueden ser grandes (imágenes, vídeos). NSItemProvider gestiona la transmisión y el almacenamiento en caché. Para imágenes use kUTTypeImage, para archivos use kUTTypeFileURL. Importante: loadItem puede llamarse en un hilo de fondo — actualice la UI solo a través de DispatchQueue.main.

Devolución de datos modificados

Action Extension devuelve datos procesados mediante completeRequest con un array de NSExtensionItem. Cada elemento corresponde al tipo de datos de salida. La aplicación anfitriona puede reemplazar el contenido original por el procesado — por ejemplo, reemplazar la imagen original por una filtrada. NSExtensionItem admite las mismas UTI que en la entrada, más otras adicionales (por ejemplo, public.html para contenido web).

Casos de uso de Action Extension

Action Extension se utiliza en decenas de escenarios — desde utilidades simples hasta flujos de trabajo empresariales complejos. Los ejemplos clásicos abarcan operaciones de texto, gráficos y archivos, así como la integración de contenido web.

Escenarios de texto

Action Extension para texto: traducción, corrección ortográfica, conteo de caracteres, cambio de mayúsculas/minúsculas, cifrado, generación de código QR desde texto. El usuario selecciona texto en cualquier aplicación con campo de texto (Safari, Notas, Mail) y realiza la acción con un solo toque. El resaltado de sintaxis de código, el formato Markdown y el acortamiento de URL son ejemplos populares de Action Extension para usuarios avanzados.

Escenarios gráficos

Para imágenes, Action Extension ofrece: aplicar filtros, recortar, redimensionar, convertir formatos (HEIC a JPEG), añadir marca de agua, reconocer texto (OCR) y comprimir. El procesamiento de imágenes debe ser rápido — el usuario espera un resultado en 2–3 segundos. Para operaciones pesadas, use Core Image en GPU o colas en segundo plano.

Escenarios web

Action Extension para URL: crear PDF desde una página web, guardar en Pocket/Pinterest, verificar la velocidad del sitio, archivar una página, obtener metadatos Open Graph, generar una captura de pantalla de la página. La generación de PDF es uno de los escenarios más demandados: el usuario convierte una página web a PDF sin abrir servicios de terceros.

Preguntas frecuentes

¿Cuál es la diferencia clave entre Action Extension y Share Extension?

Share Extension envía contenido de la aplicación anfitriona a tu aplicación. Action Extension procesa el contenido en el lugar y devuelve el resultado. Share — transferencia, Action — transformación. Esta diferencia fundamental determina la arquitectura y la UX.

¿Puede un Action Extension no tener interfaz?

Sí. Si la acción no requiere entrada del usuario (por ejemplo, conteo de caracteres), la extensión puede realizarla en segundo plano y devolver el resultado inmediatamente a través de completeRequest. En Info.plist debe especificar NSExtensionActivationSupportsWebURL u otra UTI que coincida con el tipo de datos.

¿En qué aplicaciones aparece Action Extension?

En cualquier aplicación que admita UIActivityViewController o controladores de acción estándar. Estas incluyen Safari, Fotos, Archivos, Notas, Mail y miles de aplicaciones de terceros. Action Extension no funciona en aplicaciones que no utilizan los mecanismos de acción estándar de iOS.

¿Cómo devolver contenido procesado a la aplicación anfitriona?

A través de extensionContext.completeRequest(returningItems:) con un array de NSExtensionItem. Cada elemento de salida contiene un NSItemProvider con los datos procesados. La aplicación anfitriona recibe el resultado en el delegado de UIActivityViewController o un callback similar.

¿Cuáles son las limitaciones de Action Extension?

La extensión se ejecuta hasta 30 segundos, después de lo cual iOS la finaliza forzosamente. No hay acceso directo a la aplicación principal — solo a través de App Groups. Action Extension no puede realizar tareas en segundo plano después de finalizar. Para operaciones largas, use NSURLSession en segundo plano con una notificación en el próximo inicio.

Resumen

  • Action Extension — extensión de iOS para transformar contenido directamente en la aplicación anfitriona.
  • Se diferencia de Share Extension por devolver datos procesados a través de NSExtensionContext.
  • Puede funcionar con UI o completamente en segundo plano sin interfaz.
  • Admite todos los tipos de contenido: texto, imágenes, URL, archivos mediante UTI.
  • Se utiliza para traducción, filtros, generación de PDF, OCR y corrección ortográfica.
  • Límite de tiempo de ejecución — 30 segundos, acceso a la aplicación — mediante App Groups.
  • Action Extension se utiliza en el 42% de las aplicaciones de la categoría “Productividad”.

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