Programación de redes en Swift: desde sockets hasta WebSocket

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Programación de redes en Swift: de lo simple a lo complejo

\n\n

Cuando abres Xcode por primera vez y ves un proyecto vacío, parece que la verdadera magia de la interacción en red está lejos. Pero créeme: la programación de redes en Swift no es ciencia espacial, sino una herramienta tangible que convierte una aplicación local en parte de la internet global. Hoy analizaremos cómo hacer que tu aplicación «hable» con servidores, intercambie datos y lo haga de manera elegante.

\n\n

Te mostraré no solo definiciones secas, sino escenarios reales de la vida de un desarrollador iOS. Aprenderás cómo funciona la interacción de red en Swift a bajo nivel (sockets) y a alto nivel (URLSession). Y al final, un bono: cómo conectar WebSocket para un chat en vivo. ¡Vamos allá!

\n\n

Comprensión de los fundamentos: cómo están organizadas las redes en el mundo Swift

\n\n

Antes de escribir código, analicemos los conceptos. La programación de redes en Swift se basa en los mismos principios que en cualquier otro lenguaje: arquitectura cliente-servidor, protocolos TCP/UDP, direcciones IP y puertos. Pero hay un matiz: el ecosistema de Apple ofrece sus propios frameworks que facilitan la vida del desarrollador.

\n\n

Tecnologías clave para trabajar con redes en Swift

\n\n
    \n
  • URLSession — la herramienta principal para solicitudes HTTP/HTTPS. Funciona con API REST, descarga de archivos, tareas en segundo plano.
  • \n
  • Network.framework — acceso de bajo nivel a sockets, TCP/UDP. Apareció en iOS 12, reemplazó al antiguo CFNetwork.
  • \n
  • WebSocket (URLSessionWebSocketTask) — para comunicación bidireccional en tiempo real.
  • \n
  • CFStream — una forma antigua pero aún funcional de trabajar con flujos de datos.
  • \n
\n\n

Personalmente, recomiendo comenzar con URLSession: es como conducir un automóvil con transmisión automática. Y cuando quieras «mecánica», pasa a Network.framework.

\n\n

URLSession: tu mejor amigo en la programación de redes en Swift

\n\n

Empecemos con la herramienta más popular. URLSession Swift es un potente framework para enviar y recibir datos a través de la red. Soporta almacenamiento en caché, autenticación, descargas en segundo plano y mucho más.

\n\n

Solicitud GET básica

\n\n

Imagina que tu aplicación debe mostrar una lista de usuarios desde el servidor. Así se hace:

\n\n
import Foundation\n\n// 1. Creamos la URL\nguard let url = URL(string: "https://jsonplaceholder.typicode.com/users") else {\n    fatalError("Invalid URL")\n}\n\n// 2. Creamos la tarea\nlet task = URLSession.shared.dataTask(with: url) { data, response, error in\n    // 3. Manejamos errores\n    if let error = error {\n        print("Error: \\(error.localizedDescription)")\n        return\n    }\n    \n    // 4. Verificamos la respuesta del servidor\n    guard let httpResponse = response as? HTTPURLResponse,\n          (200...299).contains(httpResponse.statusCode) else {\n        print("Código de estado no válido")\n        return\n    }\n    \n    // 5. Trabajamos con los datos\n    if let data = data {\n        do {\n            let users = try JSONDecoder().decode([User].self, from: data)\n            print("Se obtuvieron \\(users.count) usuarios")\n        } catch {\n            print("Error de análisis: \\(error)")\n        }\n    }\n}\n\n// 6. Iniciamos la tarea\ntask.resume()
\n\n

Ten en cuenta: ¡task.resume() es obligatorio! De lo contrario, la solicitud nunca se ejecutará. Este es un error común de los principiantes en programación de redes en Swift.

\n\n

Solicitud POST con cuerpo

\n\n

Ahora enviemos datos al servidor:

\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