Background Fetch: Was es ist, Funktionsprinzip und Konfiguration von Updates

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

Background Fetch ist ein iOS-Mechanismus, der die App regelmäßig im Hintergrund aufweckt, um neue Inhalte herunterzuladen. Das System analysiert das Benutzerverhalten und wählt optimale Fenster für die Aktualisierung aus. Laut Apple, 2026 erhält die App 30 bis 120 Sekunden für die Ausführung des Vorgangs, danach setzt das System den Prozess aus oder beendet ihn.

Die wichtigsten Punkte

  • Background Fetch ist eine iOS-API zur regelmäßigen Aktualisierung von Inhalten im Hintergrund.
  • Das System steuert die Aufweckfrequenz basierend auf der Analyse des Benutzerverhaltens.
  • Das Mindestintervall wird über UIApplication.minimumBackgroundFetchInterval festgelegt.
  • Veraltung — ab iOS 13+ gilt der Mechanismus als Legacy, BGTaskScheduler wird empfohlen.
  • Ausführungszeit — bis zu 30 Sekunden, danach beendet das System die Aufgabe zwangsweise.

Was ist Background Fetch in iOS?

Background Fetch ist eine iOS-API, die es der App ermöglicht, im Hintergrund regelmäßig neue Daten zu empfangen. Erstmals eingeführt in iOS 7 zusammen mit dem Background App Refresh-Mechanismus. Das Hauptziel ist, dass der Inhalt aktuell ist, wenn der Benutzer die App öffnet, ohne auf das Laden warten zu müssen.

Unterschied zu Push-Benachrichtigungen

Push-Benachrichtigungen werden vom Server initiiert — dieser sendet ein Signal an das Gerät, und das System entscheidet, ob die App geweckt wird. Background Fetch wird von iOS selbst basierend auf den Nutzungsmustern des Geräts initiiert. Push eignet sich besser für dringende Nachrichten, Fetch für geplante Inhaltsaktualisierungen (Nachrichten, Social-Media-Feed).

Platz im Ökosystem der Hintergrundaufgaben

Background Fetch ist einer von mehreren Hintergrundausführungsmechanismen in iOS. BGAppRefreshTask (iOS 13+) führt dieselbe Aufgabe aus, jedoch mit flexiblerer Planung. Background Modes (Audio, Standort) dienen für kontinuierliche Operationen. Silent Push sind serverinitiierte Aktualisierungen. Fetch bleibt für Projekte relevant, die iOS 12 und älter unterstützen.

  • Background Fetch — periodisch, systeminitiiert, iOS 7+.
  • BGAppRefreshTask — periodisch, systeminitiiert, iOS 13+.
  • BGProcessingTask — langlaufende Aufgaben, iOS 13+.
  • Silent Push — serverinitiiert, iOS 7+.

Wie funktioniert Background Fetch: Architektur und Lebenszyklus

iOS verwendet einen maschinellen Lernalgorithmus, um den optimalen Zeitpunkt zum Aufwecken der App zu bestimmen. Das System analysiert, wann der Benutzer die App normalerweise öffnet, wie lange er sie nutzt und wie oft er zurückkehrt. Basierend auf diesen Daten berechnet iOS Fenster für Background Fetch.

Prozess der Aufgabenausführung

Wenn das System beschließt, die App aufzuwecken, ruft es die Methode application(_:performFetchWithCompletionHandler:) im AppDelegate auf. Die App sollte eine minimale Menge neuer Daten laden und den Completion Handler mit einem von drei Status aufrufen: .newData (Daten geladen), .noData (keine neuen Daten) oder .failed (Fehler). Der Status beeinflusst die Häufigkeit zukünftiger Aufweckvorgänge.

Auswirkung des Completion Handlers auf die Aufruffrequenz

Der Status .newData teilt dem System mit, dass die Aktualisierung nützlich war — iOS kann die Aufweckfrequenz erhöhen. .noData zeigt an, dass keine Daten vorhanden sind — die Frequenz bleibt gleich oder sinkt. .failed signalisiert ein Problem — das System reduziert die Frequenz, um Batterie zu sparen. Der Schwerpunkt sollte auf einem ehrlichen Status liegen, nicht auf dem Erzwingen von .newData.

StatusBedeutungAuswirkung
.newDataDaten erfolgreich geladenFrequenz kann steigen
.noDataPrüfung ergab keine neuen DatenFrequenz bleibt gleich
.failedNetzwerk- oder ServerfehlerFrequenz sinkt

Einrichtung von Background Fetch in einem Xcode-Projekt

Um Background Fetch zu aktivieren, sind zwei Schritte erforderlich: Aktivieren Sie die Capability in Xcode und legen Sie das Mindestintervall im Code fest. Die Capability befindet sich unter Target — Signing & Capabilities — Background Modes — Aktivieren Sie das Kontrollkästchen Background Fetch. Ohne diesen Schritt wird das System die App nicht aufwecken.

Festlegen des Mindestintervalls

Die Methode UIApplication.shared.setMinimumBackgroundFetchInterval legt die Mindestzeit in Sekunden zwischen Fetch-Aufrufen fest. Der Wert UIApplication.backgroundFetchIntervalMinimum (etwa 15 Minuten) teilt dem System mit, die App so oft wie energieeffizient aufzuwecken. Das Festlegen des Intervalls in application(_:didFinishLaunchingWithOptions:) ist Standardpraxis.

swift
func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions options: [UIApplication.LaunchOptionsKey : Any]?
)-> Bool {
    UIApplication.shared.setMinimumBackgroundFetchInterval(
        UIApplication.backgroundFetchIntervalMinimum
    )
    return true
}

Info.plist und Capability

Beim Aktivieren von Background Fetch in Xcode wird Info.plist automatisch aktualisiert — der Schlüssel UIBackgroundModes mit dem Wert fetch wird hinzugefügt. Dies ist ein obligatorischer Schritt: Ohne ihn erhält die App keinen performFetchWithCompletionHandler-Aufruf. Sie können dies über P list Source oder Build Settings überprüfen.

Background Fetch Codebeispiele in Swift

Betrachten wir eine vollständige Background Fetch-Implementierung für eine Nachrichten-App. Die Implementierung umfasst Datenladen, Caching und Aufruf des Completion Handlers. Der Code wird in AppDelegate ausgeführt — dem einzigen Ort, an dem das System fetch aufruft.

swift
func application(
    _ application: UIApplication,
    performFetchWithCompletionHandler handler: @escaping (UIBackgroundFetchResult) -> Void
) {
    let url = URL(string: "https://api.example.com/latest")!

    URLSession.shared.dataTask(with: url) { data, response, error in
        guard let data = data, error == nil else {
            handler(.failed)
            return
        }

        do {
            let articles = try JSONDecoder().decode([Article].self, from: data)
            cacheArticles(articles)
            handler(articles.isEmpty ? .noData : .newData)
        } catch {
            handler(.failed)
        }
    }.resume()
}

Caching geladener Daten

Nach dem Laden der Daten über Background Fetch müssen diese im lokalen Speicher gespeichert werden — CoreData, UserDefaults oder File Manager. Beim Öffnen der App sollten die Daten bereits verfügbar sein. Verwenden Sie CoreData mit einem Hintergrundkontext für threadsicheres Schreiben. Aktualisieren Sie nach dem Speichern die UI im Hauptthread.

swift
func cacheArticles(_ articles: [Article]) {
    let container = NSPersistentContainer(name: "AppModel")
    container.performBackgroundTask { context in
        articles.forEach { article in
            let entity = ArticleEntity(context: context)
            entity.id = Int64(article.id)
            entity.title = article.title
            entity.body = article.body
        }
        try? context.save()
    }
}

Testen von Background Fetch

Verwenden Sie zum Testen den Simulator — wählen Sie Debug — Simulate Background Fetch in Xcode. Auf einem physischen Gerät müssen Sie warten, bis das System entscheidet, einen Fetch durchzuführen. Zur Beschleunigung können Sie das Mindestintervall auf 1 Minute setzen, aber das System kann es bei niedrigem Akkustand ignorieren.

Einschränkungen und Fallstricke

Background Fetch hat mehrere Einschränkungen, die bei der Gestaltung der App-Architektur zu beachten sind. Die wichtigste ist, dass das System die Aufruffrequenz vollständig kontrolliert und der Entwickler sie nicht garantieren kann. Selbst bei festgelegtem Mindestintervall kann das System stundenlang keinen Fetch aufrufen.

Zeitlimit für die Ausführung

Das System weist der App begrenzte Zeit zur Ausführung der Aufgabe zu — normalerweise bis zu 30 Sekunden. Wenn die App den Completion Handler nicht innerhalb dieser Zeit aufruft, beendet das System den Prozess zwangsweise und reduziert die Häufigkeit zukünftiger Aufweckvorgänge. Alle Netzwerkanfragen sollten kompakt sein — nicht mehr als 1-2 pro Aufruf.

Abhängigkeit von der Batterie

iOS berücksichtigt den Batterieladestand bei der Planung von Background Fetch. Bei einer Ladung unter 20% sinkt die Aufweckfrequenz. Bei aktiviertem Low Power Mode kann das System Hintergrundaktualisierungen für alle Apps vollständig deaktivieren. Der Benutzer kann Background App Refresh auch für eine bestimmte App in den Einstellungen deaktivieren.

Netzwerkeinschränkungen

Eine von Background Fetch gestartete URLSession arbeitet im Standardmodus — ohne Unterstützung für Hintergrundsitzungen. Für große Downloads verwenden Sie URLSession mit Hintergrundkonfiguration. Das System setzt den Download auch nach Abschluss des Fetch fort, aber der Fortschritt wird erst beim nächsten Aufwecken verfolgt.

Migration von Background Fetch zu BGTaskScheduler

Ab iOS 13 empfiehlt Apple BGTaskScheduler als Ersatz für Background Fetch. BGTaskScheduler bietet flexiblere Planung, zwei Aufgabentypen (Refresh und Processing) und Aufgabenregistrierung mit Identifikatoren. Die Migration umfasst mehrere Schritte und wird für alle neuen Projekte empfohlen.

Schrittweise Migration

Der erste Schritt ist die Definition von Aufgabenidentifikatoren in Info.plist über den Schlüssel BGTaskSchedulerPermittedIdentifiers. Der zweite ist die Registrierung von Aufgaben in AppDelegate über BGTaskScheduler.shared.register. Der dritte ist das Ersetzen des performFetchWithCompletionHandler-Aufrufs durch den an register übergebenen Handler. Der vierte ist das Aufrufen von submit zur Planung der Aufgabe.

swift
// Vorher (Background Fetch)
UIApplication.shared.setMinimumBackgroundFetchInterval(
    UIApplication.backgroundFetchIntervalMinimum
)

// Nach der Migration (BGTaskScheduler)
BGTaskScheduler.shared.register(
    forTaskWithIdentifier: "com.example.refresh",
    using: nil
) { task in
    self.handleAppRefresh(task: task as! BGAppRefreshTask)
}

let request = BGAppRefreshTaskRequest(
    identifier: "com.example.refresh"
)
request.earliestBeginDate = Date(timeIntervalSinceNow: 15 * 60)
try? BGTaskScheduler.shared.submit(request)

Vorteile von BGTaskScheduler

BGTaskScheduler bietet mehr Kontrolle: BGProcessingTask für langlaufende Operationen (bis zu 10 Minuten), Ausführungsbedingungen über requiresNetworkConnectivity und requiresExternalPower sowie einen Expiration Handler für kontrollierte Beendigung. Das System analysiert auch die App-Nutzung, aber der Entwickler kann präzisere Anforderungen festlegen.

Wann Background Fetch beibehalten

Wenn die App iOS 12 und älter unterstützt, bleibt Background Fetch die einzige Option für regelmäßige Aktualisierungen. BGTaskScheduler ist nur ab iOS 13+ verfügbar. Verwenden Sie in diesem Fall einen Wrapper: Überprüfen Sie die Verfügbarkeit über if #available(iOS 13, *) und rufen Sie die entsprechende API auf.

Häufig gestellte Fragen

Wie oft ruft iOS Background Fetch auf?

Die genaue Häufigkeit ist nicht dokumentiert und hängt vom Benutzerverhalten ab. Das System analysiert, wie oft der Benutzer die App öffnet, und passt die Häufigkeit entsprechend an. Im Durchschnitt kann Fetch bei aktiver Nutzung 1–3 Mal pro Stunde aufgerufen werden. Bei seltener Nutzung — 1–2 Mal pro Tag.

Warum wird mein Background Fetch nicht aufgerufen?

Überprüfen Sie drei Bedingungen: Background Fetch Capability ist in Xcode aktiviert, minimumBackgroundFetchInterval ist gesetzt, und der Benutzer hat Background App Refresh für die App in den Einstellungen nicht deaktiviert. Überprüfen Sie auch, dass das Gerät nicht im Low Power Mode ist und der Akkustand über 20% liegt.

Was ist der Unterschied zwischen Background Fetch und BGAppRefreshTask?

Background Fetch ist die alte API (iOS 7), BGAppRefreshTask ist die neue API (iOS 13+). BGAppRefreshTask bietet mehr Kontrolle: Expiration Handler, Neuplanungsfähigkeit und Statusprüfung. Background Fetch ist einfacher zu implementieren, aber weniger flexibel. Apple empfiehlt die Verwendung von BGAppRefreshTask für neue Projekte.

Kann ich große Dateien über Background Fetch herunterladen?

Nicht empfohlen. Background Fetch ist zeitlich begrenzt (bis zu 30 Sekunden). Für große Downloads verwenden Sie URLSession mit Hintergrundkonfiguration — das System setzt den Download auch nach Abschluss des Fetch fort. Eine Alternative ist BGProcessingTask (iOS 13+), die bis zu 10 Minuten und Ladebedingungen erlaubt.

Verbraucht Background Fetch Batterie?

Ja, jedes Aufwecken verbraucht Energie zum Einschalten des Prozessors, Initialisieren des Netzwerkstacks und Laden von Daten. iOS optimiert die Häufigkeit, um die Auswirkungen zu minimieren. Bei korrekter Implementierung — nur neue Daten laden, schneller Completion Handler-Aufruf — ist der Einfluss auf die Batterie minimal.

Zusammenfassung

  • Background Fetch ist eine iOS-API zum regelmäßigen Hintergrundladen von Daten, verfügbar seit iOS 7 und empfohlen zur Ablösung durch BGTaskScheduler.
  • Das System steuert die Aufruffrequenz durch Analyse des Benutzerverhaltens — der Entwickler kann die Aufweckzeit nicht garantieren.
  • Drei Completion Handler-Status — .newData, .noData, .failed — beeinflussen die Häufigkeit zukünftiger App-Aufweckungen.
  • 30-Sekunden-Limit — führen Sie keine langen Operationen oder mehrere sequenzielle Netzwerkanfragen aus.
  • Capability ist obligatorisch — Background Fetch in Xcode + Festlegen von minimumBackgroundFetchInterval im Code.
  • BGTaskScheduler ist der moderne Ersatz ab iOS 13+, der mehr Kontrolle und zwei Aufgabentypen bietet.
  • Für Projekte mit Unterstützung von iOS 12 und älter verwenden Sie Background Fetch mit Verfügbarkeitsprüfung von BGTaskScheduler über if #available.

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