# Guideline 2.5.4: Apple rebutja el mode en segon pla

> Guideline 2.5.4: Apple rebutja un mode en segon pla declarat sense cap funció que l'utilitzi. Treu la clau o mostra al reviewer el so, la ubicació o la trucada.

Pàgina original: [Guideline 2.5.4: Apple rebutja el mode en segon pla](https://devoria.fr/ca/blog/guideline-2-5-4-mode-segon-pla-apple)
Autor: [Mehdi Azizi](https://devoria.fr/ca/mehdi-azizi)
Publicació: 2026-11-04
Darrera revisió del contingut: 2026-11-04


La guideline 2.5.4 limita els modes en segon pla al seu ús previst: so, ubicació, trucades VoIP, finalització de tasques, notificacions locals. El rebuig arriba quan el teu Info.plist declara un d'aquests modes i el reviewer no troba cap funció que el necessiti. **Treu la clau si res no l'utilitza; si no, mostra la funció al reviewer en trenta segons.**

Publico les meves pròpies apps iOS amb Expo. Solys, el meu despertador amb minijocs, declara el mode àudio: el vaig treure i després el vaig tornar a posar per una altra raó. Aquesta guia es basa en el text d'Apple, en rebuigs publicats per altres desenvolupadors i en els meus projectes. Per a la visió de conjunt dels motius, llegeix [per què Apple rebutja una app](https://devoria.fr/ca/blog/rebuig-apple-per-que-rebutgen-app).

## Què diu la guideline 2.5.4?

La norma cap en una frase, a la secció 2 "Performance", part 2.5 "Software Requirements", de les [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."

En resum: un servei en segon pla només serveix per allò per al qual existeix. D'aquí ve el títol "Guideline 2.5.4 - Performance - Software Requirements".

Per defecte, una app que passa a segon pla queda suspesa. Per continuar funcionant, declara un o diversos modes a la clau `UIBackgroundModes` del seu Info.plist. La [documentació d'Apple sobre els modes en segon pla](https://developer.apple.com/documentation/xcode/configuring-background-execution-modes) demana fer-los servir amb moderació, per la bateria, i preferir una altra solució quan n'hi hagi. **Cada mode declarat és una promesa que el reviewer pot comprovar.**

## Els modes en segon pla i el seu ús previst

| Mode                  | Clau                  | Ús previst                 |
| --------------------- | --------------------- | -------------------------- |
| Àudio, AirPlay, PiP   | `audio`               | So audible en segon pla    |
| Ubicació              | `location`            | Ubicació contínua          |
| Veu sobre IP          | `voip`                | Trucades amb CallKit       |
| Recuperació           | `fetch`               | Contingut de xarxa regular |
| Processament          | `processing`          | Tasques programades        |
| Notificacions remotes | `remote-notification` | Push de contingut nou      |

Aquesta taula resumeix la pàgina d'Apple. Als rebuigs publicats als fòrums, `audio`, `location` i `voip` són els que surten més.

## Què vol dir el missatge de rebuig 2.5.4?

El missatge anomena el mode en qüestió. Dos exemples publicats per desenvolupadors als fòrums d'Apple:

- **Àudio**: "Your app still declares support for audio in the UIBackgroundModes key in your Info.plist but did not include features that require persistent audio." Després precisa que la clau `audio` és per a apps que reprodueixen contingut audible en segon pla, com un reproductor de música. Proposa dues sortides: afegir aquest contingut o treure la clau ([fil del fòrum](https://developer.apple.com/forums/thread/95216)).
- **Ubicació**: en un [fil de desembre de 2024](https://developer.apple.com/forums/thread/771202), Apple no va trobar cap funció, a part del seguiment d'empleats, que demanés una ubicació permanent, i va escriure que aquest únic ús no era adequat.

La meva lectura: **el reviewer no llegeix el teu codi, busca una funció.** L'ha de poder iniciar, passar l'app a segon pla i comprovar que continua.

També passa el cas contrari. En un [fil de maig de 2026](https://developer.apple.com/forums/thread/826849), una app de lectura en veu alta, que feia servir de debò el mode `audio`, va ser rebutjada diverses vegades: el reviewer no aconseguia activar el so. Un altre desenvolupador hi escriu que, segons ell, un vídeo adjunt va desbloquejar el seu cas. És un testimoni, no una norma d'Apple.

## D'on surt la clau si tu no l'has afegida?

Amb Expo, són els plugins de configuració els que omplen l'Info.plist durant el prebuild. **Així que un mode en segon pla pot acabar dins el teu binari sense que ho hagis decidit.**

### El plugin expo-audio, amb la configuració per defecte

La [documentació d'expo-audio](https://docs.expo.dev/versions/latest/sdk/audio/) ho indica: l'opció `enableBackgroundPlayback` val `true` per defecte i, a iOS, afegeix el mode `audio`. Declarar el plugin en la forma curta, `"expo-audio"`, ja n'hi ha prou per declarar el mode.

És el que vaig trobar repassant TradaZen abans del primer enviament: sons curts d'interfície en primer pla, però un plugin declarat en forma curta. La correcció cap a `app.json`:

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

Altres paquets afegeixen un mode a la seva manera. L'opció `isIosBackgroundLocationEnabled` d'[expo-location](https://docs.expo.dev/versions/latest/sdk/location/) només afegeix `location` si l'actives. [expo-background-task](https://docs.expo.dev/versions/latest/sdk/background-task/), en canvi, afegeix `processing` al prebuild només d'instal·lar-lo.

### La carpeta ios/ que conserva la clau antiga

Segon parany, viscut amb Solys el juliol de 2026. Havia tret `audio` d'`app.json`, però la clau continuava a `ios/Solys/Info.plist`, generat abans. Un prebuild sense `--clean` modifica aquest projecte en lloc de tornar-lo a crear, i el plugin afegeix la clau però no la treu mai. Un build local l'hauria inclosa. Un build d'EAS al núvol parteix d'un prebuild nou quan git ignora `ios/`, que era el meu cas.

Abans de cada build, comprovo què s'enviarà de veritat:

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

La primera llista els modes que el prebuild escriurà a l'Info.plist. La segona torna a crear el projecte natiu per a un build local, esborrant la carpeta `ios/`. A Solys, la primera mostra `"UIBackgroundModes":["audio"]`, a TradaZen res: tots dos són intencionats.

Afegir o treure un mode modifica l'Info.plist, i per tant el binari: **cal un build nou, una actualització remota no n'hi ha prou.** La [documentació d'EAS Update](https://docs.expo.dev/eas-update/introduction/) classifica aquests canvis entre els que necessiten un binari nou, com passa amb [ITMS-90683](https://devoria.fr/ca/blog/itms-90683-missing-purpose-string-expo).

## Solys: un mode àudio declarat, amb una raó real

Solys és un despertador, però el mode `audio` no serveix per fer sonar l'alarma: **el so passa per AlarmKit**, el servei d'alarmes d'Apple disponible des d'iOS 26 ([documentació d'AlarmKit](https://developer.apple.com/documentation/alarmkit)). Qui sona és el sistema, fins i tot en mode silenciós, no l'app.

L'historial de la clau, perquè el raonament compta més que la línia:

1. **A finals de juliol de 2026, la trec.** No sonava res en segon pla: els efectes dels minijocs es queden en primer pla, i l'alarma no depèn de l'app.
2. **Dos dies després, la torno a posar**, amb l'escolta de la nit. Aquesta opció enregistra els sorolls de la teva nit amb el micròfon i els analitza a l'iPhone. L'enregistrament ha de continuar amb la pantalla bloquejada, i la documentació d'expo-audio indica que l'opció d'enregistrament en segon pla també afegeix el mode `audio`.

La justificació ha canviat de naturalesa: **el mode serveix per enregistrar, no per reproduir.** Tres salvaguardes, visibles a l'app:

- l'escolta és una opció desactivada per defecte, que s'activa des de la configuració o des del ritual del vespre;
- té la seva pròpia pantalla de consentiment, com exigeix la [norma 2.5.14](https://developer.apple.com/app-store/review/guidelines/#2.5.14) per a qualsevol enregistrament, i res no surt del telèfon;
- el micròfon es tanca deu minuts abans de l'alarma, perquè l'escolta i el so no es molestin mai.

No puc garantir que un reviewer acceptarà sempre aquesta declaració. Sí que sé dir, de cada element, per a què serveix i on es veu.

### Els despertadors que mantenien l'app desperta

Abans d'AlarmKit, una app de despertador de tercers no podia sonar com l'alarma d'Apple. Per això algunes biblioteques mantenien l'app desperta: la documentació del paquet Flutter [alarm2](https://pub.dev/packages/alarm2) descriu un reproductor d'àudio silenciós que funciona fins a l'alarma. Però un so mut no es fa sentir. **Des d'iOS 26, AlarmKit fa innecessària aquesta drecera.**

## Mantenir o treure el mode: la graella de decisió

| La teva situació              | Què fer                 |
| ----------------------------- | ----------------------- |
| Sons curts en primer pla      | Treure `audio`          |
| Música o audiollibre          | Mantenir-lo, mostrar-lo |
| Enregistrament llarg          | Mantenir + consentiment |
| Despertador o temporitzador   | AlarmKit (iOS 26)       |
| Ubicació de tant en tant      | Canvis significatius    |
| Sincronització sense urgència | `fetch` o `processing`  |
| Trucades d'àudio o vídeo      | `voip` amb CallKit      |

Per a la ubicació, la pàgina d'Apple cita el servei de canvis significatius com a alternativa al mode `location`.

## Els altres apartats de la 2.5: 2.5.1 i 2.5.2

### 2.5.1: API públiques i frameworks al seu lloc

"Apps may only use public APIs and must run on the currently shipping OS." L'app només fa servir API públiques, funciona amb la versió actual del sistema i abandona el que està obsolet. Com amb la 2.5.4, cada framework serveix per al seu ús previst, esmentat a la descripció: HealthKit per a la salut, HomeKit per a la casa connectada. Si una biblioteca crida una API privada, el rebuig te'l menges tu.

### 2.5.2: res de codi descarregat que canviï l'app

L'app ha de ser autònoma dins el seu paquet. No pot "download, install, or execute code which introduces or changes features or functionality of the app". Només les apps educatives que ensenyen a programar tenen una excepció limitada, amb un codi totalment visible i editable per l'usuari.

Amb Expo, la qüestió afecta EAS Update, la documentació del qual recorda que les actualitzacions han de respectar les normes de l'App Store. **Fes servir les actualitzacions remotes per corregir, mai per lliurar una funció que el reviewer no ha vist.** Una correcció relacionada amb la revisió passa per un build nou, com explico a la guia de la [guideline 2.1](https://devoria.fr/ca/blog/guideline-2-1-app-store-rebuig).

## Com respondre a un rebuig 2.5.4?

La conversa té lloc a la secció App Review de la teva app, on [respons al missatge d'App Review](https://developer.apple.com/help/app-store-connect/manage-submissions-to-app-review/reply-to-app-review-messages/). Dos casos:

- **El mode no serveix per a res**: treu-lo, fes un build nou, comprova la introspecció i respon en dues frases.
- **El mode serveix una funció real**: respon amb el camí exacte i un vídeo curt, i després reprèn aquest text a les notes de revisió de cada versió.

La plantilla que faria servir, per adaptar (treu la frase sobre l'alarma si la teva app no en té):

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

## La checklist 2.5.4 abans de l'enviament

- La introspecció d'Expo només mostra els modes que vols, i saps dir la funció de cadascun.
- Cap plugin no està declarat en forma curta si afegeix un mode per defecte, com expo-audio.
- La teva carpeta `ios/` local no conserva cap clau antiga, o compiles des d'un prebuild net.
- La funció s'activa ràpid, sense cap configuració amagada, i les notes de revisió diuen quin mode serveix per a què i com provar-lo.
- Qualsevol enregistrament demana un consentiment explícit i mostra un indicador visible. Les normes sobre les sol·licituds de permís són a la guia de la [guideline 5.1.1](https://devoria.fr/ca/blog/guideline-5-1-1-rebuig-app-store).
- Per a un despertador, el so passa per AlarmKit, no per un so reproduït des de l'app.

## Revisar el teu expedient abans d'enviar-lo

El [Review Kit](https://devoria.fr/ca/kits/app-review) reuneix la meva checklist abans de l'enviament, plantilles de notes per al revisor i skills de Claude Code que revisen el teu projecte. Si vols una mirada humana, [reserva una hora amb mi](https://devoria.fr/ca/coaching): llegim junts el missatge d'Apple i el teu Info.plist, per videotrucada. El procés complet és a la pàgina [app rebutjada per Apple](https://devoria.fr/ca/expertise/aplicacio-rebutjada-per-apple).

Prepares el teu primer llançament? [Fes el teu diagnòstic gratuït](https://devoria.fr/ca/diagnostic): posa els passos en ordre i t'envia la meva checklist antirebuig d'Apple.

Ningú no pot garantir que Apple acceptarà la teva app. Ara, un mode en segon pla ben justificat es defensa en trenta segons.

## Preguntes freqüents

### Què vol dir "Guideline 2.5.4 - Performance - Software Requirements"?

És el títol del rebuig quan Apple considera que un mode en segon pla del teu Info.plist no serveix per al seu ús previst. El missatge anomena el mode i proposa mostrar la funció que l'utilitza o treure la clau.

### Cal un build nou després d'un rebuig 2.5.4?

Si treus o modifiques un mode, sí: la clau és a l'Info.plist, i per tant al binari. Si el mode està justificat, pot n'hi haver prou amb una resposta amb el camí exacte i un vídeo.

### Puc mantenir el mode àudio per a uns quants sons d'interfície?

No. Els sons curts reproduïts en primer pla no el necessiten. Amb Expo, posa `enableBackgroundPlayback` a `false` al plugin expo-audio.

### Una app de despertador necessita el mode àudio?

Per sonar no, si es basa en AlarmKit, disponible des d'iOS 26: és el sistema qui reprodueix l'alarma. A Solys, el mode `audio` serveix per a l'escolta de la nit, que enregistra amb la pantalla bloquejada.

### Per què Apple cita la 2.5.4 si jo no he declarat res?

Potser un plugin ho ha fet per tu: expo-audio afegeix el mode `audio` per defecte, i una carpeta `ios/` antiga pot conservar una clau que ja has tret de la configuració. Comprova-ho amb `npx expo config --type introspect`.


## El teu projecte

[Review Kit](https://devoria.fr/ca/kits/app-review): La meva checklist de revisió de l'App Store, els rebutjos d'Apple que he corregit, la de Google Play i tres skills de Claude Code. 49 €.

[iOS & Android Kit](https://devoria.fr/ca/kits/ios): Crea la teva app d'iPhone i Android amb Claude Code: el codi de partida de les meves apps, el camí fins a les botigues i tots els kits. 99 €.

[Diagnòstic: què et separa de la teva app d'iPhone](https://devoria.fr/ca/diagnostic): 7 preguntes, 60 segons: sabràs què et bloqueja de debò per publicar la teva app d'iPhone, el teu recorregut en 4 etapes i el kit que et toca.
