# Guideline 2.5.4: Apple zavrne način delovanja v ozadju

> Guideline 2.5.4: Apple zavrne način delovanja v ozadju, ki ga nobena funkcija ne uporablja. Odstrani ključ ali pregledovalcu pokaži zvok, lokacijo ali klic.

Izvirna stran: [Guideline 2.5.4: Apple zavrne način delovanja v ozadju](https://devoria.fr/sl/blog/guideline-2-5-4-nacin-delovanja-v-ozadju-zavrnitev)
Avtor: [Mehdi Azizi](https://devoria.fr/sl/mehdi-azizi)
Objava: 2026-11-04
Zadnja revizija vsebine: 2026-11-04


Guideline 2.5.4 omejuje načine delovanja v ozadju na njihov predvideni namen: zvok, lokacija, klici VoIP, dokončanje opravila, lokalna obvestila. Zavrnitev pride, ko tvoj Info.plist prijavi enega od teh načinov, pregledovalec pa ne najde nobene funkcije, ki bi ga potrebovala. **Če ga nič ne uporablja, ključ odstrani, sicer pa pregledovalcu funkcijo pokaži v tridesetih sekundah.**

Svoje aplikacije za iOS objavljam z Expo. Solys, moja budilka z mini igrami, prijavlja način audio: odstranil sem ga, potem pa ga iz drugega razloga vrnil. Ta vodnik temelji na Applovem besedilu, na zavrnitvah, ki so jih objavili drugi razvijalci, in na mojih projektih. Za pregled vseh razlogov preberi, [zakaj Apple zavrne aplikacijo](https://devoria.fr/sl/blog/apple-zavrnil-aplikacijo-razlogi).

## Kaj pravi guideline 2.5.4?

Pravilo je en sam stavek, v razdelku 2 „Performance“, delu 2.5 „Software Requirements“ dokumenta [App Review Guidelines](https://developer.apple.com/app-store/review/guidelines/#2.5.4): „Multitasking apps may only use background services for their intended purposes: VoIP, audio playback, location, task completion, local notifications, etc.“

Po domače: storitev v ozadju služi samo temu, za kar obstaja. Od tod naslov „Guideline 2.5.4 - Performance - Software Requirements“.

Aplikacija, ki gre v ozadje, se privzeto zaustavi. Če želi teči naprej, prijavi enega ali več načinov v ključu `UIBackgroundModes` v svojem Info.plist. [Applova dokumentacija o načinih delovanja v ozadju](https://developer.apple.com/documentation/xcode/configuring-background-execution-modes) zaradi baterije zahteva, da jih uporabljaš varčno in da izbereš drugo rešitev, kadar obstaja. **Vsak prijavljen način je obljuba, ki jo pregledovalec lahko preveri.**

## Načini delovanja v ozadju in njihov namen

| Način               | Ključ                 | Predvideni namen      |
| ------------------- | --------------------- | --------------------- |
| Audio, AirPlay, PiP | `audio`               | Slišen zvok v ozadju  |
| Lokacija            | `location`            | Neprekinjena lokacija |
| Voice over IP       | `voip`                | Klici s CallKit       |
| Pridobivanje        | `fetch`               | Redna omrežna vsebina |
| Obdelava            | `processing`          | Načrtovana opravila   |
| Oddaljena obvestila | `remote-notification` | Push nove vsebine     |

Tabela povzema Applovo stran. V zavrnitvah, objavljenih na forumih, se najpogosteje pojavljajo `audio`, `location` in `voip`.

## Kaj pomeni sporočilo o zavrnitvi 2.5.4?

Sporočilo navede sporni način. Dva primera, ki so ju razvijalci objavili na Applovih forumih:

- **Audio**: „Your app still declares support for audio in the UIBackgroundModes key in your Info.plist but did not include features that require persistent audio.“ Nadaljevanje pojasni, da je ključ `audio` namenjen aplikacijam, ki v ozadju predvajajo slišno vsebino, na primer predvajalniku glasbe. Ponudi dva izhoda: dodaj takšno vsebino ali odstrani ključ ([nit na forumu](https://developer.apple.com/forums/thread/95216)).
- **Lokacija**: v [niti iz decembra 2024](https://developer.apple.com/forums/thread/771202) Apple ni našel nobene funkcije razen sledenja zaposlenim, ki bi zahtevala stalno lokacijo, in je zapisal, da ta uporaba sama po sebi ni primerna.

Moje branje: **pregledovalec ne bere tvoje kode, išče funkcijo.** Zagnati jo mora, aplikacijo poslati v ozadje in videti, da deluje naprej.

Obstaja tudi obraten primer. V [niti iz maja 2026](https://developer.apple.com/forums/thread/826849) je bila aplikacija za branje na glas, ki je način `audio` res uporabljala, večkrat zavrnjena: pregledovalcu ni uspelo sprožiti zvoka. Drug razvijalec tam piše, da je po njegovem mnenju njegov primer odblokiral priložen video. To je pričevanje, ne Applovo pravilo.

## Od kod ključ, če ga nisi dodal?

Pri Expo Info.plist ob prebuildu izpolnijo konfiguracijski vtičniki. **Način delovanja v ozadju lahko torej pride v tvoj binarni paket, ne da bi se ti za to odločil.**

### Vtičnik expo-audio s privzetimi nastavitvami

[Dokumentacija expo-audio](https://docs.expo.dev/versions/latest/sdk/audio/) to navaja: možnost `enableBackgroundPlayback` ima privzeto vrednost `true` in na iOS doda način `audio`. Že to, da vtičnik prijaviš v kratki obliki, `"expo-audio"`, torej prijavi način.

Prav to sem našel, ko sem pred prvo oddajo pregledoval TradaZen: kratki zvoki vmesnika v ospredju, vtičnik pa prijavljen v kratki obliki. Popravek je v `app.json`:

```json
{
  "expo": {
    "plugins": [["expo-audio", { "enableBackgroundPlayback": false }]]
  }
}
```

Drugi paketi dodajo način po svoje. Možnost `isIosBackgroundLocationEnabled` v [expo-location](https://docs.expo.dev/versions/latest/sdk/location/) doda `location` samo, če jo vklopiš. [expo-background-task](https://docs.expo.dev/versions/latest/sdk/background-task/) pa ob prebuildu doda `processing` takoj, ko je nameščen.

### Mapa ios/, ki obdrži stari ključ

Druga past, ki sem jo doživel pri Solys julija 2026. `audio` sem odstranil iz `app.json`, ključ pa je ostal v prej ustvarjenem `ios/Solys/Info.plist`. Prebuild brez `--clean` ta projekt spremeni, namesto da bi ga ustvaril na novo, vtičnik pa ključ doda, nikoli pa ga ne odstrani. Lokalni build bi ga vključil. Build EAS v oblaku začne s svežim prebuildom, kadar git mapo `ios/` ignorira, kar je bil moj primer.

Pred vsakim buildom preverim, kaj bo res odšlo:

```bash
npx expo config --type introspect --json | grep -o '"UIBackgroundModes":\[[^]]*\]'
npx expo prebuild --clean --platform ios
```

Prvi ukaz izpiše načine, ki jih bo prebuild zapisal v Info.plist. Drugi za lokalni build na novo ustvari nativni projekt in izbriše mapo `ios/`. Pri Solys prvi pokaže `"UIBackgroundModes":["audio"]`, pri TradaZen nič: oboje je namerno.

Dodajanje ali odstranjevanje načina spremeni Info.plist, torej binarni paket: **potreben je nov build, posodobitev na daljavo ne zadošča.** [Dokumentacija EAS Update](https://docs.expo.dev/eas-update/introduction/) te spremembe uvršča med tiste, ki zahtevajo nov binarni paket, tako kot pri [ITMS-90683](https://devoria.fr/sl/blog/itms-90683-missing-purpose-string-expo).

## Solys: prijavljen način audio, z dobrim razlogom

Solys je budilka, a način `audio` ne služi zvonjenju alarma: **zvonjenje gre prek AlarmKit**, Applove storitve za alarme, ki je na voljo od iOS 26 ([dokumentacija AlarmKit](https://developer.apple.com/documentation/alarmkit)). Zvoni sistem, tudi v tihem načinu, ne aplikacija.

Zgodovina ključa, ker je razmislek pomembnejši od vrstice:

1. **Konec julija 2026 ga odstranim.** Nič ni predvajalo zvoka v ozadju: zvočni učinki mini iger ostanejo v ospredju, alarm pa ni odvisen od aplikacije.
2. **Dva dni pozneje ga vrnem**, skupaj s poslušanjem noči. Ta možnost z mikrofonom snema zvoke tvoje noči in jih analizira na iPhonu. Snemanje mora teči tudi pri zaklenjenem zaslonu, dokumentacija expo-audio pa navaja, da tudi možnost snemanja v ozadju doda način `audio`.

Utemeljitev je spremenila naravo: **način služi snemanju, ne predvajanju.** Tri varovala, vidna v aplikaciji:

- poslušanje je možnost, ki je privzeto izklopljena in se vklopi v nastavitvah ali v večernem ritualu;
- ima svoj zaslon za privolitev, kot za vsako snemanje zahteva [pravilo 2.5.14](https://developer.apple.com/app-store/review/guidelines/#2.5.14), in nič ne zapusti telefona;
- mikrofon se zapre deset minut pred alarmom, da se poslušanje in zvonjenje nikoli ne motita.

Ne morem zagotoviti, da bo pregledovalec to prijavo vedno sprejel. Za vsak element pa znam povedati, čemu služi in kje ga je videti.

### Budilke, ki so aplikacijo držale budno

Pred AlarmKit budilka tretjega razvijalca ni mogla zvoniti kot Applov alarm. Nekatere knjižnice so zato aplikacijo držale budno: dokumentacija paketa Flutter [alarm2](https://pub.dev/packages/alarm2) opisuje tih predvajalnik zvoka, ki teče do alarma. Toda nem zvok ne predvaja ničesar slišnega. **Od iOS 26 je zaradi AlarmKit ta ovinek nepotreben.**

## Obdržati ali odstraniti način: odločitvena tabela

| Tvoja situacija          | Kaj narediti                |
| ------------------------ | --------------------------- |
| Kratki zvoki v ospredju  | Odstrani `audio`            |
| Glasba ali zvočna knjiga | Obdrži, pokaži ga           |
| Dolgo snemanje           | Obdrži + privolitev         |
| Budilka ali časovnik     | AlarmKit (iOS 26)           |
| Občasna lokacija         | Pomembne spremembe lokacije |
| Nenujna sinhronizacija   | `fetch` ali `processing`    |
| Zvočni ali video klici   | `voip` s CallKit            |

Za lokacijo Applova stran kot alternativo načinu `location` navaja storitev pomembnih sprememb lokacije.

## Druge točke razdelka 2.5: 2.5.1 in 2.5.2

### 2.5.1: javni API-ji in ogrodja na svojem mestu

„Apps may only use public APIs and must run on the currently shipping OS.“ Aplikacija uporablja samo javne API-je, teče na trenutni različici sistema in opusti zastarelo. Tako kot pri 2.5.4 vsako ogrodje služi svojemu predvidenemu namenu, omenjenemu v opisu: HealthKit za zdravje, HomeKit za pametni dom. Če knjižnica kliče zasebni API, zavrnitev dobi tvoja aplikacija.

### 2.5.2: brez prenesene kode, ki spreminja aplikacijo

Aplikacija ostane samostojna v svojem paketu. Ne sme „download, install, or execute code which introduces or changes features or functionality of the app“. Omejeno izjemo imajo samo izobraževalne aplikacije, ki učijo programiranja, s kodo, ki jo uporabnik v celoti vidi in lahko spreminja.

Pri Expo to zadeva EAS Update, katerega dokumentacija opominja, da morajo posodobitve spoštovati pravila App Store. **Posodobitve na daljavo uporabljaj za popravke, nikoli za dostavo funkcije, ki je pregledovalec ni videl.** Popravek, povezan s pregledom, gre prek novega builda, kot razložim v vodniku za [guideline 2.1](https://devoria.fr/sl/blog/smernica-2-1-app-store-zavrnitev).

## Kako odgovoriti na zavrnitev 2.5.4?

Pogovor poteka v razdelku App Review tvoje aplikacije, kjer [odgovoriš na sporočilo App Review](https://developer.apple.com/help/app-store-connect/manage-submissions-to-app-review/reply-to-app-review-messages/). Dva primera:

- **Način ne služi ničemur**: odstrani ga, naredi nov build, preveri introspekcijo in odgovori v dveh stavkih.
- **Način služi pravi funkciji**: odgovori z natančno potjo in kratkim videom, nato to besedilo ponovi v opombah za pregled pri vsaki različici.

Predloga, ki bi jo uporabil, prilagodi jo (stavek o alarmu odstrani, če ga tvoja aplikacija nima):

```text
Hello,

The "audio" background mode is used only by [feature], an
optional feature that [records / plays] audio while the
device is locked. It is off by default.

How to test:
1. Open [screen] and turn on [feature].
2. Accept the microphone permission if asked.
3. Tap [button], then lock the device.
   [What the reviewer will hear or see.]

Our alarm does not use this mode: it is scheduled with
AlarmKit and rings through the system.

Attached: a short screen recording of these steps.

Best regards,
```

## Kontrolni seznam 2.5.4 pred oddajo

- Introspekcija Expo prikaže samo želene načine in za vsakega znaš poimenovati funkcijo.
- Noben vtičnik ni prijavljen v kratki obliki, če privzeto doda način, kot expo-audio.
- Tvoja lokalna mapa `ios/` ne hrani nobenega starega ključa, ali pa gradiš iz čistega prebuilda.
- Funkcija se sproži hitro, brez skrite nastavitve, opombe za pregled pa povedo, kateri način služi čemu in kako ga preizkusiti.
- Vsako snemanje zahteva izrecno privolitev in prikazuje viden indikator. Pravila o zahtevah za dovoljenja so v vodniku za [guideline 5.1.1](https://devoria.fr/sl/blog/smernica-5-1-1-zavrnitev-app-store).
- Pri budilki gre zvonjenje prek AlarmKit, ne prek zvoka, ki ga predvaja aplikacija.

## Preveri svojo oddajo pred pošiljanjem

[Review Kit](https://devoria.fr/sl/kits/app-review) združuje moj kontrolni seznam pred oddajo, predloge opomb za preizkuševalca in skille za Claude Code, ki pregledajo tvoj projekt. Če želiš človeški pogled, [rezerviraj uro z mano](https://devoria.fr/sl/coaching): Applovo sporočilo in tvoj Info.plist prebereva skupaj, prek videoklica. Celoten postopek je na strani [aplikacija, ki jo je Apple zavrnil](https://devoria.fr/sl/expertise/apple-zavrnil-aplikacijo).

Pripravljaš svojo prvo objavo? [Opravi brezplačno diagnostiko](https://devoria.fr/sl/diagnostic): korake postavi v pravi vrstni red in ti pošlje moj kontrolni seznam proti Applovim zavrnitvam.

Nihče ne more zagotoviti, da bo Apple sprejel tvojo aplikacijo. Dobro utemeljen način delovanja v ozadju pa se ubrani v tridesetih sekundah.

## Pogosta vprašanja

### Kaj pomeni „Guideline 2.5.4 - Performance - Software Requirements“?

To je naslov zavrnitve, ko Apple presodi, da način delovanja v ozadju v tvojem Info.plist ne služi svojemu predvidenemu namenu. Sporočilo navede način in predlaga, da pokažeš funkcijo, ki ga uporablja, ali odstraniš ključ.

### Je po zavrnitvi 2.5.4 potreben nov build?

Če način odstraniš ali spremeniš, da: ključ je v Info.plist, torej v binarnem paketu. Če je način upravičen, lahko zadošča odgovor z natančno potjo in videom.

### Lahko obdržim način audio za nekaj zvokov vmesnika?

Ne. Kratki zvoki, predvajani v ospredju, ga ne potrebujejo. Pri Expo v vtičniku expo-audio nastavi `enableBackgroundPlayback` na `false`.

### Ali budilka potrebuje način audio?

Za zvonjenje ne, če se opira na AlarmKit, ki je na voljo od iOS 26: alarm predvaja sistem. Pri Solys način `audio` služi poslušanju noči, ki snema pri zaklenjenem zaslonu.

### Zakaj Apple navaja 2.5.4, čeprav nisem ničesar prijavil?

Morda je to namesto tebe naredil vtičnik: expo-audio privzeto doda način `audio`, stara mapa `ios/` pa lahko obdrži ključ, ki si ga odstranil iz konfiguracije. Preveri z `npx expo config --type introspect`.


## Tvoj projekt

[Review Kit](https://devoria.fr/sl/kits/app-review): Moj kontrolni seznam za pregled v App Store, moje popravljene zavrnitve Applea, seznam za Google Play in trije skilli za Claude Code. 49 €.

[iOS & Android Kit](https://devoria.fr/sl/kits/ios): Ustvari svojo aplikacijo za iPhone in Android s Claude Code: začetna koda mojih aplikacij, pot do trgovin in vsi kompleti. 99 €.

[Diagnoza: kaj te loči od tvoje aplikacije za iPhone](https://devoria.fr/sl/diagnostic): 7 vprašanj, 60 sekund: izveš, kaj te zares ovira pri objavi aplikacije za iPhone, dobiš pot v 4 korakih in komplet, ki ti ustreza.
