Programmation réseau en Swift : du simple au complexe
\n\nLorsque 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\nJe 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\nComprendre les bases : comment les réseaux fonctionnent dans le monde Swift
\n\nAvant 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\nTechnologies 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
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\nURLSession : votre meilleur ami en programmation réseau Swift
\n\nCommenç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\nRequête GET de base
\n\nImaginez que votre application doit afficher une liste d'utilisateurs depuis un serveur. Voici comment faire :
\n\nimport 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\nNotez 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.
Requête POST avec corps
\n\nMaintenant, envoyons des données au serveur :
\n\nfunc 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