View in English

  • Apple Developer
    • Get Started

    Explore Get Started

    • Overview
    • Learn
    • Apple Developer Program

    Stay Updated

    • Latest News
    • Hello Developer
    • Platforms

    Explore Platforms

    • Apple Platforms
    • iOS
    • iPadOS
    • macOS
    • tvOS
    • visionOS
    • watchOS
    • App Store

    Featured

    • Design
    • Distribution
    • Games
    • Accessories
    • Web
    • Home
    • CarPlay
    • Technologies

    Explore Technologies

    • Overview
    • Xcode
    • Swift
    • SwiftUI

    Featured

    • Accessibility
    • App Intents
    • Apple Intelligence
    • Games
    • Machine Learning & AI
    • Security
    • Xcode Cloud
    • Community

    Explore Community

    • Overview
    • Meet with Apple events
    • Community-driven events
    • Developer Forums
    • Open Source

    Featured

    • WWDC
    • Swift Student Challenge
    • Developer Stories
    • App Store Awards
    • Apple Design Awards
    • Apple Developer Centers
    • Documentation

    Explore Documentation

    • Documentation Library
    • Technology Overviews
    • Sample Code
    • Human Interface Guidelines
    • Videos

    Release Notes

    • Featured Updates
    • iOS
    • iPadOS
    • macOS
    • watchOS
    • visionOS
    • tvOS
    • Xcode
    • Downloads

    Explore Downloads

    • All Downloads
    • Operating Systems
    • Applications
    • Design Resources

    Featured

    • Xcode
    • TestFlight
    • Fonts
    • SF Symbols
    • Icon Composer
    • Support

    Explore Support

    • Overview
    • Help Guides
    • Developer Forums
    • Feedback Assistant
    • Contact Us

    Featured

    • Account Help
    • App Review Guidelines
    • App Store Connect Help
    • Upcoming Requirements
    • Agreements and Guidelines
    • System Status
  • Quick Links

    • Events
    • News
    • Forums
    • Sample Code
    • Videos
 

Vidéos

Ouvrir le menu Fermer le menu
  • Collections
  • Toutes les vidéos
  • À propos

Plus de vidéos

  • À propos
  • Résumé
  • Code
  • Nouveautés dans SwiftUI

    Découvrez les nouveautés apportées à SwiftUI pour créer des apps de qualité sur toutes les plates-formes Apple. Nous verrons comment offrir à votre app une toute nouvelle apparence et expérience avec Liquid Glass. Apprenez à optimiser les performances grâce aux améliorations de framework et aux nouveaux instruments, et à intégrer des fonctionnalités avancées comme le contenu web et l'édition de texte enrichi. Nous vous montrerons également comment SwiftUI s'étend à de nouveaux espaces, en permettant notamment la disposition des vues en trois dimensions.

    Chapitres

    • 0:00 - Introduction
    • 1:22 - Sublimer le nouveau design
    • 6:59 - Fondements des frameworks
    • 14:33 - SwiftUI à travers tout le système
    • 20:04 - Développer les vues SwiftUI
    • 25:01 - Étapes suivantes

    Ressources

    • Applying Liquid Glass to custom views
    • Populating SwiftUI menus with adaptive controls
    • Adopting Liquid Glass
    • Human Interface Guidelines
      • Vidéo HD
      • Vidéo SD

    Vidéos connexes

    WWDC25

    • Adoptez la concurrence avec Swift
    • Code-along : explorez la localisation avec Xcode
    • Code-along : Préparation d’une expérience de texte enrichie dans SwiftUI avec AttributedString
    • Créez une app SwiftUI avec le nouveau design
    • Découvrez la disposition spatiale SwiftUI
    • Découvrez WebKit pour SwiftUI
    • Découvrir la simultanéité dans SwiftUI
    • Donnez une nouvelle dimension à Swift Charts avec la 3D
    • Mieux ensemble : SwiftUI et RealityKit
    • Nouveautés dans les widgets
    • Nouveautés du rendu Metal pour les apps immersives
    • Optimiser les performances de SwiftUI avec Instruments
    • Personnalisez votre app pour Accès d’aide
    • Plantez le décor avec SwiftUI dans visionOS
    • Quoi de neuf dans visionOS 26
    • Sublimez le design de votre app iPad
  • Rechercher dans cette vidéo…
    • 2:27 - Toolbar spacer

      import SwiftUI
      
      struct TripDetailView: View {
          var body: some View {
              NavigationStack {
                  TripList()
                      .toolbar {
                          ToolbarItemGroup(placement: .primaryAction) {
                              UpButton()
                              DownButton()
                          }
      
                          ToolbarSpacer(.fixed, placement: .primaryAction)
      
                          ToolbarItem(placement: .primaryAction) {
                              SettingsButton()
                          }
                      }
              }
          }
      }
      
      struct TripList: View {
          var body: some View {
              Text("TripList")
          }
      }
      
      struct UpButton: View {
          var body: some View {
              Button("Up", systemImage: "chevron.up") { }
          }
      }
      
      struct DownButton: View {
          var body: some View {
              Button("Down", systemImage: "chevron.down") { }
          }
      }
      
      struct SettingsButton: View {
          var body: some View {
              Button("List Settings", systemImage: "ellipsis") { }
          }
      }
    • 2:52 - Toolbar item tint

      import SwiftUI
      
      struct InspectorView: View {
          var body: some View {
              NavigationStack {
                  InspectorMap()
                      .toolbar {
                          ToolbarItem(placement: .primaryAction) {
                              SaveLocationButton()
                                  .buttonStyle(.borderedProminent)
                                  .tint(.pink)
                          }
                      }
              }
          }
      }
      
      struct InspectorMap: View {
          var body: some View {
              Text("InspectorMap")
          }
      }
      
      struct SaveLocationButton: View {
          var body: some View {
              Button("SaveLocationButton") { }
          }
      }
    • 3:30 - Searchable

      import SwiftUI
      
      struct PlannerSplitView: View {
          @State private var query: String = ""
      
          var body: some View {
              NavigationSplitView {
                  Text("Sidebar")
              } detail: {
                  Text("Detail")
              }
              .searchable(
                  text: $query,
                  prompt: "What are you looking for?"
              )
          }
      }
    • 4:12 - Search tab

      import SwiftUI
      
      struct HealthTabView: View {
          @State private var text: String = ""
          
          var body: some View {
              TabView {
                  Tab("Summary", systemImage: "heart") {
                      NavigationStack {
                          Text("Summary")
                      }
                  }
                  Tab("Sharing", systemImage: "person.2") {
                      NavigationStack {
                          Text("Sharing")
                      }
                  }
                  Tab(role: .search) {
                      NavigationStack {
                          Text("Search")
                      }
                  }
              }
              .searchable(text: $text)
          }
      }
    • 4:37 - Glass effect

      import SwiftUI
      
      struct ToTopButton: View {
          var body: some View {
              Button("To Top", systemImage: "chevron.up") {
                  scrollToTop()
              }
              .padding()
              .glassEffect()
          }
      
          func scrollToTop() {
              // Scroll to top of view
          }
      }
    • 5:20 - Menu bar commands

      import SwiftUI
      
      @main
      struct TravelPhotographyApp: App {
          var body: some Scene {
              WindowGroup {
                  RootView()
              }
              .commands {
                  TextEditingCommands()
              }
          }
      }
      
      struct RootView: View {
          var body: some View {
              Text("RootView")
          }
      }
    • 6:40 - Window resize anchor

      import SwiftUI
      
      struct SettingsTabView: View {
          @State private var selection: SectionTab = .general
          var body: some View {
              TabView(selection: $selection.animation()) {
                  Tab("General", systemImage: "gear", value: .general) {
                      Text("General")
                  }
                  Tab("Sections", systemImage: "list.bullet", value: .sections) {
                      Text("Sections")
                  }
              }
              .windowResizeAnchor(.top)
          }
      }
      
      enum SectionTab: Hashable {
          case general
          case sections
      }
    • 11:24 - @Animatable macro

      import SwiftUI
      
      @Animatable
      struct LoadingArc: Shape {
          var center: CGPoint
          var radius: CGFloat
          var startAngle: Angle
          var endAngle: Angle
          @AnimatableIgnored var drawPathClockwise: Bool
      
          func path(in rect: CGRect) -> Path {
              // Creates a `Path` arc using properties
              return Path()
          }
      }
    • 12:15 - Spatial overlay

      import RealityKit
      import SwiftUI
      
      struct Map: View {
          @Binding var timeAlignment: Alignment3D
      
          var body: some View {
              Model3D(named: "Map")
                  .spatialOverlay(
                      alignment: timeAlignment
                  ) {
                      Sun()
                  }
          }
      }
      
      struct Sun: View {
          var body: some View {
              Model3D(named: "Sun")
          }
      }
    • 13:04 - Manipulable and surface snapping

      import ARKit
      import RealityKit
      import SwiftUI
      
      struct BackpackWaterBottle: View {
          @Environment(\.surfaceSnappingInfo) var snappingInfo: SurfaceSnappingInfo
      
          var body: some View {
              VStackLayout().depthAlignment(.center) {
                  waterBottleView
                      .manipulable()
      
                  Pedestal()
                      .opacity(
                          snappingInfo.classification == .table ? 1.0 : 0.0)
              }
          }
      
          var waterBottleView: some View {
              Model3D(named: "waterBottle")
          }
      }
      
      struct WaterBottleView: View {
          var body: some View {
              Model3D(named: "waterBottle")
          }
      }
      
      struct Pedestal: View {
          var body: some View {
              Model3D(named: "pedestal")
          }
      }
    • 15:00 - SwiftUI scenes

      import SwiftUI
      
      @main
      struct PhotoWalk: App {
          var body: some Scene {
              WindowGroup(id: "AppContents") {
                  PhotoWalkContent()
              }
          }
      }
      
      struct PhotoWalkContent: View {
          var body: some View {
              Text("PhotoWalkContent")
          }
      }
    • 16:28 - Assistive Access scene

      import SwiftUI
      
      @main
      struct PhotoWalk: App {
        var body: some Scene {
          WindowGroup {
            ContentView()
          }
      
          AssistiveAccess {
            AssistiveAccessContentView()
          }
        }
      }
      
      struct ContentView: View {
        var body: some View {
          Text("ContentView")
        }
      }
      
      struct AssistiveAccessContentView: View {
        var body: some View {
          Text("AssistiveAccessContentView")
        }
      }
    • 17:52 - SwiftUI presentations from RealityKit

      import RealityKit
      import SwiftUI
      
      struct PopoverComponentView: View {
          @State private var popoverPresented: Bool = false
          var body: some View {
              RealityView { c in
                  let mapEntity = Entity()
      
                  let popover = Entity()
                  mapEntity.addChild(popover)
                  popover.components[PresentationComponent.self] = PresentationComponent(
                      isPresented: $popoverPresented,
                      configuration: .popover(arrowEdge: .bottom),
                      content: DetailsView()
                  )
              }
          }
      }
      
      struct DetailsView: View {
          var body: some View {
              Text("DetailsView")
          }
      }
    • 19:24 - Level of detail

      import SwiftUI
      import WidgetKit
      
      struct PhotoCountdownView: View {
          @Environment(\.levelOfDetail) var levelOfDetail: LevelOfDetail
          var body: some View {
              switch levelOfDetail {
              case .default:
                  RecentPhotosView()
              case .simplified:
                  CountdownView()
              default:
                  Text("Unknown level of detail")
              }
          }
      }
      
      struct RecentPhotosView: View {
          var body: some View {
              Text("RecentPhotosView")
          }
      }
      
      struct CountdownView: View {
          var body: some View {
              Text("CountdownView")
          }
      }
    • 20:28 - WebView

      import SwiftUI
      import WebKit
      
      struct HikeGuideWebView: View {
          var body: some View {
              WebView(url: sunshineMountainURL)
          }
      
          var sunshineMountainURL: URL {
              URL(string: "sunshineMountainURL")!
          }
      }
    • 20:44 - WebView with WebPage

      import SwiftUI
      import WebKit
      
      struct InAppBrowser: View {
          @State private var page = WebPage()
      
          var body: some View {
              WebView(page)
                  .ignoresSafeArea()
                  .onAppear {
                      page.load(URLRequest(url: sunshineMountainURL))
                  }
          }
      
          var sunshineMountainURL: URL {
              URL(string: "sunshineMountainURL")!
          }
      }
    • 21:35 - 3D charts

      import Charts
      import SwiftUI
      
      struct HikePlotView: View {
          var body: some View {
              Chart3D {
                  SurfacePlot(
                      x: "x", y: "y", z: "z") { x, y in
                          sin(x) * cos(y)
                      }
                      .foregroundStyle(Gradient(colors: [.orange, .pink]))
              }
              .chartXScale(domain: -3 ... 3)
              .chartYScale(domain: -3 ... 3)
              .chartZScale(domain: -3 ... 3)
          }
      }
    • 22:18 - macOS drag and drop

      import SwiftUI
      
      struct DragDropExample: View {
          @State private var selectedPhotos: [Photo.ID] = []
          var body: some View {
              ScrollView {
                  LazyVGrid(columns: gridColumns) {
                      ForEach(model.photos) { photo in
                          view(photo: photo)
                              .draggable(containerItemID: photo.id)
                      }
                  }
              }
              .dragContainer(for: Photo.self, selection: selectedPhotos) { draggedIDs in
                  photos(ids: draggedIDs)
              }
              .dragConfiguration(DragConfiguration(allowMove: false, allowDelete: true))
                  .onDragSessionUpdated { session in
                      let ids = session.draggedItemIDs(for: Photo.ID.self)
                          if session.phase == .ended(.delete) {
                              trash(ids)
                              deletePhotos(ids)
                          }
                  }
              .dragPreviewsFormation(.stack)
          }
      }
    • 23:55 - Rich text view

      import SwiftUI
      
      struct CommentEditor: View {
          @Binding var commentText: AttributedString
      
          var body: some View {
              TextEditor(text: $commentText)
          }
      }
    • 0:00 - Introduction
    • Anna et Peter présentent la séance en soulignant les principales améliorations apportées à SwiftUI, allant des performances aux éléments de l’interface utilisateur. Ils mentionnent une app de randonnée qu’ils ont créée pour mettre en valeur ces améliorations. Ils aborderont les nouvelles fonctionnalités du système, les performances, les animations, la disposition, les nouvelles plateformes pour SwiftUI, la prise en charge du contenu web et le texte enrichi.

    • 1:22 - Sublimer le nouveau design
    • Cette section se concentre sur le nouveau système de conception et son impact sur l’apparence et la convivialité des apps. Elle traite de la mise à jour des conteneurs de navigation, des barres d’onglets et de l’apparence des barres d’outils. Elle aborde également les améliorations apportées à la recherche et aux contrôles. La section se termine par les améliorations apportées aux interactions sur iPad, notamment une nouvelle barre de menus et un redimensionnement flexible des fenêtres, ainsi que l’amélioration du redimensionnement des fenêtres sur macOS. API présentées/mises en avant : API Toolbar Spacer : permet d’ajuster les sections des éléments de la barre d’outils. Teinte de Liquid Glass dans les barres d’outils : permet de mettre davantage en évidence les éléments de la barre d’outils grâce à des boutons bien visibles, encadrés et dotés d’une teinte spécifique. Effet de bord de défilement : applique un effet de flou au contenu de la barre d’outils lors du défilement. Rechercher des rôles dans les barres d’onglets : permet d’afficher l’onglet de recherche séparément des autres onglets dans la barre d’onglets. API Commands : permet de créer la barre de menu sur macOS et produit désormais le même résultat sur iPad. Window Resize Anchor : permet de personnaliser l’origine de l’animation de redimensionnement de la fenêtre. Dépréciation d’UIRequiresFullscreen : cette clé de liste de propriétés est obsolète dans iPadOS 26.

    • 6:59 - Fondements des frameworks
    • Cette section traite des améliorations apportées aux composants de base de SwiftUI, notamment en termes de performances, de facilité d’utilisation et de disposition. Elle décrit en détail les gains de performances obtenus au niveau des listes et du défilement, et présente le nouvel instrument de performances SwiftUI dans Xcode. Elle aborde également la macro Animatable et les nouvelles API pour la disposition volumétrique, y compris celles pour visionOS. API présentées/mises en avant : Instrument de performance SwiftUI (Xcode) : un nouvel outil pour inspecter les problèmes de performance. Macro Animatable : simplifie l’utilisation du protocole Animatable en synthétisant automatiquement la propriété de données Animatable. Macro AnimatableIgnored : exclut les propriétés de l’animation lors de l’utilisation de la macro Animatable. Alignment3D : un nouveau type d’alignement de vues dans l’espace 3D. Modificateur Spatial Overlay : permet de placer des vues dans l’espace 3D. Modificateur Manipulable : permet aux utilisateurs d’interagir avec les objets de l’app. API Scene Snapping : permet de lire des informations en dehors de l’environnement.

    • 14:33 - SwiftUI à travers tout le système
    • Cette section se concentre sur l’extension des fonctionnalités de SwiftUI à différentes plateformes Apple. Elle aborde le Scene Bridging, qui permet aux apps UIKit et AppKit d’interagir avec les scènes SwiftUI. Elle couvre la scène RemoteImmersiveSpace pour le rendu de contenu stéréo sur Apple Vision Pro à partir de macOS. Elle mentionne également le type de scène AssistiveAccess pour le mode spécial destiné aux utilisateurs souffrant de troubles cognitifs. Cette section couvre également les améliorations apportées à l’utilisation d’AppKit, de RealityKit, des contrôles et des widgets. API présentées/mises en avant : Scene Bridging : permet aux apps UIKit et AppKit d’utiliser les scènes SwiftUI. MenuBarExtra Scene : un nouveau type de scène. ImmersiveSpace Scene : un nouveau type de scène. RemoteImmersiveSpace Scene : scène macOS permettant le rendu de contenu stéréo sur l’Apple Vision Pro. AssistiveAccess Scene : type de scène permettant d’afficher l’interface utilisateur lorsqu’une personne a son iPhone en mode Accès d’aide. NSGestureRecognizerRepresentable : permet de relier les gestes d’AppKit à SwiftUI. Observable Conformance pour les entités RealityKit : permet d’observer plus facilement les changements dans les entités RealityKit à partir des vues SwiftUI. LevelOfDetail Environment Value : permet de personnaliser l’apparence des widgets en fonction de leur proximité.

    • 20:04 - Développer les vues SwiftUI
    • Cette section met en avant les capacités étendues des vues SwiftUI. Elle couvre la nouvelle vue WebView pour l’intégration de contenu web, les améliorations apportées à Swift Charts pour la création de graphiques 3D, les améliorations apportées au glisser-déposer et la nouvelle prise en charge de l’édition de texte enrichi à l’aide d’AttributedString dans TextView. API présentées/mises en avant : WebView : nouvelle vue SwiftUI qui permet d’afficher du contenu web dans votre app. WebPage : nouveau type de modèle observable conçu pour Swift afin de permettre une interaction avancée avec le contenu web. Chart3D : permet d’afficher des graphiques en trois dimensions. Modificateurs spécifiques à Z (graphiques Swift) : permettent de spécifier des échelles dans l’espace 3D. Modificateur Draggable (éléments multiples) : permet de faire glisser plusieurs éléments. Modificateur DragContainer : transforme une vue en conteneur pour les éléments à faire glisser. API DragConfiguration : permet de personnaliser les opérations prises en charge pour les glissements. Modificateur OnDragSessionUpdated : permet d’observer les évènements de glisser-déposer. TextView avec AttributedString : permet la modification de texte enrichi dans SwiftUI.

    • 25:01 - Étapes suivantes
    • Les présentateurs résument les points clés de la séance et encouragent les développeurs à explorer les nouvelles fonctionnalités et API. Ils mettent en avant la nouvelle conception, l’instrument de performance, la disposition volumétrique, les améliorations apportées au texte enrichi et la prise en charge étendue de la plateforme pour les contrôles et les widgets.

Developer Footer

  • Vidéos
  • WWDC25
  • Nouveautés dans SwiftUI
  • Open Menu Close Menu
    • iOS
    • iPadOS
    • macOS
    • tvOS
    • visionOS
    • watchOS
    • App Store
    Open Menu Close Menu
    • Swift
    • SwiftUI
    • Swift Playground
    • TestFlight
    • Xcode
    • Xcode Cloud
    • Icon Composer
    • SF Symbols
    Open Menu Close Menu
    • Accessibility
    • Accessories
    • Apple Intelligence
    • Audio & Video
    • Augmented Reality
    • Business
    • Design
    • Distribution
    • Education
    • Games
    • Health & Fitness
    • In-App Purchase
    • Localization
    • Maps & Location
    • Machine Learning & AI
    • Security
    • Safari & Web
    Open Menu Close Menu
    • Documentation
    • Downloads
    • Sample Code
    • Videos
    Open Menu Close Menu
    • Help Guides & Articles
    • Contact Us
    • Forums
    • Feedback & 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
    • Mini Apps Partner 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
    Read the latest news.
    Get the Apple Developer app.
    Copyright © 2026 Apple Inc. All rights reserved.
    Terms of Use Privacy Policy Agreements and Guidelines