BGTaskScheduler: nedir, iOS'ta arka plan görevleri

Yazar: IT Sectr Yayınlanma: 2026-03-27 Okuma süresi: 8 dk

BGTaskScheduler, iOS 13 ve sonrası uygulamalarda arka plan görevlerini planlamak ve yürütmek için Apple'ın framework'üdür. Kullanımdan kaldırılan Background Fetch ve performFetch'in yerini alarak arka plan işlemleri için birleşik bir API sağlar. Apple Developer Documentation, 2026'ya göre framework iki tür görev içerir: uzun işlemler için BGProcessingTask ve kısa içerik güncellemeleri için BGAppRefreshTask.

Önemli Noktalar

  • BGTaskScheduler, eski Background Fetch'in yerini alan arka plan görev yönetimi için bir iOS 13+ framework'üdür.
  • BGAppRefreshTask, içerik güncellemeleri için 30 saniyeye kadar kısa bir arka plan görevidir.
  • BGProcessingTask, kaynak yoğun işlemler için birkaç dakikaya kadar uzun bir arka plan görevidir.
  • Kayıt, Info.plist'te tanımlayıcılar aracılığıyla ve kodda handleTasks aracılığıyla yapılır.
  • Sistem, kullanıcı davranışına bağlı olarak görevleri başlatmak için en uygun zamanı otomatik olarak belirler.

BGTaskScheduler nedir?

BGTaskScheduler, iOS 13'te tanıtılan ve arka plan görevlerinin yürütülmesini merkezi olarak yöneten bir Apple sistem framework'üdür. Ortaya çıkmasından önce geliştiriciler UIApplication backgroundTasks, performFetch ve appDelegate'te olay işleme kullanıyordu, bu da kod parçalanmasına ve öngörülemeyen davranışa yol açıyordu.

Framework ertelenmiş planlama prensibiyle çalışır: uygulama benzersiz tanımlayıcılarla görevleri kaydeder ve iOS bunları yürütmek için en uygun anı belirler. Sistem pil seviyesini, kullanıcı etkinliğini, ağ durumunu ve diğer faktörleri dikkate alır.

Temel yetenekler hem kısa hem de uzun arka plan işlemleriyle çalışmayı içerir. Android'deki AlarmManager'ın aksine, BGTaskScheduler kesin yürütme süresini garanti etmez — sistem koşullar elverişsizse bir görevi erteleme hakkını saklı tutar.

BGTaskScheduler iOS'ta nasıl çalışır?

BGTaskScheduler işleyici (handler) tabanlı bir mimari kullanır. Uygulama her görev türü için bir işleyici kaydeder ve sistem uygun an geldiğinde onu çağırır. Framework'ün kendisi görevi doğrudan yürütmez — yalnızca uygulamaya çalıştırma zamanının geldiğini bildirir.

Görev kayıt süreci

Kayıt, Info.plist dosyasında BGTaskSchedulerPermittedIdentifiers dizisi aracılığıyla görev tanımlayıcısının bildirilmesiyle başlar. Ardından uygulama kodunda, bir işleyici closure ile registerHandler(forTaskWithIdentifier:) yöntemi çağrılır.

swift
import BackgroundTasks

let taskID = "com.example.app.refresh"

BGTaskScheduler.shared.registerHandler(
    forTaskWithIdentifier: taskID,
    using: DispatchQueue.global()
) { task in
    task.expirationHandler = {
        // zorla sonlandırmada çağrılır
    }
    processBackgroundTask(task as! BGAppRefreshTask)
}

Yürütme planlaması

Kayıttan sonra uygulama, submitTaskRequest aracılığıyla görev yürütmeyi açıkça talep etmelidir. Talep, görev tanımlayıcısını ve mümkün olan en erken başlangıç tarihini içerir. Sistem talebi kaydeder ve koşulları uygun gördüğünde işler.

swift
let request = BGAppRefreshTaskRequest(
    identifier: taskID
)
request.earliestBeginDate = Date(timeIntervalSinceNow: 3600)

do {
    try BGTaskScheduler.shared.submit(request)
} catch {
    print("Planlama hatası: \(error)")
}

BGTaskScheduler arka plan görev türleri

BGTaskScheduler, her biri kendi kullanım senaryosu için tasarlanmış iki ana görev türü sağlar. Doğru türü seçmek, sistem tarafından görevin başarıyla yürütülme olasılığını doğrudan etkiler.

BGAppRefreshTask

BGAppRefreshTask, kısa arka plan içerik güncellemeleri için tasarlanmıştır: yeni veri yükleme, sunucuyla senkronizasyon, widget'ları güncelleme. Yürütme süresi 30 saniye ile sınırlıdır ve sonrasında sistem görevi zorla sonlandırır. Bu görev türü BGProcessingTask'tan daha sık çalışır ve daha yüksek önceliğe sahiptir.

BGProcessingTask

BGProcessingTask daha uzun işlemler için tasarlanmıştır: medya dosyalarını işleme, Core Data indeksleme, yedekleme oluşturma. Görev birkaç dakikaya kadar çalışabilir, ancak sistem onu daha az sıklıkta ve yalnızca uygun koşullarda başlatır — güce bağlı, kararlı Wi-Fi ve düşük cihaz yükü.

ParametreBGAppRefreshTaskBGProcessingTask
Süre sınırı30 saniyebirkaç dakika
Başlatma sıklığıyüksekdüşük
Koşullarherhangigüç + Wi-Fi
Güç gerektirirhayırönerilir
Örnekfeed güncellemevideo işleme

Kayıt ve planlama

Doğru kayıt, BGTaskScheduler'ın çalışması için zorunlu bir koşuldur. Bir görev Info.plist'te kayıtlı değilse, sistem onu yürütme talebini görmezden gelir.

Info.plist'te kayıt

Info.plist dosyası, dize tanımlayıcılarının bir listesiyle BGTaskSchedulerPermittedIdentifiers dizisini içermelidir. Her tanımlayıcı uygulama içinde benzersiz olmalıdır. Apple, ters alan adı notasyonu kullanılmasını önerir.

xml
<key>BGTaskSchedulerPermittedIdentifiers</key>
<array>
    <string>com.example.app.refresh</string>
    <string>com.example.app.processing</string>
</array>

Planlama ve iptal

Bir görevi planlamak için submitTaskRequest yöntemini kullanın. Bir göreve artık ihtiyaç duyulmuyorsa, cancelTaskRequest veya cancelAllTaskRequests aracılığıyla iptal edilebilir. Sistem, uygulama silindiğinde veya veriler sıfırlandığında da görevleri otomatik olarak iptal eder.

Görev durumunu izleme

BGTaskScheduler, getPendingTaskRequests aracılığıyla planlanmış görevlerin durumunu izleme olanağı sağlar. Bu yöntem, türleri, tanımlayıcıları ve earliestBeginDate'leri hakkında bilgi içeren tüm aktif taleplerin listesini döndürür. Her talep için, zaten tamamlanıp tamamlanmadığını veya iptal edilip edilmediğini kontrol edebilir ve yeniden planlamaya karar verebilirsiniz.

Sistemin bir arka plan görevinin başarısı hakkında doğrudan bir geri arama sağlamadığını unutmamak önemlidir — işleyicinin kendisi sonucu görev özellikleri aracılığıyla bildirmelidir. setTaskCompleted, bir görevi başarıyla tamamlanmış olarak işaretlemeye izin verir, ardından sistem bu türdeki bir sonraki planlanmış görevi başlatabilir. Bir görev setTaskCompleted'ı çağırmazsa, sistem onu zaman aşımı veya zorla sonlandırmada tamamlanmış sayar.

Teşhis için, işleyicide OSLog kullanılması ve Mac'te Console.app aracılığıyla günlüklerin görüntülenmesi önerilir. Apple ayrıca arka plan görev performansını analiz etmek için MetricKit aracı sağlar — yürütme süresi, enerji tüketimi ve başlatma sıklığı hakkında optimizasyon için kullanılabilecek verileri toplar.

swift
// Belirli görevi iptal et
BGTaskScheduler.shared.cancel(taskRequestWithIdentifier: taskID)

// Tüm görevleri iptal et
BGTaskScheduler.shared.cancelAllTaskRequests()

// Planlanan görevleri kontrol et
BGTaskScheduler.shared.getPendingTaskRequests { requests in
    print("\(requests.count) görev planlandı")
}

Sınırlamalar ve öneriler

BGTaskScheduler, arka plan çalışmasına katı sınırlamalar getirir. Sistem, koşullar elverişsizse bir görevi süresiz olarak erteleyebilir. Geliştiriciler, framework'ün gerçek zamanlı görevler için tasarlanmadığını anlamalıdır.

Temel sınırlamalar şunları içerir: sistem belirtilen zamanda görev yürütmeyi garanti etmez, eşzamanlı görevlerin maksimum sayısı sınırlıdır ve enerji tüketimi sıkı bir şekilde kontrol edilir. Birden fazla görevi art arda çalıştırmak, bunların birleştirilmesine veya iptal edilmesine neden olabilir.

Yürütme olasılığını artırmak için, BGProcessingTask için 1 saatten ve BGAppRefreshTask için 15 dakikadan daha erken olmayacak şekilde earliestBeginDate ayarlanması önerilir. expirationHandler'ı işlemek de önemlidir — bir görev zaman sınırını karşılayamazsa, sistem uygun sonlandırma için bu işleyiciyi çağırır. Sürekli bir arka plan çalışma döngüsünü sürdürmek için yeniden planlama işleyicinin içinde yapılmalıdır.

Bir diğer önemli sınırlama ağ istekleri ile ilgilidir. BGTaskScheduler, görev yürütme sırasında aktif bir ağ bağlantısını garanti etmez. Uygulama, NWPathMonitor aracılığıyla ağ kullanılabilirliğini bağımsız olarak kontrol etmeli ve bağlantı yoksa işlemeyi ertelemelidir. Bu, belirli bir ağ türüne bağlandığında görevi etkinleştirebilen Android JobScheduler'dan farklıdır. Pratikte geliştiriciler, güvenilir veri yükleme için BGTaskScheduler'ı NSURLSession'ın arka plan URL oturumlarıyla birleştirir.

macOS ve watchOS uyumluluğu

macOS Catalina'dan itibaren BGTaskScheduler Mac'te de kullanılabilir. Bu, Apple Silicon'da çalışan UIKit uygulamaları için platformlar arası arka plan görevleri oluşturmaya olanak tanır. watchOS'ta framework sınırlı işlevselliğe sahiptir — yalnızca komplikasyonları güncellemek ve iPhone ile veri senkronize etmek için kısa BGAppRefreshTask'ler mevcuttur. Geliştiriciler, arka plan mimarisini planlarken platform farklılıklarını dikkate almalıdır.

Hata ayıklama ve tanı araçları

Apple, BGTaskScheduler'da hata ayıklamak için çeşitli araçlar sağlar. lldb'deki e -l objc -- (void)[[BGTaskScheduler sharedScheduler] _simulateLaunchForTaskWithIdentifier:@"com.example.task"] komutu, sistem sınırlamalarını atlayarak bir arka plan görevini zorla başlatır. Xcode'un Debug menüsünde kısa bir arka plan güncellemesini simüle eden Simulate Background Fetch bayrağı bulunur. Performans analizi için MetricKit kullanılır — her görevin başlatma sıklığı, yürütme süresi ve enerji tüketimi hakkında bilgi toplar. Bu veriler, planlama sıklığını optimize etmeye ve doğru görev türünü seçmeye yardımcı olur.

Pratikte BGTaskScheduler, widget verilerini güncellemek, iCloud senkronizasyonu, içerikli push bildirimlerini işleme ve Spotlight arama için indeksleme için uygundur. Gerçek zamanlı analiz, sohbet uygulamaları veya anında yürütme gerektiren herhangi bir görev için uygun değildir.

Apple kaynakları ve dokümantasyonu

BGTaskScheduler'ın derinlemesine incelenmesi için Apple, resmi WWDC dokümantasyonunu önerir: "Advances in Background Tasks" oturumu (2020) kullanımdan kaldırılan API'lerden geçişi kapsar ve "Background Tasks in Practice" (2021) gerçek kullanım durumlarını içerir. Energy Efficiency Guide bölümü de framework'ün Apple'ın genel enerji tasarrufu stratejisine nasıl uyduğunu açıklaması açısından faydalıdır. Kod örnekleri, GitHub'daki resmi Apple Developer deposunda iOS ve macOS için tam projelerle birlikte mevcuttur.

Sıkça sorulan sorular

BGTaskScheduler, iOS 12'deki Background Fetch'ten nasıl farklıdır?

Background Fetch uygulama başına bir arka plan göreviyle sınırlıydı ve öncelik mekanizması yoktu. BGTaskScheduler, farklı türlerde birden çok görevi destekler, birleşik bir API ve otomatik enerji yönetimi sağlar.

BGTaskScheduler'a kaç arka plan görevi kaydedilebilir?

Apple, kayıtlı tanımlayıcıların sayısına açık bir sınır koymaz, ancak pratikte 5–10'dan fazla görev kullanılmaması önerilir. Daha fazla sayı, sistem kaynakları için rekabet nedeniyle her bir belirli görevin yürütülme olasılığını azaltır.

Gerçek bir cihazda BGTaskScheduler yürütmesinde nasıl hata ayıklanır?

Hata ayıklama için lldb'de e -l objc -- (void)[[BGTaskScheduler sharedScheduler] _simulateLaunchForTaskWithIdentifier:@"com.example.task"] komutunu kullanın. Sistem sınırlamalarını atlayarak bir görevi zorla başlatır. Debug menüsündeki Xcode Simulate Background Fetch bayrağı da mevcuttur.

Uygulama kapatılırsa BGTaskScheduler bir görevi yürütebilir mi?

Evet, BGTaskScheduler, uygulama kullanıcı tarafından zorla kapatılmış olsa bile bir süreç başlatabilir. Ancak sistem ek gecikmeler uygulayabilir ve tüm görev türleri bu senaryoda yürütmeyi garanti etmez.

Bir görev ayrılan sürede tamamlanmazsa ne olur?

Sistem expirationHandler'ı çağırarak göreve sonlanması gerektiğini bildirir. Uygulama bu sinyali görmezden gelir ve çalışmaya devam ederse, iOS süreci zorla sonlandırır. Bundan sonra sistem, uygulamanın tüm arka plan görevlerinin önceliğini düşürebilir.

Özet

  • BGTaskScheduler, iOS 13+ ve macOS Catalina+'ta tüm arka plan görevlerini yönetmek için Apple'ın birleşik framework'üdür.
  • İki görev türü — 30 saniyeye kadar BGAppRefreshTask ve birkaç dakikaya kadar BGProcessingTask — farklı arka plan çalışma senaryolarını kapsar.
  • Kayıt iki yerde zorunludur: Info.plist (tanımlayıcılar) ve kod (registerHandler).
  • Planlama earliestBeginDate ile submitTaskRequest aracılığıyla — sistem en uygun başlangıç anını seçer.
  • ExpirationHandler, sistem tarafından görevin zorla sonlandırılmasını işlemek için zorunludur.
  • Sınırlamalar yürütme garantisi olmaması, enerji tüketimi kontrolü ve cihaz durumuna bağımlılığı içerir.
  • Kullanın BGTaskScheduler'ı içerik güncellemeleri, senkronizasyon ve indeksleme için, ancak gerçek zamanlı görevler için kullanmayın.

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun