Descripción general de las extensiones de apps
Comprenda las extensiones para compartir, de acción y otras.
Descripción general de las extensiones de apps es una lección gratuita de Swift Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Swift Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Swift Academy incluye 4 lecciones en total.
Qué son las extensiones de app
Una extensión de app permite que su app proporcione funcionalidades dentro de otras apps o superficies del sistema, como compartir contenido, teclados personalizados, indexación de Spotlight y mucho más. Cada extensión es un destino independiente, con su propio ciclo de vida, sandbox y punto de entrada definido por el sistema.
// Extensions run in their own process, launched
// by the host (Photos, Safari, Messages, the system),
// not by your main app.App anfitriona, contenedora y sandbox
Hay tres participantes: la app anfitriona invoca la extensión, su app contenedora la distribuye y la propia extensión se ejecuta en un sandbox. La extensión no puede comunicarse libremente con su app: se comunican mediante un App Group, nunca mediante acceso directo a la memoria.
import Foundation
// Container app + Extension target share data via
// an App Group, e.g. group.com.example.app
let group = "group.com.example.app"
_ = groupExtensiones para compartir
Una Share Extension aparece en la hoja de compartir del sistema y permite a los usuarios enviar contenido (texto, URL e imágenes) desde cualquier app a la suya. Hereda de un controlador de vista o lo aloja, y lee los elementos compartidos desde el contexto de la extensión.
import Foundation
// Share extension reads incoming items:
// extensionContext?.inputItems
// each NSExtensionItem has attachments (NSItemProvider)
let share = "appears in the share sheet"
_ = shareLeer elementos compartidos
El contenido compartido llega como archivos adjuntos NSItemProvider. Debe comprobar el identificador de tipo y cargar el valor de forma asíncrona. Así obtiene una extensión para compartir la URL o la imagen que el usuario está compartiendo.
import UniformTypeIdentifiers
func handle(_ provider: NSItemProvider) {
if provider.hasItemConformingToTypeIdentifier(
UTType.url.identifier) {
provider.loadItem(
forTypeIdentifier: UTType.url.identifier) {
value, _ in
print("shared url:", value ?? "none")
}
}
}Extensiones de acción
Una Action Extension transforma o muestra contenido en el mismo lugar —por ejemplo, traduce texto seleccionado o anota un PDF— y puede devolver un resultado a la app anfitriona. A diferencia de una extensión para compartir, está diseñada para actuar sobre el contenido en lugar de enviarlo a otro sitio.
import Foundation
// Action extension may return modified items:
// extensionContext?.completeRequest(
// returningItems: outputItems)
let action = "acts on content, can return a result"
_ = actionExtensión de servicio de notificaciones
Una Notification Service Extension intercepta las notificaciones push entrantes con mutable-content: 1 para modificarlas antes de mostrarlas: descifrar el cuerpo, descargar un archivo multimedia adjunto o reescribir el título, todo ello dentro de un límite de tiempo breve.
import UserNotifications
// Override in UNNotificationServiceExtension:
// didReceive(_ request:, withContentHandler:)
// mutate bestAttemptContent, then call the handler
let service = "modifies push before it shows"
_ = serviceExtensión de contenido de notificaciones
Una Notification Content Extension proporciona una interfaz personalizada para una notificación expandida —un mapa, un reproductor multimedia o controles interactivos— que se muestra cuando el usuario mantiene pulsado el banner. Se vincula a una categoría de notificación.
import UserNotifications
// UNNotificationContentExtension renders a custom view
// for a given UNNotificationCategory when expanded.
let content = "custom expanded notification UI"
_ = contentCiclo de vida de completeRequest
Las extensiones tienen una vida corta. Cuando termine, llame a extensionContext?.completeRequest(returningItems:completionHandler:) para indicar que ha finalizado y permitir que la app anfitriona cierre la extensión. Para cancelar, use cancelRequest(withError:). Mantener el proceso abierto desperdicia recursos y puede hacer que el sistema lo finalice.
import Foundation
func finish(context: NSExtensionContext?) {
context?.completeRequest(
returningItems: [], completionHandler: nil)
}Otros puntos de extensión
iOS ofrece muchos puntos de extensión: teclados personalizados, proveedores de documentos, indexación de Spotlight, bloqueadores de contenido de Safari, intents de Siri, edición de fotos y extensiones de proveedores de archivos. Cada uno adopta un protocolo definido por el sistema, declarado mediante un NSExtensionPointIdentifier en su Info.plist.
// Info.plist of an extension declares its point:
// NSExtension > NSExtensionPointIdentifier
// e.g. com.apple.share-services
// com.apple.usernotifications.service
let point = "each extension declares its point"
_ = pointLímites de memoria y tiempo
Las extensiones se ejecutan con límites más estrictos que la app principal: menos memoria y un límite breve de tiempo real. Realice el mínimo trabajo posible, evite asignaciones grandes y delegue el procesamiento pesado en la app principal mediante almacenamiento compartido cuando sea posible.
import Foundation
// Tight memory + short runtime.
// Pattern: extension stages data in the App Group,
// the main app processes it fully on next launch.
let limits = "keep extensions lean and fast"
_ = limitsCompartir código entre destinos
Para evitar duplicar la lógica, coloque los modelos y auxiliares compartidos en un framework o paquete de Swift del que dependan tanto la app como la extensión. Marque solo lo que necesite cada destino; la extensión enlaza el mismo código sin copiarlo.
import Foundation
// Shared Swift package 'AppCore' linked by:
// - main app target
// - share extension target
// - widget extension target
let shared = "one source of truth for models"
_ = sharedComprobación rápida
Recuerde cómo se comunica una extensión con su app contenedora.
Resumen
Ha repasado las extensiones de app:
- Las extensiones son destinos independientes y aislados que un host inicia; entre sus tipos se incluyen las extensiones para compartir, de acción, de servicio de notificaciones y de contenido de notificaciones.
- Lea el contenido entrante mediante
NSItemProvidery finalice concompleteRequest. - Cada extensión declara su
NSExtensionPointIdentifiery se ejecuta con límites estrictos de memoria y tiempo. - Comparta los datos mediante un App Group y reutilice el código con un paquete compartido.
Preguntas frecuentes
¿La lección «Descripción general de las extensiones de apps» es gratis?
Sí — el texto completo de «Descripción general de las extensiones de apps» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Swift Academy, actualiza a CoddyKit PRO. El curso de Swift Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Descripción general de las extensiones de apps»?
Comprenda las extensiones para compartir, de acción y otras. Practicas Swift Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Swift Academy?
No se requiere experiencia previa. Swift Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «Descripción general de las extensiones de apps»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Swift Academy?
Sí. Cada lección de Swift Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Cómo crear un widget con WidgetKit
- Proveedores de líneas de tiempo y snapshots
- Descripción general de las extensiones de apps
- App Intents y Shortcuts