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
  • Partagez des expériences visionOS avec des personnes à proximité

    Découvrez comment créer des expériences partagées pour les personnes portant le Vision Pro dans la même pièce. Nous allons vous montrer comment intégrer SharePlay et exploiter ARKit dans votre app, présenter les nouveaux flux de partage de fenêtre pour les participants à proximité et connectés via FaceTime, et vous faire découvrir une nouvelle API conçue pour une collaboration fluide. Découvrez les meilleures pratiques pour rendre vos fonctionnalités collaboratives visibles, faciles à localiser et conçues pour captiver les utilisateurs réunis dans un même espace.

    Chapitres

    • 0:00 - Introduction
    • 0:56 - En savoir plus sur le partage à proximité
    • 4:21 - Créer des activités à proximité
    • 5:35 - Autoriser le partage à partir du menu Partager
    • 9:15 - Améliorer pour les personnes à proximité
    • 10:37 - Placez le contenu par rapport aux personnes
    • 13:20 - Coordonner la lecture multimédia partagée
    • 15:38 - Prise en charge de plusieurs fenêtres
    • 16:50 - Partager du contenu ancré

    Ressources

    • worldAnchorSharingAvailability
    • groupActivityAssociation(_:)
    • init(originFromAnchorTransform:sharedWithNearbyParticipants:)
    • Configure your visionOS app for sharing with people nearby
    • AVPlaybackCoordinator
    • Building a guessing game for visionOS
      • Vidéo HD
      • Vidéo SD

    Vidéos connexes

    WWDC25

    • Découvrez les améliorations de votre app d’entreprise spatiale

    WWDC24

    • Customize spatial Persona templates in SharePlay

    WWDC23

    • Build spatial SharePlay experiences
    • Create a great spatial playback experience

    WWDC21

    • Build custom experiences with Group Activities
    • Coordinate media experiences with Group Activities
  • Rechercher dans cette vidéo…
    • 6:21 - Expose an activity with GroupActivities and SwiftUI

      // Expose an activity with GroupActivities and SwiftUI
      
      import SwiftUI
      import GroupActivities
      
      struct BoardGameActivity: GroupActivity, Transferable {
          var metadata: GroupActivityMetadata = {
              var metadata = GroupActivityMetadata()
              metadata.title = "Play Together"
              return metadata
          }()
      }
      
      struct BoardGameApp: App {
          var body: some Scene {
              WindowGroup {
                  BoardGameView()
                  ShareLink(item: BoardGameActivity(), preview: SharePreview("Play Together"))
                      .hidden()
              }
              .windowStyle(.volumetric)
          }
      }
      
      struct BoardGameView: View {
          var body: some View {
              // Board game content
          }
      }
    • 7:14 - Join a GroupSession with GroupActivities

      // Join a GroupSession with GroupActivities
      
      func observeSessions() async {
      
          // Sessions are created automatically when the activity is activated
          for await session in BoardGameActivity.sessions() {
      
              // Additional configuration and setup
      
              // Join SharePlay
              session.join()
          }
      }
    • 8:57 - Join and configure a GroupSession with GroupActivities

      // Join a GroupSession with GroupActivities
      
      func observeSessions() async {
      
          // Sessions are created automatically when the activity is activated
          for await session in BoardGameActivity.sessions() {
      
              // Additional configuration and setup
      
              guard let systemCoordinator = await session.systemCoordinator else { continue }
              systemCoordinator.configuration.supportsGroupImmersiveSpace = true
      
              // Join SharePlay
              session.join()
          }
      }
    • 9:59 - Check for nearby participants with GroupActivities

      // Check for nearby participants with GroupActivities
      
      func observeParticipants(session: GroupSession<BoardGameActivity>) async {
          for await activeParticipants in session.$activeParticipants.values {
              let nearbyParticipants = activeParticipants.filter {
                  $0.isNearbyWithLocalParticipant && $0 != session.localParticipant
              }
          }
      }
    • 11:42 - Observe local participant pose with GroupActivities

      // Observe local participant pose with GroupActivities
      
      func observeLocalParticipantState(session: GroupSession<BoardGameActivity>) async {
          guard let systemCoordinator = await session.systemCoordinator else { return }
      
          for await localParticipantState in systemCoordinator.localParticipantStates {
              let localParticipantPose = localParticipantState.pose
              // Place presented content relative to the local participant pose
          }
      }
    • 15:54 - Associate a specific window with GroupActivities and SwiftUI

      // Associate a specific window with GroupActivities and SwiftUI
      
      import SwiftUI
      import GroupActivities
      
      struct BoardGameApp: App {
          var body: some Scene {
              WindowGroup {
                  BoardGameView()
                  ShareLink(item: BoardGameActivity(), preview: SharePreview("Play Together"))
                      .hidden()
              }
              .windowStyle(.volumetric)
              
              WindowGroup(id: "InstructionalVideo") {
                  InstructionalVideoView()
                      .groupActivityAssociation(.primary("InstructionalVideo"))
              }
          }
      }
      
      struct BoardGameView: View {
          var body: some View {
              // Board game content
          }
      }
      
      struct InstructionalVideoView: View {
          var body: some View {
              // Video content
          }
      }
    • 18:27 - Create a world anchor with ARKit

      // Create a world anchor with ARKit
      
      import ARKit
      
      class AnchorController {
      
          func setUp(session: ARKitSession, provider: WorldTrackingProvider) async throws {
              try await session.run([provider])
          }
      
          func createAnchor(at transform: simd_float4x4, provider: WorldTrackingProvider) async throws {
              let anchor = WorldAnchor(originFromAnchorTransform: transform)
              try await provider.addAnchor(anchor)
          }
      
          func observeWorldTracking(provider: WorldTrackingProvider) async {
             for await update in provider.anchorUpdates {
                  switch update.event {
                  case .added, .updated, .removed:
                      // Add, update, or remove furniture
                      break
                  }
              }
          }
      }
    • 20:02 - Observe sharing availability with ARKit

      // Observe sharing availability with ARKit
      
      func observeSharingAvailability(provider: WorldTrackingProvider) async {
          for await sharingAvailability in provider.worldAnchorSharingAvailability {
               if sharingAvailability == .available {
                   // Store availability to check when creating a new shared world anchor
               }
           }
      }
    • 20:24 - Create a shared world anchor with ARKit

      // Create a shared world anchor with ARKit
      
      import ARKit
      
      class SharedAnchorController {
          
          func setUp(session: ARKitSession, provider: WorldTrackingProvider) async throws {
              try await session.run([provider])
          }
      
          func createAnchor(at transform: simd_float4x4, provider: WorldTrackingProvider) async throws {
              let anchor = WorldAnchor(originFromAnchorTransform: transform,
                                       sharedWithNearbyParticipants: true)
              try await provider.addAnchor(anchor)
          }
      
          func observeWorldTracking(provider: WorldTrackingProvider) async {
             for await update in provider.anchorUpdates {
                  switch update.event {
                  case .added, .updated, .removed:
                      // Add, update, or remove furniture. Updates with shared anchors from others!
                      let anchorIdentifier = update.anchor.id
                  }
              }
          }
      }
    • 0:00 - Introduction
    • Dans visionOS 26, les personnes utilisant FaceTime peuvent partager des apps et des expériences avec des personnes proches portant Apple Vision Pro. En d’autres termes, vous pouvez regarder, écouter et interagir de manière collaborative dans le même espace physique à l’aide de SharePlay et d’ARKit.

    • 0:56 - En savoir plus sur le partage à proximité
    • Une nouvelle fonctionnalité de partage dans visionOS 26 permet de partager facilement des apps avec des personnes se trouvant à proximité en appuyant sur le bouton à droite de la barre de fenêtre. La fenêtre partagée apparaît au même endroit pour toutes les personnes dans la pièce, créant ainsi un contexte commun où chacun peut discuter, interagir avec l’app et s’y référer comme s’il s’agissait d’un véritable interlocuteur. Le système garantit une apparence et une taille uniformes pour tous. N’importe qui peut déplacer ou redimensionner la fenêtre, et ces changements s’appliquent à tous. Les utilisateurs distants peuvent rejoindre la séance de partage via FaceTime sur visionOS, apparaissant sous forme de Persona spatiales dans le Shared Space, ou sous forme de flux vidéo à côté de la fenêtre partagée s’ils rejoignent le groupe depuis iOS ou macOS, ce qui permet une collaboration fluide quel que soit l’endroit où ils se trouvent.

    • 4:21 - Créer des activités à proximité
    • Toute app SharePlay existante sur visionOS peut être partagée avec des personnes se trouvant à proximité, sans aucune modification nécessaire. Cependant, il existe de nouvelles fonctionnalités qui vous permettent d’améliorer les expériences SharePlay spécialement pour les personnes se trouvant dans le même espace. Ces fonctionnalités sont les suivantes : la possibilité de découvrir les activités SharePlay dans le nouveau menu Partager, de détecter des participants proches, de positionner du contenu en fonction des poses et de synchroniser la lecture des fichiers multimédias.

    • 5:35 - Autoriser le partage à partir du menu Partager
    • Dans visionOS 26, vous pouvez activer SharePlay dans vos apps en exposant une GroupActivity à l’aide de l’API SwiftUI ou UIKit. Une fois cette option activée, tout le monde peut lancer SharePlay directement à partir du nouveau menu Partager. Pour les fenêtres volumétriques, une activité doit être exposée pour que le menu Partager soit utilisable. Pour les espaces immersifs, où le menu Partager traditionnel est inaccessible, vous pouvez fournir un bouton intégré pour activer le menu Partager. Une autre solution consiste à proposer un mode non immersif qui permet aux utilisateurs de partager à partir du menu Partager, puis de passer en mode immersif une fois que tout le monde a rejoint la séance.

    • 9:15 - Améliorer pour les personnes à proximité
    • Utilisez l’API SharePlay pour identifier les participants proches d’une GroupSession. En observant l’éditeur des participants actifs et en vérifiant la propriété « isNearbyWithLocalParticipant », vous pouvez différencier les utilisateurs locaux des utilisateurs distants. Cette approche permet d’activer des fonctionnalités telles que le fait de faire automatiquement équipe avec des joueurs à proximité dans le jeu face à des participants situés à distance qui se connectent via FaceTime.

    • 10:37 - Placez le contenu par rapport aux personnes
    • La nouvelle propriété « pose » de « ParticipantState » vous donne l’emplacement spatial des participants lors d’une séance d’app, ce qui vous permet de placer dynamiquement du contenu à côté de chaque personne. L’expérience immersive est ainsi améliorée avec notamment des fonctionnalités plus avancées, comme guider les personnes vers leurs positions assises optimales.

    • 13:20 - Coordonner la lecture multimédia partagée
    • Dans visionOS 26, AVPlayer est amélioré pour synchroniser la lecture audio et vidéo pour les personnes se trouvant dans le même espace physique, ce qui résout les problèmes causés par les retards audio et l’écho. Cette nouvelle fonctionnalité permet de partager des expériences multimédias fluides, où tout le monde voit et entend le contenu simultanément. Vous pouvez utiliser « AVPlaybackCoordinator » pour obtenir cette synchronisation précise.

    • 15:38 - Prise en charge de plusieurs fenêtres
    • À l’aide de la nouvelle API SharePlay de visionOS 26, vous pouvez spécifier quel « WindowGroup » d’une app est associé à SharePlay en utilisant le modificateur de vue « groupActivityAssociation ». Ce modificateur de vue permet de basculer facilement entre les contenus partagés, améliorant ainsi l’expérience au sein des apps multifenêtres.

    • 16:50 - Partager du contenu ancré
    • ARKit introduit des ancres du monde entier partagées dans visionOS 26. Les apps peuvent ainsi placer du contenu virtuel dans des emplacements physiques fixes qui sont conservés d’une séance à l’autre et pour plusieurs utilisateurs. Cette persistance est particulièrement utile pour les apps collaboratives, où les objets virtuels doivent rester ancrés dans le monde réel. Vous pouvez marquer des ancres du monde entier comme étant partagées pendant les séances SharePlay grâce au nouveau paramètre « sharedWithNearbyParticipants ». Les personnes à proximité peuvent ainsi voir le même contenu virtuel et d’interagir avec. Utilisez l’API « worldAnchorSharingAvailability » pour vous assurer que le partage est disponible. Cette fonctionnalité s’étend au-delà de SharePlay, permettant aux apps professionnelles d’utiliser des ancres partagées avec des couches réseau personnalisées. Les ancres partagées du monde entier ouvrent de nouvelles possibilités d’expériences collaboratives, telles que le tableau blanc virtuel, les jeux immersifs et les soirées cinéma partagées, rendant ainsi le contenu virtuel plus présent et interactif dans le monde physique.

Developer Footer

  • Vidéos
  • WWDC25
  • Partagez des expériences visionOS avec des personnes à proximité
  • 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