Programmation réseau en Swift : des sockets aux WebSocket

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Programmation réseau en Swift : du simple au complexe

\n\n

Lorsque vous ouvrez Xcode pour la première fois et voyez un projet vide, il semble que la vraie magie de la communication réseau soit encore loin. Mais croyez-moi : la programmation réseau en Swift n'est pas une science infuse, mais un outil bien tangible qui transforme une application locale en une partie de l'internet mondial. Aujourd'hui, nous allons voir comment faire « parler » votre application avec les serveurs, échanger des données et le faire avec élégance.

\n\n

Je ne vais pas vous donner de simples définitions sèches, mais des scénarios réels de la vie d'un développeur iOS. Vous découvrirez comment fonctionne la communication réseau en Swift à bas niveau (sockets) et à haut niveau (URLSession). Et à la fin, un bonus : comment connecter WebSocket pour un chat en direct. C'est parti !

\n\n

Comprendre les bases : comment les réseaux fonctionnent dans le monde Swift

\n\n

Avant d'écrire du code, commençons par les concepts. La programmation réseau en Swift repose sur les mêmes principes que dans tout autre langage : architecture client-serveur, protocoles TCP/UDP, adresses IP et ports. Mais il y a une nuance : l'écosystème Apple propose ses propres frameworks qui simplifient la vie du développeur.

\n\n

Technologies clés pour travailler avec le réseau en Swift

\n\n
    \n
  • URLSession — l'outil principal pour les requêtes HTTP/HTTPS. Fonctionne avec les API REST, le téléchargement de fichiers, les tâches en arrière-plan.
  • \n
  • Network.framework — accès bas niveau aux sockets, TCP/UDP. Apparu dans iOS 12, a remplacé l'ancien CFNetwork.
  • \n
  • WebSocket (URLSessionWebSocketTask) — pour la communication bidirectionnelle en temps réel.
  • \n
  • CFStream — une méthode ancienne mais encore utilisée pour travailler avec les flux de données.
  • \n
\n\n

Personnellement, je recommande de commencer par URLSession — c'est comme conduire une voiture à transmission automatique. Et quand vous voudrez de la « mécanique », passez à Network.framework.

\n\n

URLSession : votre meilleur ami en programmation réseau Swift

\n\n

Commençons par l'outil le plus populaire. URLSession Swift est un framework puissant pour envoyer et recevoir des données sur le réseau. Il prend en charge la mise en cache, l'authentification, les téléchargements en arrière-plan et bien plus encore.

\n\n

Requête GET de base

\n\n

Imaginez que votre application doit afficher une liste d'utilisateurs depuis un serveur. Voici comment faire :

\n\n
import Foundation\n\n// 1. Créer une URL\nguard let url = URL(string: "https://jsonplaceholder.typicode.com/users") else {\n    fatalError("Invalid URL")\n}\n\n// 2. Créer une tâche\nlet task = URLSession.shared.dataTask(with: url) { data, response, error in\n    // 3. Gérer les erreurs\n    if let error = error {\n        print("Erreur : \\(error.localizedDescription)")\n        return\n    }\n    \n    // 4. Vérifier la réponse du serveur\n    guard let httpResponse = response as? HTTPURLResponse,\n          (200...299).contains(httpResponse.statusCode) else {\n        print("Code de statut invalide")\n        return\n    }\n    \n    // 5. Travailler avec les données\n    if let data = data {\n        do {\n            let users = try JSONDecoder().decode([User].self, from: data)\n            print("\\(users.count) utilisateurs reçus")\n        } catch {\n            print("Erreur de parsing : \\(error)")\n        }\n    }\n}\n\n// 6. Lancer la tâche\ntask.resume()
\n\n

Notez bien : task.resume() est obligatoire ! Sinon, la requête ne sera jamais exécutée. C'est une erreur fréquente chez les débutants en programmation réseau en Swift.

\n\n

Requête POST avec corps

\n\n

Maintenant, envoyons des données au serveur :

\n\n
func createUser(name: String, email: String) {\n    guard let url = URL(string: "https://jsonplaceholder.typicode.com/users") else {\n        return\n    }\n    \n    var request = URLRequest(url: url)\n    request.httpMethod = "POST"\n    request.setValue("application/json", forHTTPHeaderField: "Content-Type")\n    \n    let body                

Blogs

Book Recommendations