URLSession — was es ist, Netzwerk-API und wie es in iOS funktioniert

Autor: IT Sectr Veröffentlicht: 2026-03-07 Lesezeit: 8 Min.

URLSession ist eine API für Netzwerkanfragen in iOS und macOS, die Teil des Foundation-Frameworks ist und eine einheitliche Schnittstelle für die Arbeit mit HTTP, HTTPS, Hintergrunddownloads und WebSocket bietet. Sie ersetzte das veraltete NSURLConnection und wurde zum primären Netzwerk-Tool für Apple-Entwickler. Laut Apple Developer Documentation (2025) verarbeitet URLSession über 90% des Netzwerkverkehrs in iPhone- und iPad-Anwendungen.

Wichtige Punkte

  • URLSession — Apples native API für Netzwerkanfragen, HTTP, Dateidownloads und WebSocket
  • Aufgabentypen: dataTask (Anfragen), downloadTask (Herunterladen), uploadTask (Hochladen), webSocketTask
  • Sitzungskonfiguration bestimmt das Verhalten: Caching, Timeouts, Proxys, Anmeldeinformationen
  • Asynchronität wird durch Closures, Delegaten oder modernes async/await implementiert
  • Hintergrundsitzungen ermöglichen das Laden von Daten auch bei minimierter App

Was ist URLSession?

URLSession ist eine API für Netzwerkoperationen, die von Apple in iOS 7 und macOS 10.9 eingeführt wurde. Sie ersetzte NSURLConnection und bot ein flexibleres und leistungsfähigeres Modell für die Arbeit mit dem Netzwerk. Die Bibliothek unterstützt HTTP/1.1, HTTP/2, HTTP/3 und WebSocket sowie Hintergrundsitzungen zum Laden von Daten.

Der Hauptvorteil von URLSession gegenüber dem alten NSURLConnection ist die Unterstützung mehrerer gleichzeitiger Verbindungen über eine einzige Sitzung, anpassbare Konfigurationen und die Möglichkeit, Downloads zu pausieren und fortzusetzen. Eine Sitzung fasst eine Gruppe von Netzwerkaufgaben mit gemeinsamen Einstellungen zusammen: Caching, Cookie-Richtlinie, Timeouts, TLS-Zertifikate.

In iOS arbeitet URLSession mit dem System-DNS-Cache, der Energieverwaltung und Hintergrundprozessen zusammen. Wenn die App minimiert wird, kann das System das Laden von Daten über eine Hintergrundsitzung fortsetzen und nach Abschluss die App über einen Completion-Handler benachrichtigen. Hintergrundsitzungen sind besonders nützlich zum Herunterladen großer Dateien, zum Aktualisieren von Inhalten und zum Synchronisieren von Daten in Dokumenten- und Medienanwendungen. Für die Arbeit mit Hintergrundsitzungen müssen Sie URLSessionDelegate implementieren und beim Erstellen der Sitzung eine Konfigurationskennung übergeben — das System verwendet diese Kennung, um die Sitzung nach einem Neustart der App wiederherzustellen.

Ein wichtiger Vorteil von URLSession ist die Unterstützung von HTTP/2 und HTTP/3. HTTP/2-Multiplexing ermöglicht das Senden mehrerer Anfragen über eine einzige TCP-Verbindung, wodurch Latenz und Serverlast reduziert werden. HTTP/3, basierend auf dem QUIC-Protokoll über UDP, ermöglicht durch die Eliminierung des TCP-Handshakes einen noch schnelleren Verbindungsaufbau.

URLSession-Architektur

Die URLSession-Architektur besteht aus drei Hauptkomponenten: Sitzungskonfiguration, der Sitzung selbst und Aufgaben. Jede Komponente ist für einen eigenen Aspekt der Netzwerkinteraktion verantwortlich, und ihre Kombination bestimmt das Verhalten der Anwendung bei der Arbeit mit dem Netzwerk.

URLSessionConfiguration

Die Konfiguration legt die Sitzungsparameter fest — von Timeouts bis zu Caching-Richtlinien. Es gibt drei Typen: .default (Standard mit Festplatten-Cache), .ephemeral (ohne Speichern von Cache und Cookies) und .background (für Hintergrunddownloads). In der Konfiguration können Sie die maximale Anzahl von Verbindungen pro Host, das Anforderungs- und Ressourcen-Timeout, die TLS-Richtlinie und Proxy-Einstellungen angeben.

URLSessionTask-Typen

URLSessionTask ist die Basisklasse für alle Netzwerkoperationen. Die wichtigsten Unterklassen sind: URLSessionDataTask für GET- und POST-Anfragen, die Daten im Speicher zurückgeben, URLSessionDownloadTask zum Herunterladen von Dateien auf die Festplatte, URLSessionUploadTask zum Hochladen von Dateien auf den Server und URLSessionWebSocketTask für die Arbeit mit WebSocket ab iOS 13.

URLSession-Delegaten

Der Sitzungsdelegat erhält Ereignisse über den Fortschritt von Aufgaben: Datenempfang, Download-Abschluss, Authentifizierungsfehler, Weiterleitungen. URLSessionDelegate und seine Unterprotokolle ermöglichen das Abfangen von TLS-Zertifikaten während der Authentifizierung, die Verwaltung des Antwort-Cachings über URLCache und die Überwachung des Download-Fortschritts großer Dateien. Alternativ können Closures (Completion-Handler) für einfache Fälle verwendet werden, in denen keine Zwischenereignisbehandlung erforderlich ist.

Wie man Anfragen mit URLSession stellt

Der grundlegende Arbeitsablauf mit URLSession sieht wie folgt aus: Eine Konfiguration erstellen, darauf basierend eine Sitzung erstellen, dann über die Sitzung eine Aufgabe mit einer URL-Anfrage erstellen und die Aufgabe starten. Lassen Sie uns ein Beispiel einer GET-Anfrage mit einem Closure durchgehen. Dieses Muster wird in den meisten iOS-Anwendungen zum Abrufen von Daten von REST-APIs, zum Laden von Bildern und zur Interaktion mit Cloud-Diensten verwendet.

swift
let url = URL(string: "https://api.example.com/users")!
let session = URLSession.shared
let task = session.dataTask(with: url) { data, response, error in
    guard let data = data, error == nil else {
        print("Error: \(error!.localizedDescription)")
        return
    }
    if let json = try? JSONSerialization.jsonObject(with: data) {
        print("JSON: \(json)")
    }
}
task.resume()

Das Beispiel verwendet URLSession.shared — einen Singleton mit .default-Konfiguration für einfache Anfragen. dataTask erstellt einen asynchronen Vorgang, startet ihn aber nicht — Sie müssen resume() aufrufen. Das Closure wird nach Abschluss der Anfrage ausgeführt und gibt data, response oder error zurück. Für eine benutzerdefinierte Sitzung mit eigener Konfiguration verwenden Sie den Initialisierer URLSession(configuration:), mit dem Sie Caching-Richtlinien, Timeouts, maximale Verbindungen, Standard-HTTP-Header und Proxy-Einstellungen für alle Sitzungsaufgaben festlegen können. Dieser Ansatz gibt Ihnen die vollständige Kontrolle über das Netzwerkverhalten in Ihrer Anwendung.

Dateidownloads über URLSession

URLSession unterstützt Dateidownloads mit der Möglichkeit zum Pausieren und Fortsetzen sowie Hintergrunddownloads. DownloadTask speichert die Datei in einem temporären Verzeichnis, und im Abschluss-Closure müssen Sie sie an einen dauerhaften Ort verschieben.

swift
let url = URL(string: "https://example.com/file.zip")!
let session = URLSession(configuration: .default)
let task = session.downloadTask(with: url) { location, _, _ in
    guard let location = location else { return }
    let destination = FileManager.default.temporaryDirectory
        .appendingPathComponent("file.zip")
    try? FileManager.default.moveItem(at: location, to: destination)
}
task.resume()

Der Parameter location im Closure verweist auf eine temporäre Datei, die verschoben werden muss, andernfalls löscht das System sie nach dem Verlassen des Closures. Um den Fortschritt zu verfolgen, verwenden Sie den URLSessionDownloadDelegate mit der didWriteData-Methode, die die Anzahl der geschriebenen Bytes und die Gesamtdateigröße übergibt — diese Daten können verwendet werden, um eine Fortschrittsanzeige in der Benutzeroberfläche darzustellen. Hintergrundsitzungen mit downloadTask ermöglichen das Fortsetzen des Downloads auch nach dem Minimieren der App, und nach Abschluss ruft das System den Handler in AppDelegate auf.

URLSession vs Alamofire

Alamofire ist eine Swift-Bibliothek, die auf URLSession aufbaut und eine deklarativere Schnittstelle bietet. Die Wahl zwischen der nativen API und Alamofire hängt von der Komplexität des Projekts und den Vorlieben des Teams ab.

KriteriumURLSessionAlamofire
AbhängigkeitenKeine, in Foundation integriertErfordert SPM oder CocoaPods
SyntaxImperativ mit ClosuresDeklarativ mit Verkettung
JSON-VerarbeitungManuelle JSONSerializationresponseDecodable mit Codable
InterceptorÜber DelegatenRequestInterceptor, EventMonitor
FortschrittÜber DelegatendownloadProgress, uploadProgress

Für einfache Projekte ist URLSession ausreichend und fügt keine Abhängigkeiten hinzu. Alamofire ist bei Projekten mit vielen Netzwerkanfragen, komplexer Fehlerbehandlung und dem Bedarf an prägnanter Syntax gerechtfertigt. Beide Technologien teilen sich die gemeinsame URLSessionConfiguration-Basis und sind miteinander kompatibel. Bei der Wahl sollten Sie bedenken, dass URLSession vollständig von Apple kontrolliert wird und mit iOS aktualisiert wird, während Alamofire erfordert, dass die Bibliotheksentwickler die Kompatibilität mit neuen OS-Versionen aufrechterhalten.

URLSession-Codebeispiele

Modernes Swift unterstützt async/await, was Netzwerkanfragen im Vergleich zu Closures lesbarer macht. Betrachten wir dieselbe GET-Anfrage mit asynchroner Syntax.

swift
func fetchUsers() async throws -> [User] {
    let url = URL(string: "https://api.example.com/users")!
    let (data, _) = try await URLSession.shared.data(from: url)
    let users = try JSONDecoder().decode([User].self, from: data)
    return users
}

Die Methode data(from:) ist seit iOS 15 und macOS 12 verfügbar. Sie gibt ein Tupel (Data, URLResponse) zurück und wirft bei Netzwerkproblemen einen Fehler. JSONDecoder mit einem Codable-Modell deserialisiert die Antwort automatisch — dies ersetzt die umständliche JSONSerialization aus dem vorherigen Beispiel.

POST-Anfrage mit JSON-Body

Für POST-Anfragen mit JSON-Body wird URLRequest verwendet, bei dem Sie die Methode, Content-Type-Header und den Anforderungskörper als Data konfigurieren. Async/await macht diesen Prozess prägnant und klar, und die Fehlerbehandlung ist einfach über einen do-catch-Block.

swift
func createUser(name: String) async throws -> User {
    var request = URLRequest(url: URL(string: "https://api.example.com/users")!)
    request.httpMethod = "POST"
    request.setValue("application/json", forHTTPHeaderField: "Content-Type")
    let body = try JSONEncoder().encode(["name": name])
    request.httpBody = body
    let (data, _) = try await URLSession.shared.data(for: request)
    return try JSONDecoder().decode(User.self, from: data)
}

Häufig gestellte Fragen

Wie unterscheidet sich URLSession von NSURLConnection?

URLSession ist der moderne Ersatz für NSURLConnection, eingeführt in iOS 7. Die Hauptunterschiede umfassen die Unterstützung mehrerer Verbindungen über Sitzungen, das Anhalten und Fortsetzen von Aufgaben, Hintergrunddownloads und WebSocket. NSURLConnection ist veraltet und wird für neue Projekte nicht empfohlen.

Wie verfolgt man den Download-Fortschritt in URLSession?

Um den Fortschritt zu verfolgen, verwenden Sie den URLSessionDownloadDelegate mit der Methode urlSession(_:downloadTask:didWriteData:totalBytesWritten:totalBytesExpectedToWrite). Alternativ können Sie für dataTask URLSessionTaskDelegate abonnieren und Updates über didSendBodyData erhalten.

Wie führt man Hintergrunddownloads mit URLSession durch?

Hintergrunddownloads werden über die Konfiguration .background(withIdentifier:) eingerichtet. Die App registriert einen Completion-Handler in AppDelegate und erhält Ergebnisse auch nach dem Minimieren oder Schließen. Das System verwaltet den Download und benachrichtigt die App über den sessionDidFinishEvents-Delegaten.

Kann URLSession mit WebSocket verwendet werden?

Ja, seit iOS 13 unterstützt URLSession WebSocket über die Klasse URLSessionWebSocketTask. Sie wird mit der Methode webSocketTask(with:) erstellt und bietet send- und receive-Methoden mit Unterstützung für Text- und Binärnachrichten sowie ping/pong zum Aufrechterhalten der Verbindung.

Wie stellt man Timeouts in URLSession ein?

Timeouts werden über URLSessionConfiguration konfiguriert: die Eigenschaft timeoutIntervalForRequest (Warten auf Antwort auf eine Anfrage) und timeoutIntervalForResource (maximale Zeit für den gesamten Download). Standardwerte: 60 Sekunden für Anfrage und 7 Tage für Ressource.

Zusammenfassung

  • URLSession — Apples native API für Netzwerkanfragen, unterstützt HTTP, Hintergrunddownloads und WebSocket
  • Drei Konfigurationstypen (.default, .ephemeral, .background) bestimmen das Sitzungsverhalten
  • Vier Aufgabentypen decken alle Szenarien ab: dataTask, downloadTask, uploadTask, webSocketTask
  • Delegaten ermöglichen die Verwaltung von Authentifizierung, Fortschritt und Weiterleitungen
  • Async/await seit iOS 15 macht URLSession-Code lesbarer und prägnanter
  • Wahl zwischen URLSession oder Alamofire hängt von der Projektgröße ab — URLSession reicht für einfache Aufgaben

Wir entwickeln eine mobile Applikation schlüsselfertig

IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.

Projekt besprechen

Lesen Sie auch