# Guideline 2.5.4: háttérmód miatti elutasítás az Apple-nél

> Guideline 2.5.4: az Apple elutasítja a deklarált, de semmire nem használt háttérmódot. Töröld a kulcsot, vagy mutasd meg a reviewernek a funkciót.

Eredeti oldal: [Guideline 2.5.4: háttérmód miatti elutasítás az Apple-nél](https://devoria.fr/hu/blog/guideline-2-5-4-hattermod-elutasitas-apple)
Szerző: [Mehdi Azizi](https://devoria.fr/hu/mehdi-azizi)
Megjelenés: 2026-11-04
A tartalom utolsó frissítése: 2026-11-04


A 2.5.4-es guideline a háttérmódokat a rendeltetésszerű használatukra korlátozza: hang, helymeghatározás, VoIP-hívások, feladat befejezése, helyi értesítések. Akkor jön az elutasítás, ha az Info.plist fájlod deklarál egy ilyen módot, de a reviewer nem talál olyan funkciót, amelynek szüksége lenne rá. **Ha semmi nem használja, töröld a kulcsot, ha pedig igen, mutasd meg a funkciót a reviewernek harminc másodperc alatt.**

A saját iOS-appjaimat Expóval adom ki. A Solys, a minijátékos ébresztőm, deklarálja az audio módot: kivettem, aztán egy másik okból visszaraktam. Ez az útmutató az Apple szövegére, más fejlesztők által közzétett elutasításokra és a saját projektjeimre épül. Az elutasítási okok áttekintéséhez olvasd el, [miért utasítja el az Apple az appokat](https://devoria.fr/hu/blog/apple-elutasitas-miert-utasitottak-el-az-appodat).

## Mit mond a 2.5.4-es guideline?

A szabály egyetlen mondat az [App Review Guidelines](https://developer.apple.com/app-store/review/guidelines/#2.5.4) 2. szakaszában („Performance”), a 2.5-ös „Software Requirements” részben: „Multitasking apps may only use background services for their intended purposes: VoIP, audio playback, location, task completion, local notifications, etc.”

Magyarul: egy háttérszolgáltatás csak arra való, amire kitalálták. Innen jön a „Guideline 2.5.4 - Performance - Software Requirements” cím.

Alapértelmezés szerint a háttérbe került app felfüggesztődik. Ha tovább akar futni, egy vagy több módot kell deklarálnia az Info.plist `UIBackgroundModes` kulcsában. Az [Apple háttérmódokról szóló dokumentációja](https://developer.apple.com/documentation/xcode/configuring-background-execution-modes) az akkumulátor miatt takarékos használatot kér, és azt, hogy válassz más megoldást, ha van. **Minden deklarált mód egy ígéret, amit a reviewer ellenőrizhet.**

## A háttérmódok és a rendeltetésük

| Mód                 | Kulcs                 | Rendeltetés                  |
| ------------------- | --------------------- | ---------------------------- |
| Audio, AirPlay, PiP | `audio`               | Hallható hang a háttérben    |
| Helymeghatározás    | `location`            | Folyamatos pozíció           |
| Voice over IP       | `voip`                | Hívások CallKittel           |
| Lekérés             | `fetch`               | Rendszeres hálózati tartalom |
| Feldolgozás         | `processing`          | Ütemezett feladatok          |
| Távoli értesítések  | `remote-notification` | Push új tartalomról          |

Ez a táblázat az Apple oldalát foglalja össze. A fórumokon közzétett elutasításokban az `audio`, a `location` és a `voip` fordul elő a leggyakrabban.

## Mit jelent a 2.5.4-es elutasító üzenet?

Az üzenet megnevezi az érintett módot. Két példa, amit fejlesztők tettek közzé az Apple fórumain:

- **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.” A folytatás pontosítja, hogy az `audio` kulcs olyan appoknak való, amelyek a háttérben hallható tartalmat szólaltatnak meg, például egy zenelejátszónak. Két kiutat kínál: add hozzá ezt a tartalmat, vagy töröld a kulcsot ([fórumszál](https://developer.apple.com/forums/thread/95216)).
- **Helymeghatározás**: egy [2024. decemberi szálban](https://developer.apple.com/forums/thread/771202) az Apple az alkalmazottak követésén kívül nem talált olyan funkciót, ami állandó pozíciót igényelne, és azt írta, hogy ez a használat önmagában nem megfelelő.

Ahogy én látom: **a reviewer nem a kódodat olvassa, hanem egy funkciót keres.** El kell tudnia indítani, háttérbe tenni az appot, és látni, hogy tovább működik.

A fordított eset is létezik. Egy [2026. májusi szálban](https://developer.apple.com/forums/thread/826849) egy felolvasó appot, amely tényleg használta az `audio` módot, többször elutasítottak: a reviewer nem tudta elindítani a hangot. Egy másik fejlesztő azt írja ott, hogy szerinte egy csatolt videó oldotta meg az ő esetét. Ez egy beszámoló, nem az Apple szabálya.

## Honnan jön a kulcs, ha nem te adtad hozzá?

Expóval a config pluginok töltik ki az Info.plistet a prebuild során. **Egy háttérmód tehát úgy is bekerülhet a binárisodba, hogy nem te döntöttél róla.**

### Az expo-audio plugin alapbeállítással

Az [expo-audio dokumentációja](https://docs.expo.dev/versions/latest/sdk/audio/) leírja: az `enableBackgroundPlayback` opció alapértéke `true`, és iOS-en hozzáadja az `audio` módot. Ha a plugint rövid formában, `"expo-audio"`-ként deklarálod, már ezzel deklaráltad a módot.

Ezt találtam a TradaZen átnézésekor, az első beküldés előtt: rövid felületi hangok az előtérben, de rövid formában deklarált plugin. A javítás az `app.json` fájlban van:

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

Más csomagok a maguk módján adnak hozzá módot. Az [expo-location](https://docs.expo.dev/versions/latest/sdk/location/) `isIosBackgroundLocationEnabled` opciója csak akkor adja hozzá a `location` módot, ha bekapcsolod. Az [expo-background-task](https://docs.expo.dev/versions/latest/sdk/background-task/) viszont már telepítéskor hozzáadja a `processing` módot a prebuildnél.

### Az ios/ mappa, ami megőrzi a régi kulcsot

A második csapda, amibe 2026 júliusában a Solysszal belefutottam. Kivettem az `audio` módot az `app.json` fájlból, de a kulcs ott maradt a korábban generált `ios/Solys/Info.plist` fájlban. A `--clean` nélküli prebuild módosítja ezt a projektet ahelyett, hogy újra létrehozná, a plugin pedig hozzáadja a kulcsot, de soha nem veszi ki. Egy helyi build belecsomagolta volna. A felhős EAS build friss prebuildből indul, ha az `ios/` mappát a git figyelmen kívül hagyja, és nálam ez volt a helyzet.

Minden build előtt ellenőrzöm, mi kerül ki valójában:

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

Az első kilistázza a módokat, amelyeket a prebuild az Info.plistbe ír. A második újra létrehozza a natív projektet egy helyi buildhez, az `ios/` mappa törlésével. A Solysnál az első parancs `"UIBackgroundModes":["audio"]` eredményt ad, a TradaZennél semmit: mindkettő szándékos.

Egy mód hozzáadása vagy törlése módosítja az Info.plistet, vagyis a binárist: **új build kell, egy távoli frissítés nem elég.** Az [EAS Update dokumentációja](https://docs.expo.dev/eas-update/introduction/) ezeket a változásokat az új binárist igénylők közé sorolja, ahogy az [ITMS-90683](https://devoria.fr/hu/blog/itms-90683-missing-purpose-string-expo) esetében is.

## Solys: deklarált audio mód, valódi okkal

A Solys ébresztő, de az `audio` mód nem az ébresztés megszólaltatására kell: **a csörgést az AlarmKit intézi**, az Apple iOS 26 óta elérhető ébresztőszolgáltatása ([AlarmKit dokumentáció](https://developer.apple.com/documentation/alarmkit)). A rendszer csörög, még néma módban is, nem az app.

A kulcs története, mert a gondolatmenet fontosabb, mint maga a sor:

1. **2026. július végén kiveszem.** Semmi nem szólt a háttérben: a minijátékok hangeffektjei az előtérben maradnak, és az ébresztő nem függ az apptól.
2. **Két nappal később visszarakom** az éjszakai hallgatás miatt. Ez az opció mikrofonnal rögzíti az éjszakád zajait, és az iPhone-on elemzi őket. A felvételnek zárolt képernyővel is folytatódnia kell, és az expo-audio dokumentációja szerint a háttérfelvétel opciója szintén hozzáadja az `audio` módot.

Az indoklás jellege megváltozott: **a mód felvételre kell, nem lejátszásra.** Három biztosíték, ami az appban látható:

- a hallgatás alapból kikapcsolt opció, amit a beállításokban vagy az esti rutinban lehet bekapcsolni;
- saját beleegyezési képernyője van, ahogy azt a [2.5.14-es szabály](https://developer.apple.com/app-store/review/guidelines/#2.5.14) minden felvételnél megköveteli, és semmi nem hagyja el a telefont;
- a mikrofon tíz perccel az ébresztés előtt lezárul, hogy a hallgatás és a csörgés soha ne zavarja egymást.

Nem tudom garantálni, hogy egy reviewer mindig elfogadja ezt a deklarációt. Azt viszont minden elemről meg tudom mondani, mire való és hol látható.

### Az ébresztők, amelyek ébren tartották az appot

Az AlarmKit előtt egy külső ébresztőapp nem tudott úgy csörögni, mint az Apple ébresztője. Egyes könyvtárak ezért ébren tartották az appot: a Flutteres [alarm2](https://pub.dev/packages/alarm2) csomag dokumentációja egy néma hanglejátszót ír le, ami az ébresztésig fut. Csakhogy egy néma hang semmit nem szólaltat meg. **iOS 26 óta az AlarmKit feleslegessé teszi ezt a kerülőutat.**

## Megtartani vagy törölni a módot: a döntési táblázat

| Helyzeted                 | Mit csinálj               |
| ------------------------- | ------------------------- |
| Rövid hangok az előtérben | Töröld az `audio` módot   |
| Zene vagy hangoskönyv     | Tartsd meg, mutasd meg    |
| Hosszú felvétel           | Tartsd meg + beleegyezés  |
| Ébresztő vagy időzítő     | AlarmKit (iOS 26)         |
| Pozíció időnként          | Jelentős helyváltozások   |
| Nem sürgős szinkronizálás | `fetch` vagy `processing` |
| Hang- vagy videohívások   | `voip` CallKittel         |

A pozíciónál az Apple oldala a jelentős helyváltozások szolgáltatását említi a `location` mód alternatívájaként.

## A 2.5 többi pontja: 2.5.1 és 2.5.2

### 2.5.1: publikus API-k és rendeltetésszerűen használt frameworkök

„Apps may only use public APIs and must run on the currently shipping OS.” Az app csak publikus API-kat használ, a rendszer aktuális verzióján fut, és elhagyja az elavult dolgokat. Ahogy a 2.5.4-nél, itt is minden framework a rendeltetésére szolgál, és ezt a leírás is említi: HealthKit az egészséghez, HomeKit az okosotthonhoz. Ha egy könyvtár privát API-t hív, az elutasítást a te appod kapja.

### 2.5.2: nincs letöltött kód, ami megváltoztatja az appot

Az app önálló marad a saját csomagjában. Nem „download, install, or execute code which introduces or changes features or functionality of the app”. Csak a programozást tanító oktatási appok kapnak korlátozott kivételt, teljesen látható és a felhasználó által szerkeszthető kóddal.

Expónál ez az EAS Update-et érinti, amelynek dokumentációja emlékeztet: a frissítéseknek meg kell felelniük az App Store szabályainak. **A távoli frissítéseket hibajavításra használd, soha ne olyan funkció szállítására, amit a reviewer nem látott.** A reviewhoz kötődő javítás új buildet igényel, ahogy a [2.1-es guideline](https://devoria.fr/hu/blog/guideline-2-1-app-store-elutasitas-javitasa) útmutatójában elmagyarázom.

## Hogyan válaszolj egy 2.5.4-es elutasításra?

A beszélgetés az appod App Review szekciójában zajlik, ahol [válaszolsz az App Review üzenetére](https://developer.apple.com/help/app-store-connect/manage-submissions-to-app-review/reply-to-app-review-messages/). Két eset van:

- **A mód semmire nem kell**: töröld, készíts új buildet, ellenőrizd az introspectiont, aztán válaszolj két mondatban.
- **A mód valódi funkciót szolgál**: válaszolj a pontos útvonallal és egy rövid videóval, majd ezt a szöveget írd be minden verzió review notes mezőjébe is.

A sablon, amit én használnék, testre szabva (az ébresztős mondatot töröld, ha az appodban nincs ilyen):

```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,
```

## 2.5.4-es checklist beküldés előtt

- Az Expo introspection csak a szándékos módokat mutatja, és mindegyiknél meg tudod nevezni a funkciót.
- Egyetlen plugin sincs rövid formában deklarálva, ha alapból módot ad hozzá, mint az expo-audio.
- A helyi `ios/` mappád nem őriz régi kulcsot, vagy tiszta prebuildből fordítasz.
- A funkció gyorsan elindítható, rejtett beállítás nélkül, és a review notes leírja, melyik mód mire kell és hogyan tesztelhető.
- Minden felvétel kifejezett beleegyezést kér, és látható jelzést mutat. Az engedélykérésekre vonatkozó szabályokat az [5.1.1-es guideline](https://devoria.fr/hu/blog/guideline-5-1-1-app-store-elutasitas) útmutatójában találod.
- Ébresztőnél a csörgés az AlarmKiten keresztül megy, nem az appból lejátszott hangként.

## Ellenőrizd a csomagod beküldés előtt

A [Review Kit](https://devoria.fr/hu/kits/app-review) tartalmazza a beküldés előtti checklistemet, sablonokat a tesztelőnek szóló jegyzetekhez és Claude Code skilleket, amelyek átnézik a projektedet. Ha emberi szemre van szükséged, [foglalj velem egy órát](https://devoria.fr/hu/coaching): videóhívásban együtt átnézzük az Apple üzenetét és az Info.plistedet. A teljes folyamat az [Apple által elutasított app](https://devoria.fr/hu/expertise/apple-altal-elutasitott-alkalmazas) oldalon van.

Az első megjelenésedre készülsz? [Csináld meg az ingyenes diagnózist](https://devoria.fr/hu/diagnostic): sorba rendezi a lépéseket, és elküldi neked az Apple-elutasítás elleni checklistemet.

Senki nem garantálhatja, hogy az Apple elfogadja az appodat. Egy jól megindokolt háttérmódot viszont harminc másodperc alatt meg lehet védeni.

## Gyakori kérdések

### Mit jelent a „Guideline 2.5.4 - Performance - Software Requirements”?

Ez az elutasítás címe, amikor az Apple úgy ítéli meg, hogy az Info.plisted egyik háttérmódja nem a rendeltetésére szolgál. Az üzenet megnevezi a módot, és azt javasolja, hogy mutasd meg az azt használó funkciót, vagy töröld a kulcsot.

### Kell új build egy 2.5.4-es elutasítás után?

Ha törölsz vagy módosítasz egy módot, igen: a kulcs az Info.plistben, tehát a binárisban van. Ha a mód indokolt, elég lehet egy válasz a pontos útvonallal és egy videóval.

### Megtarthatom az audio módot néhány felületi hang miatt?

Nem. Az előtérben lejátszott rövid hangoknak nincs rá szükségük. Expóval állítsd az expo-audio pluginban az `enableBackgroundPlayback` értékét `false`-ra.

### Kell egy ébresztőappnak az audio mód?

A csörgéshez nem, ha az iOS 26 óta elérhető AlarmKitre épül: a rendszer játssza le az ébresztést. A Solysnál az `audio` mód az éjszakai hallgatáshoz kell, ami zárolt képernyővel is rögzít.

### Miért hivatkozik az Apple a 2.5.4-re, ha semmit nem deklaráltam?

Lehet, hogy egy plugin megtette helyetted: az expo-audio alapból hozzáadja az `audio` módot, és egy régi `ios/` mappa megőrizhet egy kulcsot, amit a konfigurációdból már kivettél. Ellenőrizd a `npx expo config --type introspect` paranccsal.


## A projekted

[Review Kit](https://devoria.fr/hu/kits/app-review): Az App Store review checklistem, a javított Apple-elutasításaim, a Google Play checklist és három Claude Code skill. 17 990 Ft.

[iOS & Android Kit](https://devoria.fr/hu/kits/ios): Készítsd el iPhone- és Android-appodat Claude Code-dal: az appjaim kezdőkódja, az út a store-okig és az összes kit. 35 990 Ft.

[Diagnózis: mi választ el az iPhone-appodtól](https://devoria.fr/hu/diagnostic): 7 kérdés, 60 másodperc: megtudod, mi akadályoz valójában abban, hogy kiadd az iPhone-appodat, megkapod a 4 lépéses utadat és a hozzád illő kitet.
