Bibliotecas WebSocket para Swift (iOS/macOS): Starscream y URLSessionWebSocketTask
WebSocket es un protocolo que proporciona comunicación full-duplex entre un cliente y un servidor a través de una única conexión TCP. En el ecosistema Swift (iOS/macOS), existen dos enfoques principales para trabajar con WebSocket: la implementación nativa URLSessionWebSocketTask (disponible desde iOS 13/macOS 10.15) y la popular biblioteca de terceros Starscream. Ambas permiten crear aplicaciones reactivas en tiempo real: chats, feeds de cotizaciones, juegos multijugador, etc.
Implementación nativa URLSessionWebSocketTask
Con el lanzamiento de iOS 13, Apple agregó soporte integrado para WebSocket en el framework Foundation. Esto elimina la necesidad de agregar dependencias de terceros si tu aplicación está orientada a versiones modernas del sistema operativo.
Características principales:
- Trabajo completamente asíncrono mediante
async/awaito callbacks - Gestión automática del ciclo de vida de la conexión
- Soporte para
closeCode,closeReasonpara un cierre correcto - Integración nativa con
URLSession(soporte para timeouts, políticas de caché)
Ejemplo de conexión y envío de mensaje:
import Foundation
class WebSocketManager { private var webSocketTask: URLSessionWebSocketTask? private let session = URLSession.shared func connect() { guard let url = URL(string: "wss://echo.websocket.org") else { return } webSocketTask = session.webSocketTask(with: url) webSocketTask?.resume() receiveMessage() } func sendMessage(_ text: String) { let message = URLSessionWebSocketTask.Message.string(text) webSocketTask?.send(message) { error in if let error = error { print("Error al enviar: \\(error.localizedDescription)") } } } private func receiveMessage() { webSocketTask?.receive { [weak self] result in switch result { case .success(let message): switch message { case .string(let text): print("Recibido: \\(text)") case .data(let data): print("Datos binarios recibidos: \\(data)") @unknown default: fatalError() } // Seguimos escuchando self?.receiveMessage() case .failure(let error): print("Error al recibir: \\(error)") // Posible reconexión } } } func disconnect() { webSocketTask?.cancel(with: .normalClosure, reason: nil) }}Starscream — una biblioteca flexible y probada
Starscream es una biblioteca WebSocket de código abierto para Swift, escrita por Dalton Cherry y mantenida por la comunidad. Funciona en iOS, macOS, tvOS y watchOS, desde versiones más antiguas (iOS 8+). Starscream proporciona más control sobre la conexión y admite funciones adicionales como compresión (permessage-deflate) y cabeceras personalizadas.
Instalación mediante Swift Package Manager:
// En Package.swift o mediante Xcode: File → Swift Packages → Add Package Dependency.package(url: "https://github.com/daltoniam/Starscream.git", from: "4.0.0")Características principales:
- Soporte para
WebSocketDelegatepara todos los eventos (conexión, recepción de datos, errores, desconexión) - Gestión manual de pings/pongs para mantener la conexión
- Posibilidad de enviar datos binarios (Data) y cadenas (String/UTF-8)
- Soporte para SSL/TLS y certificados autofirmados
También en la biblioteca
openai-api-rs para Rust: guía completa con ejemplos
magic_enum para C++: guía completa con ejemplos prácticos
Biblioteca estándar de TypeScript: guía completa para desarrolladores
Trabajo con CSV en Go (Golang): guía completa del paquete encoding/csv