Background Modes, bir uygulamanın arka plana geçtikten sonra kod çalıştırmaya devam etmesine izin veren, iOS’un bildirilebilir yetenekleri kümesidir. Her mod belirli bir görev türüne karşılık gelir: ses, coğrafi konum, VoIP, Bluetooth, fetch ve processing. Apple, 2026’ya göre, Background Modes’un yanlış kullanımı, App Store incelemesinde uygulamaların reddedilmesinin yaygın nedenlerinden biridir.
Önemli Noktalar
Background Modes, uygulamanın arka planda belirli türde işlemler gerçekleştirme niyetini bildiren Xcode proje yetenekleridir. Bir uygulamanın arka planda herhangi bir Service başlatabildiği Android’in aksine, iOS, Info.plist’te modun açıkça bildirilmesini gerektirir. Her modun sıkı kullanım kuralları vardır ve Apple tarafından inceleme sırasında doğrulanır.
Bir uygulama arka plana geçtiğinde, iOS onu 3–5 saniye içinde askıya alır. Uygulama bir Background Mode bildirir ve ilgili API’yi (ses için AVAudioSession gibi) aktif olarak kullanırsa, sistem onu özel bir yürütme moduna alır. Uygulama bellekte kalır ve mod türüyle sınırlı kod çalıştırabilir.
iOS şu Background Modes’ları destekler: Ses, Konum, VoIP, Bluetooth LE (BLE aksesuarları), Background Fetch (periyodik güncellemeler), Background Processing (uzun süreli görevler), External Accessory Communication, Push to Talk (PTT) ve HealthKit. Her mod, uygulama açıklamasında gerekçelendirme gerektirir.
| Mod | Info.plist Anahtarı | Amaç | iOS Sürümü |
|---|---|---|---|
| Audio | audio | Arka plan sesi, AirPlay | 4.0+ |
| Location | location | Konum takibi | 4.0+ |
| VoIP | voip | VoIP push bildirimleri | 4.0+ |
| BLE | bluetooth-central | BLE cihazlarıyla çalışma | 7.0+ |
| Fetch | fetch | Periyodik veri indirme | 7.0+ |
| Processing | processing | Uzun süreli arka plan görevleri | 13.0+ |
| Push to Talk | push-to-talk | Push-to-talk ses | 16.0+ |
Ses Arka Plan Modu, müzik çalarlar, podcast uygulamaları ve ses hizmetleri tarafından kullanılan en yaygın moddur. Uygulama ses çalmaya devam edebilir, Kontrol Merkezi üzerinden kontrol edilebilir ve Kilit Ekranında görünebilir. Etkinleştirmek için .playback kategorisiyle AVAudioSession yapılandırmak yeterlidir.
Sesin arka planda çalışması için AVAudioSession’u yapılandırmak ve etkinleştirmek gerekir. .playback kategorisi, sisteme uygulamanın ses çaldığını ve arka planda aktif kalması gerektiğini belirtir. Bu yapılandırma olmadan, uygulama küçültüldükten 5–10 saniye sonra ses durur.
import AVFoundation
func configureAudioSession() {
let session = AVAudioSession.sharedInstance()
do {
try session.setCategory(
.playback,
mode: .default,
options: []
)
try session.setActive(true)
} catch {
print("Ses oturumu hatası: \(error)")
}
}
Kontrol Merkezi ve Kilit Ekranı ile entegrasyon için MPRemoteCommandCenter yapılandırılmalıdır. Oynat, Duraklat, Sonraki ve Önceki Parça komutlarını işler. Meta verileri görüntülemek için MPNowPlayingInfoProperty’nin güncellenmesi de gerekir: parça adı, sanatçı, kapak resmi ve oynatma ilerlemesi.
iOS 14’ten itibaren, Ses Arka Plan Modu, video için Picture in Picture’ı da destekler. Uygulama küçültüldüğünde videoyu hareketli bir pencerede göstermeye devam edebilir. Etkinleştirmek için AVPlayerLayer ile AVPictureInPictureController kullanın. Bu mod yalnızca uygulama bir ses parçası çalıyorsa çalışır.
Konum Arka Plan Modu, uygulamanın arka planda konum güncellemeleri almasına izin verir. Navigasyon uygulamalarında, fitness takipçilerinde, teslimat uygulamalarında ve sosyal ağlarda kullanılır. Bu mod olmadan, uygulama arka plana geçerken konumu yalnızca bir kez alır, ardından güncellemeler durur.
CLLocationManager birkaç takip stratejisini destekler: önemli konum değişiklikleri, standart konum takibi ve bölge izleme. Maksimum doğrulukla arka planda çalışmak için allowsBackgroundLocationUpdates = true ve pausesLocationUpdatesAutomatically = false kullanın.
Arka planda sürekli konum takibi, en enerji yoğun senaryolardan biridir. iOS otomatik olarak hareket hızına göre güncelleme sıklığını ayarlar: yürürken her 10–30 saniyede bir, araba kullanırken her 1–5 saniyede bir. Navigasyon için desiredAccuracy = kCLLocationAccuracyBestForNavigation kullanın.
let locationManager = CLLocationManager()
locationManager.requestAlwaysAuthorization()
locationManager.allowsBackgroundLocationUpdates = true
locationManager.pausesLocationUpdatesAutomatically = false
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.activityType = .fitness
locationManager.startUpdatingLocation()
significant-change location modu, Konum Arka Plan Modu olmadan çalışır — sistem, uygulamayı yalnızca koordinatlar önemli ölçüde değiştiğinde (genellikle 500 m veya daha fazla) uyandırır. Sürekli GPS gerektirmez, pil tasarrufu sağlar. Kullanıcı hareket ettiğinde verileri güncelleyen hava durumu uygulamaları için uygundur.
Bluetooth LE Arka Plan Modu, uygulamanın arka planda BLE cihazlarıyla etkileşime girmesine izin verir. Fitness bileklikleri, tıbbi sensörler, Akıllı Ev cihazları ve Beacon navigasyonunda kullanılır. Mod iki alt türe ayrılır: bluetooth-central (uygulama cihazlara bağlanır) ve bluetooth-peripheral (uygulama bir cihaz gibi davranır).
Central olarak hareket eden bir uygulama, arka planda BLE cihazlarını tarayabilir ve bunlara bağlanabilir. Bunun için Background Modes’da bluetooth-central belirtin ve CBCentralManagerScanOptionAllowDuplicatesKey seçeneğiyle CBCentralManager.scanForPeripherals çağrısı yapın. Arka planda tarama düşük frekansta çalışır — sistem enerji tasarrufu için keşfi geciktirebilir.
Peripheral olarak hareket eden bir uygulama, hizmetleri duyurabilir ve diğer cihazların isteklerine yanıt verebilir. bluetooth-peripheral modu, uygulamanın arka planda bile diğer BLE cihazlarına görünür kalmasını sağlar. HealthKit uygulamalarında ve IoT çözümlerinde kullanılır.
iBeacon izleme, ek izinler olmadan arka planda çalışır — sistem, Beacon bölgelerine giriş ve çıkışı kendisi takip eder. Ancak Beacon içeriğini (yakınlık UUID, major, minor) taramak için Bluetooth izni ve bluetooth-central Background Mode gerekir. İzleme için CLBeaconRegion ile CLLocationManager kullanın.
VoIP Arka Plan Modu, sesli iletişim uygulamaları (Skype, Zoom, WhatsApp) için tasarlanmıştır. Bu mod, uygulamanın gelen aramaları almak için sunucuya bağlı kalmasını sağlar. iOS 8’den itibaren VoIP için PushKit kullanılır — APNs’yi dahil etmeden VoIP sunucusundan push bildirimlerini işleyen bir framework.
PushKit, VoIP bildirimlerinin cihaza iletilmesini garanti eden tek mekanizmadır. Bir PushKit bildirimi alındığında, sistem uygulama sonlandırılmış olsa bile onu uyandırır. Uygulama 30 saniye içinde sunucuyla bağlantı kurmalı ve gelen arama için yerel bir bildirim göstermelidir.
import PushKit
class VoIPHandler: NSObject, PKPushRegistryDelegate {
func pushRegistry(
_ registry: PKPushRegistry,
didReceiveIncomingPushWith payload: PKPushPayload,
for type: PKPushType,
completion: @escaping () -> Void
) {
let caller = payload.dictionaryPayload["caller"] as! String
reportIncomingCall(from: caller)
completion()
}
}
PushKit sıradan bildirimler için kullanılamaz — yalnızca VoIP, watchOS iletişimi ve dosya sağlayıcıları içindir. Apple inceleme sırasında bunu doğrular. Uygunsuz kullanım, uygulamanın reddedilmesine yol açar. iOS 13’ten itibaren PushKit yalnızca bildirimi iletir — arama ekranını göstermek için CXProvider (CallKit) çağrısı yapmak zorunludur.
Background Fetch ve Background Processing, arka plan içerik güncellemeleri ve uzun süreli görevler için modlardır. Fetch kısa periyodik güncellemeler (30 saniyeye kadar), Processing ise koşullu (Wi-Fi, şarj) uzun görevler (10 dakikaya kadar) içindir. Processing yalnızca iOS 13+’ta kullanılabilir.
Fetch modu, sistemin yeni içerik indirmek için uygulamayı periyodik olarak uyandırmasına izin verir. Sistem, kullanıcı davranışını analiz eder ve en uygun zamanı seçer. Uygulama 30 saniye içinde completion handler’ı çağırmalıdır. Fetch, haber uygulamaları, sosyal medya akışları ve hava durumu için uygundur.
BGProcessingTask, kullanıcı müdahalesi olmadan çalışabilen görevler için tasarlanmıştır: önbellek temizleme, büyük veritabanı senkronizasyonu, medya dosyası işleme. Sistem, görevi yalnızca uygun koşullarda başlatır — cihaz şarj oluyor, Wi-Fi’a bağlı, Düşük Güç Modunda değil. 10 dakikaya kadar kullanılabilir.
BGProcessingTask için requiresExternalPower ve requiresNetworkConnectivity belirtilmelidir. Koşullar karşılanmazsa sistem yürütmeyi süresiz olarak erteleyebilir. Günde en az bir kez çalışması gereken BGAppRefreshTask’in aksine, cihaz nadiren şarj edilirse Processing haftalarca çalışmayabilir.
Apple, uygulama incelemesi sırasında Background Modes kullanımını sıkı bir şekilde denetler. Ana kural: etkinleştirilen her mod, uygulamanın işlevselliği ile gerekçelendirilmelidir. Bir uygulama Konum Modu bildiriyor ancak coğrafi konum kullanmıyorsa, yeteneği kaldırma zorunluluğuyla reddedilir.
En yaygın ihlaller: Konum Modu açık bir gereklilik olmaksızın (uygulama reklam göstermek için “Her Zaman” erişimi ister), arka plan ses çalma olmadan Ses Modu, PushKit olmadan VoIP, Bluetooth cihazları olmadan BLE Modu. Apple, mod artık kullanılmıyorsa güncelleme aşamasında bile uygulamayı reddedebilir.
İnceleme için gönderirken, Notlar bölümünde her mod için özel bir gerekçe belirtin. Örneğin, “Konum Arka Plan Modu, fitness özelliğinde kullanıcının rotasını izlemek için kullanılır.” Açıklama olmadan, incelemeyi yapan kişi uygulamayı reddedebilir. Gizli özellikler (VoIP) için Apple bir test hesabı isteyebilir.
Gerekli minimum mod kümesini kullanın. Uygulamanız saatte bir arka plan veri indirmesi gerektiriyorsa — Konum Modu’nu etkinleştirmeyin, Fetch veya BGAppRefreshTask kullanın. Ekstra modlar yalnızca reddedilmeye yol açmakla kalmaz, aynı zamanda olumsuz bir izlenim yaratır: kullanıcı Ayarlar’da uygulamanın arka planda coğrafi konum kullandığını görür.
Sıkça Sorulan Sorular
Sayı sınırı yoktur, ancak her mod uygulamanın işlevselliği ile gerekçelendirilmelidir. Gereksiz yere tüm modları etkinleştirmek, inceleme sırasında reddedilmenin garantili bir nedenidir. Pratik sınır, uygulama başına 2–3 moddur, aksi takdirde kullanıcı çok sayıda izin isteği görür.
UIApplication.shared.applicationState kullanın — uygulama arka planda olup olmadığını (state == .background) kontrol edebilir. Davranışı değiştirmek için UIApplication.didEnterBackgroundNotification ve willEnterForegroundNotification bildirimlerini de izleyebilirsiniz.
Audio — hoparlör veya kulaklıktan ses çalma. AirPlay — Apple TV ve diğer AirPlay cihazlarına ses ve video akışı. Pratikte, AirPlay ses oturumunu kullandığı için Audio Modu her iki senaryoyu da kapsar. iOS 7+’den itibaren ayrı bir AirPlay modu gerekmez.
Evet, bunun için requestAlwaysAuthorization yerine requestWhenInUseAuthorization() kullanın. Uygulama konumu yalnızca ön planda alır. Arka planda kısa süreli izleme gerekiyorsa, startUpdatingLocation() çağrısı yapın ve willResignActive içinde durdurun.
Her mod güç tüketimini artırır. Konum Modu en çok güç tüketen moddur, sürekli izleme ile pil ömrünü %30–50 oranında azaltabilir. Ses Modu orta düzeydedir (%15–20). Fetch ve Processing minimumdur (%2–5). BLE Modu, Bluetooth LE’nin enerji verimliliği sayesinde düşüktür (%5–10).
Özet
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.
Ayrıca okuyun