
-
Nouveautés dans watchOS 26
Découvrez les nouvelles fonctionnalités de watchOS 26 et apprenez à les intégrer dans vos apps watchOS et iOS. Explorez l'architecture ARM64 et plongez dans le nouveau système de conception. Nous partagerons également des mises à jour pour les widgets, ainsi que des conseils pour intégrer des contrôles à l'Apple Watch.
Chapitres
- 0:00 - Introduction
- 0:56 - Mise à jour pour watchOS 26
- 3:48 - Déployer des apps vers de nouveaux environnements
- 9:44 - Rester pertinent et à jour
Ressources
- 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
Vidéos connexes
WWDC25
WWDC24
WWDC23
WWDC22
-
Rechercher dans cette vidéo…
Bonjour et bienvenue. Je m’appelle Anne et je vais vous présenter quelques nouvelles fonctionnalités de watchOS 26 avec des conseils pour en tirer parti dans vos apps. Je vais vous présenter les nouveautés de watchOS 26, vous montrer comment utiliser vos apps watchOS et iOS à d’autres endroits sur l’Apple Watch, et partager de nouvelles façons d’afficher du contenu pertinent et opportun à partir de votre app. Je créerai aussi une app qui affichera les activités de bien-être et de loisirs sur les plages voisines, indiquera les conditions océaniques sur n’importe quelle plage et suivra mes séances de méditation à la plage ou ailleurs, quand je préférerais être à la plage. Allons-y. watchOS 26 apporte des améliorations de fond en comble, allant d’un nouveau look à une nouvelle architecture système. Voici quelques informations à retenir pour que vos apps profitent au maximum de watchOS. L’ensemble du système d’exploitation de watchOS a été mis à jour avec le nouveau système de design, qui comprend une modification des matériaux et des commandes, des icônes d’app et des espaces système comme l’écran et le Centre de contrôle. Les styles de barres d’outils et de commandes ont été mis à jour pour watchOS 26. Toutes les apps conçues pour watchOS 10 ou version ultérieure utilisent automatiquement les nouveaux styles afin que votre app soit cohérente avec le reste du système. Exécutez votre app pour vérifier l’apparence de votre interface. Si vous avez des styles personnalisés, vérifiez que les éléments de votre interface utilisateur sont lisibles avec le nouveau style système. Pour en savoir plus sur la conception et la mise à jour des apps, ne manquez pas de regarder « Meet Liquid Glass ».
Les icônes d’app font également peau neuve dans iOS et watchOS 26.
Utilisez Icon Composer pour mettre à jour l’icône de votre app. L’icône mise à jour de votre app iOS s’affiche dans les notifications transmises de l’iPhone à l’Apple Watch. L’icône mise à jour de votre app Watch s’affiche dans la grille et la liste des apps, ainsi que dans les notifications envoyées directement à l’Apple Watch. Pour en savoir plus sur Icon Composer et les nouvelles fonctionnalités des icônes dans les apps, regardez « Create icons with Icon Composer ». En plus du nouveau système de design, watchOS prend en charge une nouvelle architecture système. L’Apple Watch Series 9 et modèles ultérieurs, ainsi que l’Apple Watch Ultra 2, utilisent désormais l’architecture arm64 sur watchOS 26. Dans Xcode, utilisez le paramètre de build Standard Architecture sur vos Apple Watch cibles. Cela configure la build sur vos cibles pour toutes les architectures d’Apple Watch. Soyez conscient des différences de types sur arm64, en particulier lorsque vous utilisez Float, Int et lorsque vous faites des calculs basés sur des pointeurs. Assurez-vous aussi d’effectuer à la fois des tests sur le simulateur et sur les appareils. Xcode prend en charge la création des apps Apple Watch pour l’architecture arm64 à partir de Xcode 14. Le simulateur Apple Watch utilise toujours l’architecture arm64 sur la puce Apple. Et bonne nouvelle ! Si vous créez déjà vos apps avec des architectures standard, elles sont déjà adaptées à arm64. Et si vous avez utilisé le simulateur pour les tests, vous effectuez déjà les tests avec arm64. Un nouveau système de design et une toute nouvelle architecture ne sont que le début de cette visite guidée de watchOS 26. Voyons quelques nouveaux espaces où vous pouvez ajouter votre app. Les commandes sont disponibles sur l’Apple Watch à partir de watchOS 26. Les utilisateurs peuvent placer vos commandes dans le Centre de contrôle, le défilement intelligent, et les utiliser à l’aide du bouton Action sur l’Apple Watch Ultra. Les commandes sont conçues avec WidgetKit et permettent aux utilisateurs d’effectuer des actions rapides sans ouvrir votre app ni la lancer dans une vue spécifique. Les commandes fournissent un symbole, un titre, une teinte et un contexte supplémentaire au système. Les utilisateurs peuvent ajouter la commande à n’importe quel espace système pris en charge. Son affichage s’adaptera au contexte.
Même si vous n’avez pas d’app Watch, vous pouvez ajouter les commandes de l’app iPhone aux espaces système de l’Apple Watch. Lorsque vous touchez la commande sur l’Apple Watch, l’action est effectuée sur l’iPhone jumelé. Comme l’action est effectuée sur l’iPhone, les commandes dont les actions mettent au premier plan l’app iPhone n’apparaîtront pas sur l’Apple Watch. Si vous avez une app Watch, vous pouvez également créer des commandes Apple Watch avec l’API utilisée pour générer des commandes pour iOS. Lorsque vous touchez la commande, l’action est effectuée sur l’Apple Watch.
Le défilement intelligent prend désormais en charge les commandes, les widgets et les activités en temps réel. Avec autant d’options possibles, difficile de choisir un affichage pour le contenu du défilement intelligent. Pour trancher, réfléchissez à l’objectif visé. Créez une commande lorsque l’objectif visé est une action, comme modifier le réglage d’une app ou allumer un appareil connecté à Internet. Créez un widget pour afficher des informations tout au long de la journée, telles que la météo ou les événements à venir. Créez une activité en temps réel pour des événements ayant des dates de début et de fin, comme un événement sportif. Pour vous familiariser avec l’utilisation des commandes, regardez la vidéo « Extend your app’s controls across the system ». Des utilisateurs peuvent vouloir personnaliser leurs widgets et leurs commandes depuis votre app. Sur iOS, ils peuvent modifier un widget en sélectionnant une des configurations que vous fournissez au système. À partir de watchOS 26, les widgets et les commandes peuvent être personnalisés de la même manière. Au lieu d’une recommandation préconfigurée, les widgets peuvent indiquer qu’ils sont configurables. Je modifie la configuration de mon widget pour voir le calendrier d’Amelia Island. Pour rendre un widget configurable, renvoyez un tableau vide pour les recommandations. Cela indique qu’aucun widget n’est préconfiguré et que l’utilisateur peut configurer le widget dans l’écran ou le défilement intelligent. Pour rendre un de vos widgets configurable, ajoutez une vérification de disponibilité pour watchOS 26. Renvoyez un tableau vide pour indiquer que le widget est configurable dans les versions où il est pris en charge. Pour les versions antérieures, continuez à renvoyer un tableau de recommandations App intent. Les utilisateurs peuvent également configurer les commandes. Pour mon app de plage, j’aimerais fournir une configuration supplémentaire pour la commande de ma minuterie de méditation. J’aimerais proposer une option permettant de diffuser le bruit de l’océan pendant la méditation pour ceux qui n’y ont pas accès. Pour rendre une commande configurable, utilisez une AppIntentControlConfiguration pour décrire la commande, comme vous le faites sur iOS, et conformez votre fournisseur de valeur à AppIntentControlValueProvider. watchOS 26 n’introduit pas que des commandes dans le défilement intelligent. Si votre app Watch utilise HealthKit pour enregistrer des entraînements, cela peut être suggéré dans le défilement intelligent en fonction de la routine de l’utilisateur. Il lui suffira d’un toucher pour lancer rapidement sa séance.
Pour que votre app d’entraînement soit suggérée de manière appropriée, spécifiez le HKWorkoutActivityType correct, enregistrez l’heure de début et de fin exacte de l’entraînement et utilisez un HKWorkoutRouteBuilder pour ajouter des données de localisation tout au long de l’entraînement. Puisqu’on évoque de nouveaux horizons, de nombreuses nouvelles fonctionnalités sont disponibles pour MapKit dans watchOS 26. Vous pouvez rechercher un point d’intérêt à proximité, comme une épicerie, obtenir un itinéraire vers un lieu avec le moyen de transport de votre choix, et afficher les itinéraires possibles sur une carte avec SwiftUI, le tout à l’aide de l’API que vous utilisez peut-être déjà sur iOS. C’est idéal pour les apps Watch indépendantes qui recherchent des lieux à proximité et affichent des itinéraires. Voici l’itinéraire vers l’une de mes plages préférées. Pour en savoir plus sur les itinéraires et la recherche locale, regardez « Meet MapKit for SwiftUI ». Entre les commandes personnalisées et le Centre de contrôle, les suggestions de l’app d’entraînement sur l’écran de l’Apple Watch et les nouvelles fonctionnalités de MapKit, watchOS 26 offre de nombreuses façons d’exploiter de nouveaux espaces sur le système.
Cette visite guidée de watchOS 26 continue avec une nouvelle façon d’offrir des expériences contextuelles pertinentes dans le défilement intelligent. Vous pouvez afficher les informations et les actions dont l’utilisateur a besoin quand il en a besoin, et tenir ces informations à jour. watchOS 26 introduit un nouveau framework : RelevanceKit. RelevanceKit permet d’afficher le contenu au moment où l’utilisateur le souhaite.
RelevanceKit propose de nombreux types de contextes pertinents permettant de suggérer des widgets dans le défilement intelligent en fonction d’indices contextuels. Ces contextes pertinents comprennent la date, le programme de sommeil, l’activité physique et le lieu. Dans watchOS 26, votre widget peut aussi être pertinent dans des catégories de points d’intérêt telles qu’une épicerie, un café ou même une plage. Dans mon app de plage, j’aimerais afficher les conditions océaniques actuelles dans le défilement intelligent lorsque l’utilisateur est à la plage. Créez un emplacement RelevantContext pour une catégorie de points d’intérêt MapKit. Cela renverra nil si la catégorie n’est pas prise en charge. Découvrez WidgetRelevance avec des attributs pour tous les contextes pertinents pour le widget. En plus de RelevanceKit, watchOS 26 inclut une nouvelle configuration de widgets exclusivement destinés au défilement intelligent. Le nouveau widget de pertinence est alimenté par RelevanceKit et permet de choisir les vues qui apparaîtront à partir de votre widget. Les vues sont suggérées en fonction d’un contexte pertinent particulier, comme un point d’intérêt. Les widgets pertinents apparaissent exclusivement dans le défilement intelligent et plusieurs vues peuvent être suggérées simultanément. Dans watchOS 26, les widgets pertinents sont utilisés pour afficher plusieurs événements à venir de votre calendrier, afficher un widget pour ouvrir rapidement une note récemment modifiée ou afficher les prévisions météo de votre prochain lieu de vacances. Mon widget Événements de plage affiche les activités programmées tout au long de la journée à un endroit. Je peux l’améliorer en faisant un widget de pertinence. Voici un exemple de calendrier pour mon widget d’événements de plage. Certains des événements se déroulent en même temps. Pour créer mon widget Chronologie, je dois générer une seule chronologie d’entrées, mais plusieurs événements se chevauchent. Ma chronologie comprend donc des entrées qui ont plusieurs événements lorsqu’ils ont lieu en même temps. Lorsque je compare mon calendrier d’événements à ma chronologie pour 9 h 30, il n’y a pas de problème. Je peux afficher à la fois la collecte de fonds et la méditation dans une seule vue sur deux lignes. Mais à 10 heures, il y a trois événements. Lorsque j’essaie d’ajouter les trois événements dans le widget, la vue est tronquée. Je dois choisir deux événements à afficher. Un widget de pertinence résout ce problème. Lorsque plusieurs événements sont pertinents, comme vers 10 h, le système peut suggérer plusieurs fiches dans le défilement intelligent, une par événement. Voyons comment créer un widget de pertinence pour les événements de plage. Pour commencer, récapitulons rapidement l’anatomie d’un widget. L’élément fondamental d’un widget est une entrée. L’entrée contient toutes les données dont vous avez besoin pour afficher la vue du widget. Les entrées sont créées par le fournisseur d’entrées, qui indique également à WidgetKit quand mettre à jour l’affichage d’un widget. La configuration crée le fournisseur d’entrée et utilise l’entrée et d’autres informations pour générer une vue SwiftUI. Lors de la création d’un widget basé sur une chronologie, ces types sont appelés TimelineEntry, AppIntentTimelineProvider et AppIntentConfiguration. La création d’un widget pertinent est similaire à celle d’un widget de chronologie. L’élément fondamental d’un widget pertinent est une entrée de pertinence.
Elle est créée par un fournisseur d’entrées de pertinence et fournie à une configuration de pertinence. Passons en revue les étapes de création d’un widget de pertinence, en commençant par l’entrée de pertinence. Pour mon app de plage, je vais créer une entrée de pertinence qui contient l’événement de plage, avec toutes les données nécessaires pour remplir la vue du widget : le lieu, le titre et la date de l’événement. J’implémenterai ensuite le fournisseur d’entrées de pertinence. La méthode de pertinence indiquera au système quand le widget sera pertinent. Je vais y créer un tableau d’attributs de pertinence du widget pour associer les intentions de configuration de widget des événements de plage au contexte pertinent avec les indices indiquant quand cette information est importante. C’est la date de l’événement qui aura lieu à la plage. Je vais maintenant renvoyer la pertinence avec ces attributs. Lorsque le widget est pertinent, le système appelle l’entrée et fournit à l’app l’intention de configuration de widget appropriée ainsi que des informations contextuelles telles que la taille d’affichage du widget et si l’affichage est en mode aperçu. L’aperçu s’affiche dans les réglages Suggestions de widget disponibles dans l’app Réglages ou lors de la modification du défilement intelligente. Renvoyez une entrée d’aperçu avec des données pour remplir la vue des réglages. Surfer à Playalinda me semble être un très bon exemple pour prévisualiser mon widget. Sinon, utilisez les informations de la configuration, comme mon événement de plage, pour créer une entrée qui remplira la vue du widget. Pendant que le widget se charge sans avoir encore renseigné toutes les données, le système demande une entrée d’espace réservé au fournisseur. Par exemple, si le widget doit télécharger de nouvelles données pour le renseigner, il est possible que votre méthode d’entrée n’aboutisse pas rapidement. Renvoyez une entrée d’espace réservé pour indiquer que les informations sont obsolètes ou en cours de chargement. Dans mon widget, je renvoie une entrée qui affichera un indicateur de chargement dans la vue. Pour finir, je vais créer le widget. Dans le corps du widget, renvoyez une configuration de pertinence, à l’aide du fournisseur, et une fermeture pour créer la vue du widget à l’aide de l’entrée de pertinence actuelle. Le défilement intelligent peut maintenant suggérer différentes fiches quand plusieurs événements sont programmés. Mon app contient toujours un widget avec une chronologie affichant les événements de la plage, qu’un utilisateur peut ajouter à son défilement intelligent. Si quelqu’un ajoute mon widget Chronologie à son défilement intelligent, le système affiche deux fiches pour le même événement : une provenant du widget Chronologie ajouté par cette personne et l’autre provenant du widget de pertinence. Pour éviter ce doublon, associez la configuration de pertinence à la configuration du widget pour le widget Chronologie. Cette approche remplace le widget Chronologie par les fiches du widget de pertinence lorsqu’elles sont suggérées. Cela garantit qu’une seule fiche s’affiche pour chaque événement. Pour associer les widgets, ajoutez le modificateur associatedKind à la configuration de pertinence et transmettez-lui le type de widget pour le widget Chronologie. C’est ainsi que vous créez un widget pertinent. Autre conseil pour garantir un aspect optimal de vos widgets : utilisez les aperçus. Ils vous permettent de visualiser comment vos widgets pertinents apparaîtront dans le défilement intelligent sans simuler les conditions correspondantes. Découvrons rapidement trois façons de prévisualiser les widgets pour différents cas d’utilisation. Pendant que vous développez la vue de votre widget, utilisez un aperçu avec des entrées de pertinence pour vérifier et affiner rapidement l’apparence de cette vue sur différentes tailles d’écran. Ici, je teste deux événements pour voir la mise en page de la vue avec différentes quantités de texte. Pendant que vous développez votre méthode d’entrée, utilisez un aperçu avec la pertinence pour vérifier rapidement la création d’entrées avec des intentions de configuration de widget spécifiques. Ici, je crée la pertinence avec quelques exemples de configurations et je vérifie que les entrées et les vues sont créées correctement.
Pour la vérification finale d’un widget pertinent, utilisez un aperçu avec le fournisseur de pertinence. Je fournis cinq événements à afficher dans les aperçus afin de vérifier que les différents événements s’affichent correctement sur toutes les tailles d’écran. C’est formidable de pouvoir montrer aux utilisateurs les informations dont ils ont besoin au moment opportun. Ces informations doivent également être à jour. Voici une bonne nouvelle à propos d’un autre outil qui permet de tenir à jour les données des widgets. À partir de watchOS 26, vous pouvez envoyer des mises à jour push aux widgets à l’aide d’APN. Ces mises à jour push fonctionnent pour tous les widgets sur toutes les plates-formes Apple prenant en charge WidgetKit. Pour tout savoir sur l’ajout de la prise en charge des mises à jour push aux widgets, regardez la vidéo « What’s new in widgets ». Si vous n’avez pas migré vos complications ClockKit vers des widgets parce que vous aviez besoin de mises à jour push des complications, l’heure est venue ! Pour une transition plus fluide, découvrez les conseils d’August dans « Go further with Complications in WidgetKit ». J’espère que vous apprécierez toutes les nouvelles fonctionnalités de watchOS. Compilez et exécutez votre app sous watchOS 26 pour qu’elle se fonde harmonieusement dans le reste du système et fonctionne parfaitement sur l’architecture arm64. Testez vos commandes iOS sur l’Apple Watch et ajoutez-en à votre app Watch, notamment si vous disposez d’une app Watch indépendante. Créez des widgets pertinents là où cela est nécessaire dans votre app. Et utilisez les notifications push pour tenir vos widgets à jour. J’adore utiliser vos apps sur mon Apple Watch tous les jours, que ce soit quand je me promène, en déplacement ou à la plage. Continuons à explorer de nouveaux horizons ensemble avec vos 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 - Introduction
watchOS 26 offre de nouvelles fonctionnalités et introduit de nouveaux éléments à prendre en compte au sujet des plateformes.
- 0:56 - Mise à jour pour watchOS 26
Explorez le nouveau système de conception sous watchOS et les mises à jour apportées aux commandes, aux icônes d’app et aux espaces système. Découvrez des astuces pour prendre en charge l’architecture arm64 sur watchOS 26.
- 3:48 - Déployer des apps vers de nouveaux environnements
Étendez la présence de votre app à tout watchOS. Les commandes aident à effectuer des actions rapides et peuvent être ajoutées au Centre de contrôle, au Défilement intelligent et au bouton Action de l’Apple Watch Ultra. Les commandes sont automatiquement disponibles dans les apps iOS ou peuvent être créées directement sur watchOS. Les apps qui enregistrent les entraînements avec HealthKit peuvent être automatiquement suggérées dans le Défilement intelligent en fonction de la routine des personnes. Les API MapKit d’iOS sont également disponibles sur watchOS 26, comme la recherche d’itinéraires entre deux lieux ou l’affichage d’itinéraires sous forme de superpositions.
- 9:44 - Rester pertinent et à jour
RelevanceKit propose une nouvelle façon d’afficher les widgets dans le Défilement intelligent au moment le plus pertinent, en fonction de critères comme la date, le programme de sommeil ou le lieu. La création d’un widget pertinent comporte des étapes similaires à la création d’un widget basé sur la chronologie. Découvrez des astuces pour créer et tester votre widget pertinent, mais en utilisant des aperçus.