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 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).
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 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ística | Action Extension | Share Extension |
|---|---|---|
| Propósito | Transformación de contenido | Transferencia de contenido a la aplicación |
| Interfaz | Opcional (personalizada) | SLComposeServiceViewController |
| Devolución de datos | Sí, mediante completeRequest | No |
| Contexto | Permanece en la aplicación anfitriona | Cambia a la extensión |
| Posición en el menú | Action Sheet (parte superior) | Share Sheet (parte inferior) |
| Acción típica | Traducción, corrección, filtro | Guardado, publicació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.
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.
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.
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.
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.
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.
// 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
)
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.
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.
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).
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.
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.
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.
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
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.
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 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.
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.
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
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.
Lea también