WebSocket-Bibliotheken für Swift (iOS/macOS): Starscream und URLSessionWebSocketTask
WebSocket ist ein Protokoll, das eine dauerhafte bidirektionale Verbindung zwischen einem Client (iOS/macOS-App) und einem Server herstellt. Im Gegensatz zu HTTP können nach dem Verbindungsaufbau Daten in Echtzeit ohne wiederholte Anfragen übertragen werden. Für Swift gibt es zwei Hauptansätze: die Verwendung des integrierten URLSessionWebSocketTask (verfügbar ab iOS 13/macOS 10.15) und die Drittanbieter-Bibliothek Starscream (unterstützt ältere Versionen und bietet erweiterte Funktionen).
1. URLSessionWebSocketTask — nativer WebSocket in Swift
Ab iOS 13 und macOS 10.15 hat Apple die WebSocket-Unterstützung direkt in URLSession integriert. Das bedeutet, dass für grundlegende Szenarien keine zusätzlichen Abhängigkeiten installiert werden müssen.
Beispiel für Verbindung und Nachrichtensenden
import Foundation
class WebSocketManager: NSObject { private var webSocketTask: URLSessionWebSocketTask? private let session = URLSession(configuration: .default) 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("Fehler beim Senden: \\(error.localizedDescription)") } } } private func receiveMessage() { webSocketTask?.receive { [weak self] result in switch result { case .success(let message): switch message { case .string(let text): print("Empfangen: \\(text)") case .data(let data): print("Binärdaten empfangen: \\(data.count) Bytes") @unknown default: break } self?.receiveMessage() // weiterhören case .failure(let error): print("Fehler beim Empfangen: \\(error.localizedDescription)") } } } func disconnect() { webSocketTask?.cancel(with: .normalClosure, reason: nil) }}Vorteile von URLSessionWebSocketTask
- Keine Abhängigkeiten — alles ist bereits im System vorhanden.
- Native Integration mit Hintergrundaufgaben und App Transport Security.
- Unterstützung durch Apple und Updates zusammen mit dem Betriebssystem.
Nachteile
- Mindestversion iOS 13 / macOS 10.15.
- Keine integrierte Unterstützung für Wiederverbindung und Ping/Pong (muss manuell implementiert werden).
- Weniger Flexibilität bei den Einstellungen.
2. Starscream — leistungsstarke und flexible WebSocket-Bibliothek für Swift
Starscream ist die beliebteste Drittanbieter-WebSocket-Bibliothek für Swift. Sie unterstützt iOS 8+, macOS 10.10+ sowie watchOS und tvOS. Starscream bietet einen integrierten Wiederverbindungsmechanismus, automatisches Ping/Pong und SSL/TLS-Unterstützung.
Installation über Swift Package Manager
// In Package.swift oder über Xcode: File → Add Packages...// URL: https://github.com/daltoniam/Starscream.git// Version: ab 4.0.0Beispiel für die Verwendung von Starscream
import Starscream
class StarscreamManager: WebSocketDelegate { var socket: WebSocket? func setupConnection() { var request = URLRequest(url: URL(string: "wss://echo.websocket.org")!) request.timeoutInterval = 5 socket = WebSocket(request: request) socket?.delegate = self socket?.connect() }\