Bibliotecas WebSocket Swift: Starscream e URLSessionWebSocketTask

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

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/await ou callbacks
  • Gerenciamento automático do ciclo de vida da conexão
  • Suporte a closeCode, closeReason para 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 WebSocketDelegate para 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

Recommendations