Background Modes — скуп декларисаних могућности iOS-а који омогућавају апликацији да настави извршавање кода након преласка у позадински режим. Сваки режим одговара одређеној врсти задатака: аудио, геолокација, VoIP, Bluetooth, fetch и processing. Према Apple, 2026, неправилно коришћење Background Modes је један од честих разлога одбијања апликација при ревизији у App Store-у.
Главно
Background Modes — capability пројекта Xcode које декларишу намеру апликације да извршава одређене типове позадинских операција. За разлику од Android-а, где апликација може да покрене било који Service у позадини, iOS захтева експлицитно навођење режима у Info.plist-у. Сваки режим има строга правила коришћења и проверава се од стране Apple-а при ревизији.
Када апликација пређе у позадину, iOS је обуставља након 3–5 секунди. Ако апликација декларише Background Mode и активно користи одговарајући API (нпр. AVAudioSession за аудио), систем је пребацује у специјални режим извршавања. Апликација остаје у оперативној меморији и може да извршава код ограничен типом режима.
iOS подржава следеће Background Modes: Audio, Location, VoIP, Bluetooth LE, Background Fetch, Background Processing, External Accessory Communication, Push to Talk (PTT) и HealthKit. Сваки режим захтева оправдање у опису апликације.
| Режим | Кључ Info.plist-а | Намена | Верзија iOS-а |
|---|---|---|---|
| Audio | audio | Позадински аудио, AirPlay | 4.0+ |
| Location | location | Праћење локације | 4.0+ |
| VoIP | voip | VoIP push обавештења | 4.0+ |
| BLE | bluetooth-central | Рад са BLE уређајима | 7.0+ |
| Fetch | fetch | Периодично преузимање података | 7.0+ |
| Processing | processing | Дуготрајни позадински задаци | 13.0+ |
| Push to Talk | push-to-talk | Гласовни push-to-talk | 16.0+ |
Audio Background Mode — најраспрострањенији режим, који користе музички плејери, подкаст апликације и аудио сервиси. Апликација може да настави репродукцију звука, да се контролише преко Control Center-а и да се приказује на Lock Screen-у. За активацију је довољно конфигурисати AVAudioSession са категоријом .playback.
За рад аудио у позадини потребно је конфигурисати AVAudioSession и активирати је. Категорија .playback обавештава систем да апликација репродукује звук и треба да остане активна у позадини. Без ове конфигурације, звук ће се зауставити при минимизацији апликације у року од 5–10 секунди.
import AVFoundation
func configureAudioSession() {
let session = AVAudioSession.sharedInstance()
do {
try session.setCategory(
.playback,
mode: .default,
options: []
)
try session.setActive(true)
} catch {
print("Greška audio sesije: \(error)")
}
}
За интеграцију са Control Center-ом и Lock Screen-ом потребно је конфигурисати MPRemoteCommandCenter. Он обрађује команде Play, Pause, Next и Previous Track. Такође је потребно ажурирати MPNowPlayingInfoProperty за приказ метаподатака: назив песме, извођач, омот и напредак репродукције.
Почевши од iOS 14, Background Mode audio такође подржава Picture in Picture за видео. Апликација може да настави приказивање видеа у плутајућем прозору при минимизацији. За активацију користите AVPictureInPictureController са AVPlayerLayer-ом. Режим ради само ако апликација репродукује аудио запис.
Location Background Mode омогућава апликацији да прима ажурирања геолокације у позадини. Користи се у навигаторима, фитнес тракерима, апликацијама за доставу и друштвеним мрежама. Без овог режима, апликација добија локацију само једном при преласку у позадину, након чега ажурирања престају.
CLLocationManager подржава неколико стратегија праћења: значајне промене (significant-change location), стандардно праћење (standard location) и праћење региона (region monitoring). За позадински рад са максималном прецизношћу користите allowsBackgroundLocationUpdates = true и pausesLocationUpdatesAutomatically = false.
Континуирано праћење локације у позадини је један од најенергетски захтевнијих сценарија. iOS аутоматски прилагођава учесталост ажурирања у зависности од брзине кретања: при ходању ажурирања сваких 10–30 секунди, при вожњи аутомобилом сваких 1–5 секунди. За навигацију користите desiredAccuracy = kCLLocationAccuracyBestForNavigation.
let locationManager = CLLocationManager()
locationManager.requestAlwaysAuthorization()
locationManager.allowsBackgroundLocationUpdates = true
locationManager.pausesLocationUpdatesAutomatically = false
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.activityType = .fitness
locationManager.startUpdatingLocation()
Режим significant-change location ради без Location Background Mode-а — систем буди апликацију само при значајној промени координата (обично 500 m и више). Не захтева континуирано укључивање GPS-а, што штеди батерију. Погодан за временске апликације које ажурирају податке при кретању корисника.
Bluetooth LE Background Mode омогућава апликацији да интерагује са BLE уређајима у позадини. Користе га фитнес наруквице, медицински сензори, Smart Home уређаји и Beacon навигација. Режим се дели на два подтипа: bluetooth-central (апликација се повезује са уређајима) и bluetooth-peripheral (апликација наступа као уређај).
Апликација у улози Central може да скенира и повезује BLE уређаје у позадини. За то је потребно навести bluetooth-central у Background Modes-у и позвати CBCentralManager.scanForPeripherals са опцијом CBCentralManagerScanOptionAllowDuplicatesKey. У позадини скенирање ради са смањеном учесталошћу — систем може да одложи откривање ради уштеде енергије.
Апликација у улози Peripheral може да рекламира услуге и одговара на захтеве других уређаја. Режим bluetooth-peripheral омогућава апликацији да остане видљива за друге BLE уређаје чак и у позадини. Користи се у HealthKit апликацијама и IoT решењима.
Праћење iBeacon-а ради у позадини без додатних дозвола — систем сам бележи улазак и излазак из Beacon региона. Али за скенирање садржаја Beacon-а (proximity UUID, major, minor) потребна је Bluetooth дозвола и bluetooth-central Background Mode. Користите CLLocationManager са CLBeaconRegion за праћење.
VoIP Background Mode је намењен апликацијама за гласовну комуникацију (Skype, Zoom, WhatsApp). Режим омогућава апликацији да остане повезана са сервером за пријем долазних позива. Почевши од iOS 8, за VoIP се користи PushKit — фрејмворк који обрађује Push обавештења од VoIP сервера без учешћа APNs-а.
PushKit је једини механизам који гарантује доставу VoIP обавештења на уређај. При пријему PushKit обавештења, систем буди апликацију, чак и ако је била завршена. Апликација мора у року од 30 секунди да успостави везу са сервером и прикаже локално обавештење о долазном позиву.
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 се не може користити за обична обавештења — само за VoIP, watchOS комуникације и провајдере датотека. Apple ово проверава при ревизији. При неправилном коришћењу апликација се одбија. Почевши од iOS 13, PushKit само доставља обавештење — позивање CXProvider-а (CallKit) за приказ екрана позива је обавезно.
Background Fetch и Background Processing — режими за позадинско ажурирање садржаја и извршавање дуготрајних задатака. Fetch — кратка периодична ажурирања (до 30 с), Processing — дуготрајни задаци (до 10 мин) са условима (Wi-Fi, пуњење). Processing је доступан само од iOS 13+.
Режим Fetch омогућава систему да периодично буди апликацију за преузимање свежег садржаја. Систем анализира понашање корисника и бира оптимално време. Апликација мора да позове completion handler у року од 30 секунди. Fetch је погодан за новинске апликације, фејдове друштвених мрежа и временске прогнозе.
BGProcessingTask је намењена задацима који се могу извршавати без учешћа корисника: чишћење кеша, синхронизација велике базе података, обрада медијских датотека. Систем покреће задатак само под повољним условима — уређај на пуњачу, повезан на Wi-Fi, није у Low Power режиму. Доступно до 10 минута.
За BGProcessingTask потребно је навести requiresExternalPower и requiresNetworkConnectivity. Систем може да одложи извршавање на неодређено време ако услови нису испуњени. За разлику од BGAppRefreshTask, који мора да се изврши барем једном дневно, Processing можда неће бити извршен недељама ако се уређај ретко пуни.
Apple строго проверава коришћење Background Modes при ревизији апликација. Основно правило: сваки укључени режим мора бити оправдан функционалношћу апликације. Ако апликација декларише Location Mode, али не користи геолокацију, биће одбијена са захтевом да уклони capability.
Најчешћи прекршаји: Location Mode без очигледне потребе (апликација захтева приступ „Always" за приказивање реклама), Audio Mode без репродукције звука у позадини, VoIP без PushKit-а, BLE Mode без Bluetooth уређаја. Apple може да одбије апликацију чак и у фази ажурирања ако режим више није у употреби.
При слању на ревизију наведите у Notes конкретно оправдање сваког режима. На пример, „Location Background Mode се користи за праћење руте корисника у фитнес функцији". Без објашњења, рецензент може да одбије апликацију. За поверљиве функције (VoIP), Apple може да затражи тест налог.
Користите минимално потребан скуп режима. Ако апликацији треба позадинско преузимање података једном на сат — не укључујте Location Mode, користите Fetch или BGAppRefreshTask. Вишак режима не само да води до одбијања, већ ствара и негативан утисак: корисник види у подешавањима да апликација користи геолокацију у позадини.
Често постављана питања
Нема ограничења броја, али сваки режим мора бити оправдан функционалношћу апликације. Укључивање свих режима без потребе — гарантовани разлог одбијања при ревизији. Практично ограничење је 2–3 режима по апликацији, иначе ће корисник видети бројне захтеве за дозволе.
Користите UIApplication.shared.applicationState — апликација може да провери да ли се налази у позадини (state == .background). Такође можете пратити обавештења UIApplication.didEnterBackgroundNotification и willEnterForegroundNotification за пребацивање понашања.
Audio — репродукција звука преко звучника или слушалица. AirPlay — пренос звука и видеа на Apple TV и друге AirPlay уређаје. У пракси, Audio Mode покрива оба сценарија, јер AirPlay користи аудио сесију. Засебан AirPlay режим није потребан од iOS 7+.
Да, за то користите requestWhenInUseAuthorization() уместо requestAlwaysAuthorization(). Апликација ће добијати локацију само у предњем плану. Ако је потребно краткотрајно праћење у позадини — позовите startUpdatingLocation() и зауставите у willResignActive.
Сваки режим повећава потрошњу енергије. Location Mode — најскупљи, може скратити време рада за 30–50% при континуираном праћењу. Audio Mode — умерен (15–20%). Fetch и Processing — минимални (2–5%). BLE Mode — низак (5–10%) захваљујући енергетској ефикасности Bluetooth LE-а.
Резиме
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође