Today Widget: qué es, tipos y creación del widget de notificaciones

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

Today Widget es una extensión de iOS que muestra información interactiva directamente en el Centro de Notificaciones o en la pantalla “Hoy”. El usuario ve datos actualizados — clima, tipo de cambio, calendario — sin abrir la aplicación principal. Según Apple WWDC (2025), el uso de WidgetKit creció un 40% tras la introducción de los widgets interactivos en iOS 17. Today Widget resuelve el problema del acceso rápido a la información: una mirada a la pantalla — y el usuario obtiene los datos necesarios sin navegar por la aplicación.

Puntos clave

  • Today Widget — una extensión de iOS para mostrar información en el Centro de Notificaciones.
  • WidgetKit — un framework moderno para crear widgets (iOS 14+).
  • NCWidgetProviding — un protocolo para extensiones del Centro de Notificaciones (iOS 8–13).
  • Auto Layout — adaptación del widget a diferentes tamaños de pantalla.
  • Timeline Provider — mecanismo de actualización de datos en WidgetKit.

Qué es Today Widget

Today Widget (también conocido como widget del Centro de Notificaciones) es un elemento de interfaz de iOS que muestra información resumida de una aplicación sin necesidad de abrirla. El usuario ve el widget deslizando hacia la izquierda en la pantalla de bloqueo o en la pantalla de inicio. El widget puede mostrar datos dinámicos — tipo de cambio, últimas noticias, estado de tareas, estado del dispositivo.

Históricamente, Today Widget apareció en iOS 8 como una extensión del Centro de Notificaciones implementada a través del framework Centro de Notificaciones. Con iOS 14, Apple presentó WidgetKit — una arquitectura completamente rediseñada que permite colocar widgets directamente en la pantalla de inicio. Today Widget en el sentido moderno es un widget de WidgetKit ubicado en la sección “Hoy” (la sección de widgets a la izquierda de la primera pantalla).

Por qué necesitas un Today Widget

El objetivo principal es reducir el tiempo de acceso a la información. En lugar de abrir la aplicación, navegar por los menús y esperar la carga, el usuario ve inmediatamente los datos necesarios. Según Apple (2024), las aplicaciones con widgets muestran un 27% más de compromiso de los usuarios. Casos de uso adicionales: acciones rápidas (marcar una tarea como completada), monitoreo (frecuencia cardíaca, actividad) y estado (carga de la batería, notificaciones).

WidgetKit vs NCWidgetProviding

Un desarrollador de Today Widget tiene dos enfoques disponibles: WidgetKit moderno (iOS 14+) y la extensión heredada NCWidgetProviding (iOS 8–13). La elección depende de la versión mínima compatible de iOS. WidgetKit se recomienda para proyectos nuevos, NCWidgetProviding para soportar dispositivos antiguos.

CaracterísticaWidgetKitNCWidgetProviding
iOS mínimoiOS 14iOS 8
UbicaciónPantalla de inicio + “Hoy”Solo “Hoy”
TamañosSmall, Medium, LargeUn tamaño fijo
InteractividadBotones e interruptores iOS 17+Solo abrir aplicación
ActualizaciónTimeline ProviderwidgetPerformUpdate
LenguajeSwiftUIUIKit

Cuándo usar WidgetKit

Si tu aplicación es compatible con iOS 14 y versiones posteriores — usa WidgetKit. Proporciona capacidades enriquecidas: múltiples tamaños, configuración mediante intents, rediseño con iOS 17 y enlaces profundos. La declaratividad de SwiftUI hace que el código del widget sea compacto y legible. Timeline Provider gestiona automáticamente el programa de actualizaciones teniendo en cuenta el consumo de energía.

Cuándo usar NCWidgetProviding

Solo si se requiere compatibilidad con iOS 9–13. NCWidgetProviding es más simple de implementar — es un UIViewController normal con un protocolo. Sin embargo, es limitado: un solo tamaño, solo UIKit, sin configuración. Apple recomienda cambiar a WidgetKit incluso para proyectos antiguos usando availability check: WidgetKit en iOS 14+, NCWidgetProviding como fallback.

Tipos de Today Widgets

En iOS moderno, hay tres tipos de widgets según su propósito funcional. Cada tipo resuelve su propio problema y requiere un enfoque diferente para el diseño de datos e interfaz. La clasificación ayuda a elegir la arquitectura correcta para tu aplicación.

Widgets informativos

Muestran información estática o actualizada periódicamente: clima, fecha, tipo de cambio, estado del servidor. Los datos se actualizan según un programa a través de Timeline Provider. El usuario no interactúa con el widget — solo lee. Los widgets informativos son los más simples de implementar, no requieren manejo de eventos táctiles y funcionan en segundo plano sin permisos adicionales.

Widgets interactivos

Con iOS 17, WidgetKit admite botones, interruptores y deslizadores en los widgets. El usuario puede realizar una acción — marcar una tarea, pausar la música, encender una luz — sin abrir la aplicación. Los widgets interactivos usan App Intents para pasar acciones a la aplicación principal. Limitación: solo en la pantalla de inicio, no en la sección “Hoy” hasta iOS 18.

Widgets configurables

El usuario personaliza los datos mostrados a través de la interfaz del sistema — selecciona una ciudad para el clima, una cuenta para finanzas, una categoría para noticias. Se implementa mediante Intents Extension y configuración en WidgetBundle. Los widgets configurables aumentan la personalización y relevancia de la información para cada usuario.

Creación de un widget WidgetKit

Veamos el proceso de creación de un Today Widget en SwiftUI usando WidgetKit. El widget mostrará el tipo de cambio actual con actualizaciones automáticas. WidgetKit requiere tres componentes: una estructura de widget, un Provider con configuración y una Vista para la visualización.

swift
import WidgetKit
import SwiftUI

@main
struct CurrencyWidget: Widget {
    let kind: String = "CurrencyWidget"

    var body: some WidgetConfiguration {
        StaticConfiguration(kind: kind, provider: Provider()) { entry in
            CurrencyWidgetEntryView(entry: entry)
        }
        .configurationDisplayName("Currency Rate")
        .description("Current USD/RUB exchange rate")
        .supportedFamilies([.systemSmall, .systemMedium])
    }
}

El Provider es responsable de preparar los datos para su visualización. El método getTimeline crea un programa de actualización: la próxima actualización en 15 minutos. TimelineProvider garantiza que el widget muestre datos actualizados sin tener que consultar constantemente al servidor.

swift
struct Provider: TimelineProvider {
    func getSnapshot(in context: Context,
                      completion: @escaping (CurrencyEntry) -> Void) {
        let entry = CurrencyEntry(date: Date(), rate: 92.5)
        completion(entry)
    }

    func getTimeline(in context: Context,
                     completion: @escaping (Timeline<CurrencyEntry>) -> Void) {
        let rate = CurrencyService().fetchRate()
        let entry = CurrencyEntry(date: Date(), rate: rate)
        let nextUpdate = Calendar.current.date(
            byAdding: .minute, value: 15, to: Date()
        ) ?? Date()
        let timeline = Timeline(entries: [entry], policy: .after(nextUpdate))
        completion(timeline)
    }
}

Timeline Provider y actualización de datos

Timeline Provider es el mecanismo central de WidgetKit para gestionar los datos de Today Widget. En lugar de actualizaciones periódicas por temporizador (como en el antiguo NCWidgetProviding), WidgetKit utiliza el concepto de timeline — una secuencia de entradas con marcas de tiempo. El sistema muestra la entrada actual hasta que caduca, luego cambia a la siguiente o solicita una nueva.

Políticas de actualización

Timeline admite tres políticas: .after(date) — próxima actualización en la fecha especificada; .never — el widget no se actualiza hasta una llamada explícita a WidgetCenter.reloadAllTimelines; .atEnd — actualización después de mostrar la última entrada. Para un Today Widget con tipo de cambio, la política .after con un intervalo de 15–30 minutos es óptima. La eficiencia energética es una ventaja clave de WidgetKit: el sistema agrupa las actualizaciones de todos los widgets en una sola ventana.

WidgetCenter: actualización programática

Si los datos cambian antes de que caduque el timeline (por ejemplo, el usuario actualizó el tipo de cambio en la aplicación), llama a WidgetCenter.shared.reloadTimelines(ofKind: “CurrencyWidget”). Esto solicitará un nuevo timeline al Provider y actualizará la visualización. WidgetCenter también permite recargar todos los widgets de la aplicación con un solo comando — conveniente después de la sincronización de datos.

Directrices de diseño de widgets

Apple impone requisitos estrictos para el diseño de Today Widget: el contenido debe ser legible de un vistazo, sin elementos innecesarios y con una jerarquía clara. Violar las recomendaciones de HIG (Human Interface Guidelines) es un motivo de rechazo al publicar en la App Store. Tres principios: legibilidad instantánea, consistencia y jerarquía.

Legibilidad instantánea — lectura de un vistazo

El usuario pasa menos de un segundo en un widget. No agregues más de 3–4 elementos de datos. Fuente — mínimo 11pt para etiquetas, 17pt para valores. Usa negrita (Semibold) para los números clave. Evita el desplazamiento — Today Widget no se desplaza.

Adaptación a tamaños

WidgetKit admite tres tamaños: Small (170×170pt), Medium (364×170pt), Large (364×382pt). Para Today Widget en la sección “Hoy”, Medium es la opción más común. Diseño adaptable mediante EnvironmentValues: cambia la densidad de información según el tamaño. Small — un número, Medium — número + gráfico, Large — tabla.

Compatibilidad con modo oscuro y Dynamic Type

El widget debe mostrarse correctamente en temas claro y oscuro sin acciones adicionales del desarrollador — WidgetKit recoge automáticamente los colores del sistema. Dynamic Type para widgets es limitado: el tamaño de fuente es fijo, pero debe ser legible. UIColor.label y UIColor.systemBackground son los colores base para texto y fondo en ambos temas.

Preguntas frecuentes

¿En qué se diferencia Today Widget de un widget normal en la pantalla de inicio?

Hoy en día es el mismo widget de WidgetKit. La diferencia está solo en la ubicación: en la pantalla de inicio y en la sección “Hoy” (a la izquierda de la primera pantalla). Antes de iOS 14, Today Widget era una extensión separada de NCWidgetProviding que solo funcionaba en el Centro de Notificaciones. Ahora es un único WidgetKit.

¿Con qué frecuencia se actualiza Today Widget?

WidgetKit no actualiza los widgets mediante temporizador. El desarrollador establece el programa a través de Timeline Provider: entradas con marcas de tiempo. El sistema garantiza una actualización en la hora especificada considerando el ahorro de energía — puede retrasarse unos minutos. El intervalo mínimo es de 15 minutos, pero Apple recomienda no más de una vez por hora.

¿Se puede hacer un Today Widget con botones interactivos?

Sí, a partir de iOS 17, WidgetKit admite botones, interruptores y deslizadores a través de App Intents. Los elementos interactivos funcionan en la pantalla de inicio del iPhone y iPad. El soporte en la sección “Hoy” apareció en iOS 18. Para iOS 16 y versiones anteriores — solo abrir la aplicación al tocar el widget.

¿Cuántos Today Widgets puede tener una aplicación?

No hay límites. Una aplicación puede registrar cualquier cantidad de widgets a través de WidgetBundle — cada uno con su propio tipo, tamaño y configuración. El usuario los agrega individualmente. Se recomienda no más de 3–5 widgets para no abrumar la elección del usuario.

¿Cómo probar Today Widget en el simulador?

WidgetKit es totalmente compatible con el simulador de iOS. Ejecuta el esquema del target WidgetKit en Xcode — el widget aparecerá en la pantalla de inicio del simulador. Para probar Timeline Provider, usa WidgetKit Debug Profile: Xcode → Product → Profile → WidgetKit Debug. Verifica el comportamiento real en un dispositivo físico.

Resumen

  • Today Widget — una extensión de iOS para mostrar información sin abrir la aplicación.
  • WidgetKit (iOS 14+) — un framework moderno, NCWidgetProviding — heredado para versiones antiguas.
  • Tres tipos de widgets: informativos, interactivos (iOS 17+), configurables mediante Intents.
  • Timeline Provider gestiona el programa de actualizaciones en lugar de temporizadores.
  • El diseño debe ser legible de un vistazo: mínimos elementos, fuente grande, adaptación de tamaño.
  • Interactividad mediante App Intents — botones e interruptores sin abrir la aplicación.
  • WidgetCenter.shared.reloadTimelines — actualización programática cuando cambian los datos.

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