View in English

  • Global Nav Open Menu Global Nav Close Menu
  • Apple Developer
Search
Cancel
  • Apple Developer
  • News
  • Discover
  • Design
  • Develop
  • Distribute
  • Support
  • Account
Only search within “”

Quick Links

5 Quick Links

Videos

Abrir menú Cerrar menú
  • Colecciones
  • Temas
  • Todos los videos
  • Información

Volver a WWDC25

  • Información
  • Resumen
  • Transcripción
  • Código
  • Novedades de watchOS 26

    Descubre las nuevas funcionalidades de watchOS 26 y aprende a integrarlas en tus apps de watchOS e iOS. Explora la arquitectura ARM64 y sumérgete en el nuevo sistema de diseño. También compartiremos actualizaciones de widgets e información sobre cómo incorporar controles al Apple Watch.

    Capítulos

    • 0:00 - Introducción
    • 0:56 - Actualización para watchOS 26
    • 3:48 - Lleva las apps a nuevos lugares
    • 9:44 - Mantente relevante y actualizado

    Recursos

    • Creating controls to perform actions across the system
    • Increasing the visibility of widgets in Smart Stacks
    • Making a configurable widget
    • MapKit
    • Migrating ClockKit complications to WidgetKit
    • Workouts and activity rings
      • Video HD
      • Video SD

    Videos relacionados

    WWDC25

    • Conoce Liquid Glass
    • Crea íconos con Icon Composer
    • Novedades de widgets

    WWDC24

    • Extend your app’s controls across the system

    WWDC23

    • Meet MapKit for SwiftUI

    WWDC22

    • Go further with Complications in WidgetKit
  • Buscar este video…

    Hola. Soy Anne y hoy hablaré sobre las nuevas funcionalidades de watchOS 26 y te daré consejos para que las uses en tus apps. Hablaré sobre las actualizaciones de watchOS 26, cómo expandir el alcance de tus apps de watchOS y iOS en el Apple Watch, y nuevas formas de mostrar contenido relevante desde tu app. Crearé una app para mostrar actividades recreativas en playas cercanas, ver el estado del mar en cualquier playa y registrar el tiempo de relajación en la playa, o donde quiera que esté, cuando preferiría estar en la playa. Comencemos. watchOS 26 trae mejoras completas, desde un diseño renovado hasta una nueva arquitectura de sistema. Hay algunas cosas que debes saber para que tus apps aprovechen watchOS. Se actualizó todo el sistema operativo, incluidos materiales y controles, actualizaciones de íconos y cambios en los espacios del sistema, como la carátula y el Centro de Control. Se actualizaron la barra de herramientas y los estilos de control. Todas las apps diseñadas para watchOS 10 y posterior usan los nuevos estilos para que haya coherencia en todo el sistema. Ejecuta tu app para verificar la apariencia de la interfaz. Si tienes estilos propios, contrólalos para que los elementos de la interfaz sean legibles con el nuevo estilo. Para obtener información sobre el diseño y la actualización de apps, ve Conoce Liquid Glass.

    Los íconos también se ven diferentes en iOS y watchOS 26.

    Usa Icon Composer para actualizar el tuyo. El ícono actualizado aparece en las notificaciones enviadas del iPhone al Apple Watch. El ícono actualizado de tu app aparece en la cuadrícula y en lista de apps, y en las notificaciones del Apple Watch. Para obtener información sobre Icon Composer y las novedades sobre los íconos, consulta Crea íconos con Icon Composer. Además del nuevo sistema de diseño, watchOS admite una nueva arquitectura. El Apple Watch Series 9 y posteriores, y el Apple Watch Ultra 2 ahora usan arm64 en watchOS 26. Usa la opción de arquitectura estándar en Xcode en tus objetivos de Apple Watch. Esto los configura para todas las arquitecturas del Apple Watch. Ten en cuenta las diferencias en arm64, sobre todo con Float, Int y la matemática basada en punteros. Procura hacer pruebas en el simulador y en los dispositivos. Desde Xcode 14, se pueden crear apps para el Apple Watch con la arquitectura arm64. El simulador del Apple Watch usa la arquitectura arm64 en el chip de Apple. Buenas noticias. Si usas arquitecturas estándar, ya creas apps para arm64. Y si usaste el simulador, ya probaste arm64. El nuevo sistema de diseño y la arquitectura son solo el comienzo de este recorrido. Veamos algunas de las nuevas oportunidades para tu app. Los controles están disponibles a partir de watchOS 26. Se pueden poner en el Centro de Control y la Pila Inteligente, y usar con el Botón de Acción en el Apple Watch Ultra. Creados con WidgetKit, los controles permiten que se realicen acciones rápidas sin abrir la app o iniciarla en una vista específica. Los controles le dan un símbolo, título, color y contexto adicional al sistema. El control se puede agregar a cualquier espacio compatible y este se muestra contextualmente.

    Los controles se pueden agregar de una app del iPhone al sistema de Apple Watch, incluso sin una app para Watch. Al tocar el control en el Apple Watch, la acción se realiza en el iPhone. Debido a esto, los controles que pongan en primer plano la app del iPhone no aparecerán en el Apple Watch. Si tienes una app para Watch, también puedes crear controles con la misma API para crear controles para iOS. Al tocar el control, la acción se realiza en el Apple Watch.

    La Pila Inteligente admite Controles, Widgets y Actividades en Vivo. Con tantas formas de mostrar contenido en la Pila Inteligente, es difícil elegir. Es útil considerar el propósito principal. Crea un control cuando quieras realizar una acción, como hacer una configuración o encender un dispositivo conectado a Internet. Crea un widget para mostrar información durante todo el día, por ejemplo, el clima o próximos eventos. Crea una actividad en vivo para eventos con un inicio y un final, como un evento deportivo o un vuelo. Para más detalles sobre los controles, consulta la sesión Amplía los controles de tu app en todo el sistema. Algunas personas quizás quieran editar widgets y controles desde tu app. En iOS, los widget se pueden editar a través de las configuraciones que proporcionas al sistema. A partir de watchOS 26, los widgets y controles se podrán personalizar de igual manera. Los widgets pueden indicar que son editables en lugar de dar recomendaciones preconfiguradas. Aquí, estoy editando la configuración del widget para ver el calendario de Amelia Island. Para que un widget sea editable, devuelve una matriz vacía de recomendaciones para indicar que no hay widgets preconfigurados y que el widget se puede editar en la carátula o la Pila Inteligente. Si tienes un widget que quieres que sea editable, agrega una verificación de disponibilidad para watchOS 26. Devuelve una matriz vacía para indicar que el widget es editable en las versiones compatibles. Para versiones anteriores, sigue devolviendo recomendaciones de intenciones. Los controles también se pueden editar. Por ejemplo, me gustaría ofrecer una configuración extra para el temporizador de meditación de mi app. Sé que la gente no siempre puede ir a la playa, así que me gustaría reproducir sonidos del mar durante la meditación. Para que sea editable, usa una AppIntentControlConfiguration para describirlo, como en iOS, y ajusta el proveedor de valores a AppIntentControlValueProvider. No solo los controles llegan a la Pila Inteligente en watchOS 26. Si tu app usa HealthKit para registrar entrenamientos, se puede sugerir en la Pila Inteligente según la rutina de la persona. Solo se debe tocar para comenzar el entrenamiento.

    Para garantizar que tu app de entrenamiento se sugiera, especifica el HKWorkoutActivityType, registra la hora de inicio y fin de los entrenamientos, y usa un HKWorkoutRouteBuilder para agregar datos de ubicación. Hablando de nuevas oportunidades, hay muchas funcionalidades nuevas para MapKit en watchOS 26. Puedes buscar un punto de interés cercano, como una tienda, obtener rutas según el tipo de transporte, como en auto, a pie y en bicicleta, y mostrar rutas superpuestas en un mapa con SwiftUI, todo con la misma API que seguro ya conoces de iOS. Es ideal para apps que desean ofrecer la opción de buscar lugares cercanos y mostrar direcciones. Aquí les muestro la ruta a una de mis playas favoritas. Para obtener más información, consulta la sesión sobre MapKit para SwiftUI. Entre los controles editables, el Centro de Control, las sugerencias de la app Entrenamiento en la carátula y las nuevas funcionalidades de MapKit, watchOS 26 ofrece muchas oportunidades en el sistema.

    Este recorrido tiene una parada más: una nueva forma de crear experiencias contextuales y relevantes en la Pila Inteligente. Puedes mostrar información y acciones en el momento más oportuno y mantener la información actualizada. watchOS 26 presenta una una nueva estructura: RelevanceKit. Permite mostrar contenido cuando el usuario lo necesita.

    RelevanceKit ofrece varios tipos de contexto que permiten sugerir widgets en la Pila Inteligente según el contexto. Algunos de estos son la fecha, las horas de sueño, la actividad física y la ubicación. En watchOS 26, tu widget puede ser relevante en puntos de interés para indicar su relevancia en cualquier ubicación para un tipo de lugar, como una tienda, una cafetería o la playa. En mi app, quiero mostrar el estado actual del mar en la Pila Inteligente cuando alguien está en la playa. Crea un RelevantContext de ubicación para una categoría de MapKit. Si no es compatible, queda nulo. Devuelve WidgetRelevance con atributos para todos los contextos relevantes. Además, watchOS 26 presenta una nueva configuración de widgets exclusiva para la Pila Inteligente. El nuevo widget relevante usa RelevanceKit y permite elegir qué vistas deben mostrarse en el widget. Las vistas se sugieren según un RelevantContext particular, como un punto de interés o una hora. Los widgets relevantes aparecen solo en la Pila Inteligente y se pueden sugerir varias vistas al mismo tiempo. En watchOS 26, los widgets relevantes se usan para mostrar, por ejemplo, varios eventos del Calendario, para abrir una nota recientemente editada o para ver el pronóstico del tiempo para las vacaciones. Mi widget de eventos de playa muestra las actividades programadas del día en una ubicación, y puedo convertirlo en un widget relevante. Este es un ejemplo de calendario para mi widget, y algunos de los eventos ocurren al mismo tiempo. Para crear un widget de línea de tiempo, necesito una única línea de tiempo de entradas, pero tengo eventos superpuestos. Mi línea de tiempo incluye entradas con varios eventos para representar esta superposición. Si comparo mi calendario con mi línea de tiempo a las 9:30, funciona bien. Puedo mostrar la recaudación de fondos y la meditación en una sola vista. Pero a las 10 hay tres eventos. Si intento poner los tres eventos en el widget, la vista se trunca. Debo elegir dos eventos para mostrar. Un widget relevante aborda este desafío. Cuando hay varios eventos relevantes, como sucede a las 10, el sistema puede sugerir una tarjeta para cada evento en la Pila Inteligente. Veamos cómo crear un widget relevante para los eventos de playa. Primero, repasemos la anatomía de un widget. El pilar fundamental de un widget es una entrada. Contiene todos los datos que necesitas para la vista del widget. Son creadas por el proveedor, que avisa a WidgetKit cuándo actualizar el contenido del widget. La configuración crea el proveedor y usa la entrada y demás información para producir una vista de SwiftUI. Al crear un widget de una línea de tiempo, estos tipos se llaman TimelineEntry, AppIntentTimelineProvider y AppIntentConfiguration. Crear un widget relevante es similar a crear un widget de línea de tiempo. El pilar fundamental de un widget relevante es una RelevanceEntry.

    El RelevanceEntriesProvider los crea y se suministran a RelevanceConfiguration. Veamos cómo se crea un widget relevante, comenzando con RelevanceEntry. Para mi app, crearé una RelevanceEntry que contiene el evento, con todos los datos necesarios para completar la vista del widget: la ubicación, el título y la fecha. Ahora implementaré el RelevanceEntriesProvider. El método de relevancia le dice al sistema cuándo tu widget es relevante. En él, crearé una matriz de WidgetRelevanceAttributes para asociar los WidgetConfigurationIntents de los eventos en la playa al RelevantContext con señales de cuándo la información es importante. Esta es la fecha del evento en la playa. Luego devolveré la relevancia con estos atributos. Cuando el widget es relevante, el sistema invoca la entrada y proporciona a la app el WidgetConfigurationIntent relevante e información contextual que incluye el tamaño de visualización y si el widget se muestra como vista previa. La vista previa se ve en la configuración de sugerencias del widget en Configuración o al editar la Pila Inteligente. Devuelve una entrada de vista previa con datos para completar la vista de configuración. Surf en Playalinda es un gran ejemplo de una vista previa del widget. O bien, usa la información de la configuración, como un evento en la playa, para crear una entrada que completará la vista. Cuando el widget carga, pero aún no completó los datos, el sistema solicita una entrada de marcador de posición. Si tu widget necesita descargar datos nuevos para mostrar, es posible que tu método de entrada demore en devolver resultados. Devuelve una entrada que indique que la información está desactualizada o se está cargando. En mi widget, devuelvo una entrada que mostrará un indicador de carga en la vista. Por último, haré el widget. En el cuerpo del widget, devuelve una RelevanceConfiguration, con el proveedor, y un cierre para crear la vista con la RelevanceEntry actual. La Pila Inteligente ahora puede sugerir distintas tarjetas cuando hay varios eventos en el calendario. Mi app también tiene un widget con una línea de tiempo de los eventos que se puede agregar a la Pila Inteligente. Si el widget de línea de tiempo se agrega a la Pila Inteligente, el sistema mostrará dos tarjetas para el mismo evento: una del widget de línea de tiempo que la persona agregó y otra sugerida por el widget relevante. Para evitar la duplicación, asocia RelevanceConfiguration a WidgetConfiguration para el widget de línea de tiempo. El sistema reemplazará el widget de la línea de tiempo por las tarjetas del widget relevante. Así, solo se mostrará una tarjeta por cada evento. Para asociar widgets, agrega el modificador associatedKind a RelevanceConfiguration y pasa el tipo de widget para el de línea de tiempo. Así es como se crea un widget relevante. Tengo un consejo más para crear widgets geniales: usa vistas previas. Las vistas previas permiten visualizar cómo se verán los widgets relevantes en la Pila Inteligente sin simular las condiciones. Te mostraré rápido tres formas de previsualizar tus widgets en diferentes casos. Al desarrollar la vista de tu widget, usa una vista previa con relevanceEntries para verificar y mejorar su apariencia en varios tamaños para diferentes pantallas. Aquí estoy probando dos eventos para ver la disposición con cambios en el texto. Al desarrollar el método de entrada, usa una vista previa con relevancia para verificar la creación de entradas con WidgetConfigurationIntents específicos. Aquí, creo la relevancia con algunos ejemplos de configuraciones y verifico que las entradas y las vistas se creen correctamente.

    Para una verificación final, usa una vista previa con RelevanceProvider. Proporciono una vista previa con cinco eventos para mostrar, para verificar que los eventos se muestren bien en todos los tamaños de pantalla. Es genial poder mostrar a las personas información importante en el momento adecuado. Esa información también debe estar actualizada. Tengo noticias sobre otra herramienta para actualizar los datos. A partir de watchOS 26, puedes enviar actualizaciones push a los widgets mediante APN. Estas son compatibles con todos los widgets en las plataformas de Apple que admiten WidgetKit. Para más información sobre cómo incorporar notificaciones push en tus widgets, consulta Novedades en los widgets. Si no migraste tus complicaciones de ClockKit a widgets porque necesitabas actualizaciones push, este es el momento. Para que la transición sea más fluida, consulta la sesión sobre las complicaciones en WidgetKit. Espero que disfrutes las novedades de watchOS. Crea y ejecuta tu app en watchOS 26 para garantizar que se vea bien con el resto del sistema y funcione sin problemas en arm64. Prueba los controles de iOS en el Apple Watch y agrega controles a tu app, especialmente si es independiente. Crea widgets relevantes para tu app. Usa notificaciones push para actualizar tus widgets. Me encanta usar tus apps en mi Apple Watch a diario, ya sea que salga a caminar, viaje o vaya a la playa. Sigamos explorando nuevas oportunidades con tus apps.

    • 6:53 - Make a widget configurable

      // In the AppIntentTimelineProvider
      func recommendations() -> [AppIntentRecommendation<BeachConfigurationIntent>] {
        return []
      }
    • 7:06 - Support earlier versions of watchOS with a configurable widget

      // In the AppIntentTimelineProvider
      func recommendations() -> [AppIntentRecommendation<BeachConfigurationIntent>] {
        if #available(watchOS 26, *) {
          // Return an empty array to allow configuration of the widget in watchOS 12+
          return []
        } else {
          // Return array of recommendations for preconfigured widgets before watchOS 12
          return recommendedBeaches
        }
      }
    • 7:46 - Use AppIntentControlConfiguration to make a control configurable

      struct ConfigurableMeditationControl: ControlWidget {
        var body: some ControlWidgetConfiguration {
          AppIntentControlConfiguration(
            kind: WidgetKinds.configurableMeditationControl,
            provider: Provider()
          ) { value in
            // Provide the control's content
          }
          .displayName("Ocean Meditation")
          .description("Meditation with optional ocean sounds.")
          .promptsForUserConfiguration()
        }
      }
    • 7:56 - Use AppIntentControlValueProvider for a configurable control

      extension ConfigurableMeditationControl {
        struct Provider: AppIntentControlValueProvider {
          func previewValue(configuration: TimerConfiguration) -> Value {
            // Return the value to show in the add sheet
          }
      
          func currentValue(configuration: TimerConfiguration) async throws -> Value {
            // Return the control's value
          }
        }
      }
    • 10:53 - Relevance for a point-of-interest category

      func relevance() async -> WidgetRelevance<Void> {
        guard let context = RelevantContext.location(category: .beach) else {
          return WidgetRelevance<Void>([])
        }
        return WidgetRelevance([WidgetRelevanceAttribute(context: context)])
      }
    • 14:37 - Implement the relevance method in the RelevanceEntriesProvider

      struct BeachEventRelevanceProvider: RelevanceEntriesProvider {
        let store: BeachEventStore
      
        func relevance() async -> WidgetRelevance<BeachEventConfigurationIntent> {
          // Associate configuration intents with RelevantContexts
          let attributes = events.map { event in
            WidgetRelevanceAttribute(
              configuration: BeachEventConfigurationIntent(event: event),
              context: .date(interval: event.date, kind: .default)
            )
          }
      
          return WidgetRelevance(attributes)
        }
      }
    • 15:09 - Create a RelevanceEntry when the widget is relevant

      struct BeachEventRelevanceProvider: RelevanceEntriesProvider {
        func relevance() async -> WidgetRelevance<BeachEventConfigurationIntent> {
          // Return relevance information for the widget
        }
        
        func entry(
          configuration: BeachEventConfigurationIntent,
          context: Context
        ) async throws -> BeachEventRelevanceEntry {
          if context.isPreview {
            return .previewEntry
          }
          return BeachEventRelevanceEntry(
            event: configuration.event
          )
        }
      }
    • 15:55 - Create a placeholder entry to display when the widget is loading

      struct BeachEventRelevanceProvider: RelevanceEntriesProvider {
        func relevance() async -> WidgetRelevance<BeachEventConfigurationIntent> {
          // Return relevance information for the widget
        }
        
        func entry(
          configuration: BeachEventConfigurationIntent,
          context: Context
        ) async throws -> BeachEventRelevanceEntry {
          // Return the entry for the configuration
        }
        
        func placeholder(context: Context) -> BeachEventRelevanceEntry {
          BeachEventRelevanceEntry.placeholderEntry
        }
      }
    • 16:27 - Use a RelevanceConfiguration to create a relevant widget

      struct BeachEventWidget: Widget {
        private let model = BeachEventStore.shared
      
        var body: some WidgetConfiguration {
          RelevanceConfiguration
            kind: "BeachWidget
            provider: BeachEventRelevanceProvider(store: model)
          ) { entry in
            BeachWidgetView(entry: entry)
          }
          .configurationDisplayName("Beach Events")
          .description("Events at the beach")
        }
      }
    • 17:31 - Use associatedKind to relate the relevant widget to the timeline widget

      struct BeachEventWidget: Widget {
        private let model = BeachEventStore.shared
      
        var body: some WidgetConfiguration {
          RelevanceConfiguration
            kind: "BeachWidget
            provider: BeachEventRelevanceProvider(store: model)
          ) { entry in
            BeachWidgetView(entry: entry)
          }
          .configurationDisplayName("Beach Events")
          .description("Events at the beach")
          .associatedKind(WidgetKinds.beachEventsTimeline)
        }
      }
    • 18:06 - Create a Preview with relevanceEntries

      #Preview("Entries") {
        BeachEventWidget()
      } relevanceEntries: {
        BeachEventRelevanceEntry.previewShorebirds
        BeachEventRelevanceEntry.previewMeditation
      }
    • 18:26 - Create a Preview with relevance

      #Preview("Provider and Relevance") {
        BeachEventWidget()
      } relevanceProvider: {
        BeachEventRelevanceProvider(store: .preview)
      } relevance: {
        let configurations: [BeachEventConfigurationIntent] = [
          .previewSurfing,
          .previewMeditation,
          .previewWalk
        ]
        let attributes = configurations.map {
          WidgetRelevanceAttribute(
            configuration: $0,
            context: .date($0.event.startDate, kind: .default)
          )
        }
        return WidgetRelevance(attributes)
      }
    • 18:47 - Create a Preview with a relevanceProvider

      #Preview("Provider") {
        BeachEventWidget()
      } relevanceProvider: {
        BeachEventRelevanceProvider(store: .preview)
      }
    • 0:00 - Introducción
    • watchOS 26 trae nuevas funciones y consideraciones de plataforma.

    • 0:56 - Actualización para watchOS 26
    • Explora el nuevo sistema de diseño en watchOS con actualizaciones de controles, íconos de apps y espacios del sistema. Obtén consejos para admitir la arquitectura arm64 en watchOS 26.

    • 3:48 - Lleva las apps a nuevos lugares
    • Amplía la presencia de tu app en watchOS. Los controles ayudan a las personas a realizar acciones rápidas y pueden agregarse al Centro de control, la Pila Inteligente y el Botón de Acción de Apple Watch Ultra. Los controles están disponibles automáticamente a través de las apps de iOS o se pueden crear directamente en watchOS. Las apps que registran entrenamientos con HealthKit se pueden sugerir automáticamente en la Pila Inteligente según la rutina de las personas. Las API de MapKit de iOS también están disponibles en watchOS 26, por ejemplo, para encontrar las instrucciones sobre cómo llegar de un lugar a otro o para mostrar las rutas como superposiciones.

    • 9:44 - Mantente relevante y actualizado
    • RelevanceKit ofrece una nueva forma de mostrar los widgets más relevantes en la Pila Inteligente, en función de criterios como la fecha, el horario de sueño o la ubicación. La creación de un widget relevante implica pasos similares a los de la creación de un widget basado en una línea de tiempo. Obtén consejos para crear y probar tu widget relevante con vistas previas.

Developer Footer

  • Videos
  • WWDC25
  • Novedades de watchOS 26
  • Open Menu Close Menu
    • iOS
    • iPadOS
    • macOS
    • tvOS
    • visionOS
    • watchOS
    Open Menu Close Menu
    • Swift
    • SwiftUI
    • Swift Playground
    • TestFlight
    • Xcode
    • Xcode Cloud
    • Icon Composer
    • SF Symbols
    Open Menu Close Menu
    • Accessibility
    • Accessories
    • App Store
    • Audio & Video
    • Augmented Reality
    • Business
    • Design
    • Distribution
    • Education
    • Fonts
    • Games
    • Health & Fitness
    • In-App Purchase
    • Localization
    • Maps & Location
    • Machine Learning & AI
    • Open Source
    • Security
    • Safari & Web
    Open Menu Close Menu
    • Documentation
    • Sample Code
    • Tutorials
    • Downloads
    • Forums
    • Videos
    Open Menu Close Menu
    • Support Articles
    • Contact Us
    • Bug Reporting
    • System Status
    Open Menu Close Menu
    • Apple Developer
    • App Store Connect
    • Certificates, IDs, & Profiles
    • Feedback Assistant
    Open Menu Close Menu
    • Apple Developer Program
    • Apple Developer Enterprise Program
    • App Store Small Business Program
    • MFi Program
    • News Partner Program
    • Video Partner Program
    • Security Bounty Program
    • Security Research Device Program
    Open Menu Close Menu
    • Meet with Apple
    • Apple Developer Centers
    • App Store Awards
    • Apple Design Awards
    • Apple Developer Academies
    • WWDC
    Get the Apple Developer app.
    Copyright © 2025 Apple Inc. All rights reserved.
    Terms of Use Privacy Policy Agreements and Guidelines