Bibliotecas WebSocket para Swift (iOS/macOS): Starscream e URLSessionWebSocketTask
WebSocket é um protocolo que fornece comunicação full-duplex entre cliente e servidor através de uma única conexão TCP. No ecossistema Swift (iOS/macOS), existem duas abordagens principais para trabalhar com WebSocket: a implementação nativa URLSessionWebSocketTask (disponível desde iOS 13/macOS 10.15) e a popular biblioteca de terceiros Starscream. Ambas permitem criar aplicações reativas em tempo real: chats, feeds de cotações, jogos multiplayer, etc.
Implementação nativa URLSessionWebSocketTask
Com o lançamento do iOS 13, a Apple adicionou suporte nativo a WebSocket no framework Foundation. Isso elimina a necessidade de adicionar dependências de terceiros se sua aplicação for direcionada a versões modernas do sistema operacional.
Principais recursos:
- Operação totalmente assíncrona via
async/awaitou callbacks - Gerenciamento automático do ciclo de vida da conexão
- Suporte a
closeCode,closeReasonpara encerramento adequado - Integração nativa com
URLSession(suporte a timeouts, políticas de cache)
Exemplo de conexão e envio de mensagem:
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("Erro ao 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("Recebido: \\(text)") case .data(let data): print("Dados binários recebidos: \\(data)") @unknown default: fatalError() } // Continua ouvindo self?.receiveMessage() case .failure(let error): print("Erro ao receber: \\(error)") // Possível reconexão } } } func disconnect() { webSocketTask?.cancel(with: .normalClosure, reason: nil) }}Starscream — biblioteca flexível e testada
Starscream é uma biblioteca WebSocket open-source para Swift, escrita por Dalton Cherry e mantida pela comunidade. Funciona em iOS, macOS, tvOS e watchOS, desde versões mais antigas (iOS 8+). Starscream oferece mais controle sobre a conexão e suporta recursos adicionais, como compressão (permessage-deflate) e cabeçalhos personalizados.
Instalação via Swift Package Manager:
// Em Package.swift ou via Xcode: File → Swift Packages → Add Package Dependency.package(url: "https://github.com/daltoniam/Starscream.git", from: "4.0.0")Principais recursos:
- Suporte a
WebSocketDelegatepara todos os eventos (conexão, recebimento de dados, erros, desconexão) - Gerenciamento manual de pings/pongs para manter a conexão
- Possibilidade de enviar dados binários (Data) e strings (String/UTF-8)
- Suporte a SSL/TLS e certificados autoassinados
Também na biblioteca
Agendador de Tarefas Kotlin: kotlinx.coroutines e bibliotecas para tarefas em segundo plano
Cliente Elasticsearch para Kotlin: integração, exemplos e recursos
Trabalhando com arquivos ZIP em Java: guia completo sobre java.util.zip
Geração de Relatórios PDF em Kotlin: iText, Apache PDFBox, OpenPDF