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
  • Exploitez la concurrence structurée avec le framework Network

    Le framework Network est le meilleur moyen d'établir des connexions réseau de bas niveau sur les plates-formes Apple – et dans iOS, iPadOS et macOS 26, il s'intègre parfaitement à votre code de concurrence structurée. Nous verrons comment vous pouvez établir des connexions, envoyer et recevoir des données et des messages structurés, écouter les connexions entrantes et parcourir le réseau à la recherche de services. Nous aborderons également les bonnes pratiques essentielles tout au long du processus.

    Chapitres

    • 0:00 - Bienvenue
    • 0:45 - Établir des connexions
    • 7:22 - Envoyer et recevoir
    • 14:22 - Accepter les connexions entrantes
    • 16:05 - Rechercher d’autres appareils

    Ressources

    • NetworkBrowser
    • NetworkListener
    • NetworkConnection
    • Building a custom peer-to-peer protocol
    • Network
      • Vidéo HD
      • Vidéo SD

    Vidéos connexes

    WWDC25

    • Adoptez la concurrence avec Swift
    • Boostez la connectivité des appareils avec Wi-Fi Aware

    WWDC18

    • Introducing Network.framework: A modern alternative to Sockets
  • Rechercher dans cette vidéo…
    • 4:04 - Make a connection with TLS

      // Make a connection
      
      import Network
      
      let connection = NetworkConnection(to: .hostPort(host: "www.example.com", port: 1029)) {
        TLS() 
      }
    • 4:41 - Make a connection with TLS and IP options

      // Make a connection
      
      import Network
      
      let connection = NetworkConnection(to: .hostPort(host: "www.example.com", port: 1029) {
        TLS {
          TCP {
            IP()
              .fragmentationEnabled(false)
          }
        }
      }
    • 5:07 - Make a connection with customized parameters

      // Make a connection
      
      import Network
      
      let connection = NetworkConnection(to: .hostPort(host: "www.example.com", port: 1029),
                                         using: .parameters {
        TLS {
          TCP {
            IP()
              .fragmentationEnabled(false)
          }
        }
      }
      .constrainedPathsProhibited(true))
    • 7:30 - Send and receive on a connection

      // Send and receive on a connection
      
      import Network
      
      public func sendAndReceiveWithTLS() async throws {
        let connection = NetworkConnection(to: .hostPort(host: "www.example.com", port: 1029)) {
          TLS()
        }
      
        let outgoingData = Data("Hello, world!".utf8)
        try await connection.send(outgoingData)
      
        let incomingData = try await connection.receive(exactly: 98).content
        print("Received data: \(incomingData)")
      }
    • 8:29 - Send and receive on a connection

      // Send and receive on a connection
      
      import Network
      
      public func sendAndReceiveWithTLS() async throws {
        let connection = NetworkConnection(to: .hostPort(host: "www.example.com", port: 1029)) {
          TLS()
        }
      
        let outgoingData = Data("Hello, world!".utf8)
        try await connection.send(outgoingData)
      
        let remaining32 = try await connection.receive(as: UInt32.self).content
        guard var remaining = Int(exactly: remaining32) else { /* ... throw an error ... */ }
        while remaining > 0 {
          let imageChunk = try await connection.receive(atLeast: 1, atMost: remaining).content
          remaining -= imageChunk.count
      
          // Parse the next portion of the image before continuing
        }
      }
    • 11:06 - Tic-Tac-Toe game messages

      // TicTacToe game messages
      
      import Network
      
      enum GameMessage: Int {
        case selectedCharacter = 0
        case move = 1
      }
      
      struct GameCharacter: Codable {
        let character: String
      }
      
      struct GameMove: Codable {
        let row: Int
        let column: Int
      }
    • 11:24 - Send TicTacToe game messages with TLV

      // Send TicTacToe game messages with TLV
      
      import Network
      
      public func sendWithTLV() async throws {
        let connection = NetworkConnection(to: .hostPort(host: "www.example.com", port: 1029)) {
          TLV {
            TLS()
          }
        }
      
        let characterData = try JSONEncoder().encode(GameCharacter(character: "🐨"))
        try await connection.send(characterData, type: GameMessage.selectedCharacter.rawValue)
      }
    • 11:53 - Receive TicTacToe game messages with TLV

      import Network
      
      public func receiveWithTLV() async throws {
        let connection = NetworkConnection(to: .hostPort(host: "www.example.com", port: 1029)) {
          TLV {
            TLS()
          }
        }
      
        let (incomingData, metadata) = try await connection.receive()
        switch GameMessage(rawValue: metadata.type) {
        case .selectedCharacter:
          let character = try JSONDecoder().decode(GameCharacter.self, from: incomingData)
          print("Character selected: \(character)")
        case .move:
          let move = try JSONDecoder().decode(GameMove.self, from: incomingData)
          print("Move: \(move)")
        case .none:
          print("Unknown message")
        }
      }
    • 12:50 - Tic-Tac-Toe game messages with Coder

      // TicTacToe game messages with Coder
      
      import Network
      
      enum GameMessage: Codable {
        case selectedCharacter(String)
        case move(row: Int, column: Int)
      }
    • 13:13 - Send TicTacToe game messages with Coder

      // Send TicTacToe game messages with Coder
      
      import Network
      
      public func sendWithCoder() async throws {
        let connection = NetworkConnection(to: .hostPort(host: "www.example.com", port: 1029)) {
          Coder(GameMessage.self, using: .json) {
            TLS()
          }
        }
      
        let selectedCharacter: GameMessage = .selectedCharacter("🐨")
        try await connection.send(selectedCharacter)
      }
    • 13:53 - Receive TicTacToe game messages with Coder

      // Receive TicTacToe game messages with Coder
      
      import Network
      
      public func receiveWithCoder() async throws {
        let connection = NetworkConnection(to: .hostPort(host: "www.example.com", port: 1029)) {
          Coder(GameMessage.self, using: .json) {
            TLS()
          }
        }
      
        let gameMessage = try await connection.receive().content
        switch gameMessage {
        case .selectedCharacter(let character):
          print("Character selected: \(character)")
        case .move(let row, let column):
          print("Move: (\(row), \(column))")
        }
      }
    • 15:16 - Listen for incoming connections with NetworkListener

      // Listen for incoming connections with NetworkListener
      
      import Network
      
      public func listenForIncomingConnections() async throws {
        try await NetworkListener {
          Coder(GameMessage.self, using: .json) {
            TLS()
          }
        }.run { connection in
          for try await (gameMessage, _) in connection.messages {
            // Handle the GameMessage
          }
        }
      }
    • 17:39 - Browse for nearby paired Wi-Fi Aware devices

      // Browse for nearby paired Wi-Fi Aware devices
      
      import Network
      import WiFiAware
      
      public func findNearbyDevice() async throws {
        let endpoint = try await NetworkBrowser(for: .wifiAware(.connecting(to: .allPairedDevices, from: .ticTacToeService))).run { endpoints in
          .finish(endpoints.first!)
        }
      
        // Make a connection to the endpoint
      }
    • 0:00 - Bienvenue
    • Découvrez les nouveautés du framework Network. Apprenez à créer des connexions, envoyer et recevoir des données, écouter les connexions entrantes et découvrir les points de terminaison sur le réseau.

    • 0:45 - Établir des connexions
    • Le framework Network simplifie la mise en réseau des apps. Il offre des fonctionnalités comme Connect by Name et Happy Eyeballs pour une résolution d’adresses efficace. Il intègre la sécurité TLS et prend en charge des protocoles modernes comme QUIC. Avec le framework Network, vous pouvez créer une pile de protocoles via une API déclarative. Le framework gère automatiquement les transitions d’interface réseau, les proxies et les états de connexion, garantissant des connexions robustes et réactives. Les objets NetworkConnection gèrent le cycle de vie de la connexion, en passant par des états tels que preparing, ready, waiting, failed ou canceled. Vous pouvez, en option, surveiller ces états pour mettre à jour l’interface.

    • 7:22 - Envoyer et recevoir
    • L’envoi et la réception de données dans Network sont des fonctions asynchrones qui établissent une connexion si nécessaire. La fonction send suspend la tâche jusqu’au traitement des données fournies. Lors de la réception de données avec des protocoles en flux comme TLS et TCP, le nombre d’octets doit être spécifié. Des erreurs peuvent survenir lors de l’envoi ou de la réception, avec des explications fournies pour chaque interruption. Si la taille des données est inconnue, vous pouvez utiliser la fonction receive à plusieurs reprises avec des plages d’octets minimales et maximales spécifiées. Pour simplifier la gestion des messages, le framework intègre un encodeur/décodeur Type-Length-Value (TLV) qui garantit que ce qui est envoyé est bien ce qui est reçu. iOS et macOS 26 prennent désormais en charge l’envoi et la réception directes de types Codable.

    • 14:22 - Accepter les connexions entrantes
    • NetworkListener permet à votre app d’accepter des connexions entrantes. Il s’initialise avec une pile de protocoles et, lors de l’appel à run, lance une sous-tâche pour chaque connexion entrante, transmise à un gestionnaire pour un traitement asynchrone des messages.

    • 16:05 - Rechercher d’autres appareils
    • Dans iOS 26, le framework Network introduit NetworkBrowser, qui permet à votre app de découvrir des points de terminaison réseau. NetworkBrowser peut aussi utiliser Wi-Fi Aware, une technologie peer-to-peer ou Bonjour, pour détecter les appareils ou services à proximité. Vous pouvez créer un NetworkBrowser pour rechercher des services spécifiques via des descripteurs, et utiliser un point de terminaison découvert pour initialiser une NetworkConnection. Ces nouvelles API, conçues pour la concurrence structurée de Swift, facilitent et simplifient la création d’apps réseau, supprimant le code répétitif tout en conservant la puissance et la flexibilité du framework Network.

Developer Footer

  • Vidéos
  • WWDC25
  • Exploitez la concurrence structurée avec le framework Network
  • 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