# Guideline 2.5.1: API públiques i SDK al dia amb Expo

> Guideline 2.5.1: només API públiques, app compatible amb l'iOS actual i cada framework per al seu ús previst. Amb Expo, revisa primer els mòduls natius.

Pàgina original: [Guideline 2.5.1: API públiques i SDK al dia amb Expo](https://devoria.fr/ca/blog/guideline-2-5-1-api-publiques-sdk-expo)
Autor: [Mehdi Azizi](https://devoria.fr/ca/mehdi-azizi)
Publicació: 2026-11-04
Darrera revisió del contingut: 2026-11-04


La guideline 2.5.1 imposa quatre requisits: fer servir només API públiques, funcionar amb la versió actual d'iOS, abandonar el que Apple declara obsolet i fer servir cada framework per a l'ús previst. **Amb Expo, el risc rarament ve del teu codi JavaScript: ve dels mòduls natius que instal·les i de l'SDK amb què compiles.**

Publico Solys, TradaZen i Nolera amb Expo SDK 57. Solys es basa en l'API Screen Time d'Apple, un framework d'ús restringit. Aquesta guia tracta la norma de revisió. Per a l'error que reps quan envies el build, llegeix la guia [ITMS-90338](https://devoria.fr/ca/blog/itms-90338-non-public-api-usage-expo). Per als modes en segon pla, que són a la mateixa secció, llegeix la de la [guideline 2.5.4](https://devoria.fr/ca/blog/guideline-2-5-4-mode-segon-pla-apple).

## Què diu la guideline 2.5.1?

La norma és a la secció 2.5, "Software Requirements", de les [App Review Guidelines](https://developer.apple.com/app-store/review/guidelines/#2.5.1): "Apps may only use public APIs and must run on the currently shipping OS. Keep your apps up-to-date and make sure you phase out any deprecated features, frameworks or technologies that will no longer be supported in future versions of an OS. Apps should use APIs and frameworks for their intended purposes and indicate that integration in their app description."

En resum, quatre obligacions:

1. **Només API públiques**, és a dir, documentades per Apple.
2. **Una app que funcioni amb la versió actual d'iOS**, iOS 27 des del setembre de 2026.
3. **Res d'obsolet que hagi de desaparèixer**: substitueix el que Apple anuncia que arriba al final de la seva vida útil.
4. **Cada framework al seu lloc, i esmentat a la descripció**: HomeKit per a la casa connectada, HealthKit per a la salut i l'esport, vinculat a l'app Salut.

D'aquí el títol del rebuig: "Guideline 2.5.1 - Performance - Software Requirements".

## API públiques: on s'amaga el risc en una app Expo

Una API privada és una funció del sistema que Apple no documenta. Apple no en garanteix ni el comportament ni la presència a la versió següent d'iOS, i per això està prohibida.

El teu codi JavaScript mai no toca iOS directament: passa per mòduls natius. Els de l'SDK d'Expo els manté l'equip d'Expo. **Els altres porten codi que no has escrit tu, i Apple l'examina com si fos teu.** La guia [ITMS-90683](https://devoria.fr/ca/blog/itms-90683-missing-purpose-string-expo) mostra el mateix mecanisme amb els textos de permís: Apple jutja el codi present al build, no el que fa l'app.

A Solys, a 15 d'octubre de 2026, 42 dependències directes contenen codi iOS natiu, 14 de les quals fora de l'SDK d'Expo. Hi ha RevenueCat, Sentry, AppsFlyer i `react-native-device-activity`, el pont cap a l'API Screen Time.

Una API privada es pot detectar en dos moments. En l'enviament, l'anàlisi automàtica d'App Store Connect pot retornar l'error ITMS-90338. Durant la revisió, el revisor cita la 2.5.1.

## API obsoletes: d'UIWebView a UIScene

L'exemple més conegut és UIWebView, l'antic component per mostrar contingut web. Apple va [deixar d'acceptar-lo](https://developer.apple.com/news/?id=12232019b) a les apps noves l'abril de 2020, i a les actualitzacions el desembre de 2020. Una biblioteca antiga que encara hi feia referència bloquejava l'enviament. A Solys, la cerca de la checklist de més avall no en troba cap referència.

El canvi següent ja està anunciat. La nota tècnica [TN3187](https://developer.apple.com/documentation/technotes/tn3187-migrating-to-the-uikit-scene-based-life-cycle) d'Apple ho diu: "In the next major release following iOS 26, UIScene lifecycle will be required when building with the latest SDK; otherwise, your app won't launch." En resum, una app compilada amb l'SDK d'iOS 27 sense el cicle de vida per escenes no arrenca.

Tres dates per relacionar:

- **Des de l'abril de 2026**, Apple exigeix Xcode 26: és el tema de la guia [ITMS-90725](https://devoria.fr/ca/blog/itms-90725-sdk-version-issue-expo).
- **L'abril de 2027**, la [pàgina d'enviament d'Apple](https://developer.apple.com/app-store/submitting/) anuncia que l'SDK d'iOS 27 serà obligatori.
- **L'SDK 58 d'Expo**, en beta des del 15 de setembre de 2026, ja genera la gestió d'escenes, segons l'[anunci d'Expo](https://expo.dev/changelog/sdk-58-beta).

Amb l'SDK 57 d'Expo i Xcode 26, encara compiles amb l'SDK d'iOS 26: avui no es trenca res. **Els mòduls que modifiquen l'AppDelegate s'hauran d'adaptar abans de l'abril de 2027.**

## Frameworks fets servir fora del seu ús previst

El revisor comprova que un framework sensible serveixi una funció visible i que la teva fitxa ho esmenti.

- **HealthKit** serveix per a la salut i l'esport. Les [recomanacions d'interfície d'Apple](https://developer.apple.com/design/human-interface-guidelines/healthkit) ho diuen: "If your app doesn't provide health and fitness functionality, don't request access to people's private health data."
- **HomeKit** serveix per a la casa connectada, i res més.
- **PushKit** serveix per a les trucades de veu per IP. La [documentació de PushKit](https://developer.apple.com/documentation/pushkit/responding-to-voip-notifications-from-pushkit) és clara: "If you are unable to support CallKit in your app, you cannot use PushKit to handle push notifications." Una notificació VoIP que desperta l'app sense trucada és un ús indegut.
- **Family Controls**, l'API Screen Time, exigeix una autorització especial. La seva [documentació](https://developer.apple.com/documentation/familycontrols) ho precisa: "Before submitting your app to the App Store, you must request permission to use the entitlement."

Per a Solys, vaig demanar aquesta autorització de distribució el 23 de setembre de 2026, i Apple me la va concedir el mateix dia. L'ús encaixa amb el framework: l'usuari tria les apps que vol posar en pausa, i Solys les bloqueja durant 30, 45 o 60 minuts després de despertar-se. La descripció de la fitxa ho diu en una frase: "Solys fa servir l'autorització Screen Time d'Apple per posar en pausa les apps seleccionades." **Això és el que demana el final de la 2.5.1: esmentar la integració a la descripció.**

## Versions beta: TestFlight sí, App Store no

Les [notes de versió d'App Store Connect](https://developer.apple.com/help/app-store-connect/release-notes/) mostren la norma a la pràctica. El 14 d'octubre de 2026, els builds fets amb Xcode 27.2 beta 3 s'accepten "for internal and external testing", és a dir, per a TestFlight. El 5 d'octubre, els d'Xcode 27.1 RC s'accepten "for the App Store".

**Un build compilat amb una beta d'Xcode va a TestFlight, mai a revisió.** Per enviar-lo, necessites una versió final, o una RC que Apple hagi obert a l'App Store.

Dos aclariments per a una app Expo:

- **Una beta d'Expo no és una beta d'Apple.** Apple controla la versió d'Xcode i de l'SDK d'iOS, no la d'Expo. L'anunci de l'SDK 58 afegia que les imatges d'EAS amb Xcode 27 arribarien aviat.
- **Provar-la amb l'iOS actual continua sent obligatori**, encara que compilis amb l'SDK d'iOS 26. Obre l'app en fred en un iPhone o un simulador actualitzat.

## Checklist: dependències natives abans d'enviar

Passa-la abans de cada build de producció. Les ordres s'executen a l'arrel del projecte Expo:

```bash
npx expo-doctor
npx expo install --check
grep -rlw "UIWebView" node_modules --include='*.m' --include='*.mm' --include='*.swift' --include='*.h'
```

1. **`npx expo-doctor` no indica cap error.** A Solys, el 15 d'octubre de 2026: 20 comprovacions superades de 21. L'error venia de 13 paquets d'Expo endarrerits en un pegat, que `npx expo install --check` alinea.
2. **Cada mòdul fora de l'SDK d'Expo apareix a React Native Directory.** Expo Doctor fa aquesta comprovació per defecte, com indica la [documentació d'Expo](https://docs.expo.dev/versions/latest/config/package-json/). Un paquet desconegut mereix que en llegeixis el codi iOS.
3. **Cada mòdul natiu segueix la teva versió de React Native.** La [taula de versions d'Expo](https://docs.expo.dev/versions/latest/) associa l'SDK 57 a React Native 0.86. Un mòdul sense publicacions des de fa diverses versions és un senyal d'alerta.
4. **La cerca d'UIWebView no retorna res.** Fes el mateix amb qualsevol API que Apple anunciï que arriba al final de la seva vida útil.
5. **Cada framework sensible té la seva funció visible**: salut, Screen Time, trucades, casa. La descripció l'esmenta, i l'autorització especial està concedida.
6. **El build surt d'un Xcode final.** Comprova la versió als registres del build d'EAS.
7. **L'app arrenca en fred amb la versió actual d'iOS**, amb un compte nou.
8. **Els mòduls que toquen l'AppDelegate anuncien compatibilitat amb UIScene** abans que passis a l'SDK d'iOS 27.

## Com respondre a un rebuig 2.5.1?

El missatge sol indicar l'API o el framework en qüestió. Dos casos:

- **El framework no serveix per a res visible**: treu el mòdul o la capability, torna a fer un build i respon en dues frases.
- **El framework serveix una funció real**: dona el camí exacte, una captura o un vídeo curt, i esmenta la integració a la descripció de la fitxa.

**Treure un mòdul natiu modifica el binari: una actualització remota no n'hi ha prou.** La guia de la [guideline 2.1](https://devoria.fr/ca/blog/guideline-2-1-app-store-rebuig) explica per què el revisor només veu el codi inclòs al build. Després, la conversa té lloc a App Store Connect, com explica la guia per [respondre a App Review](https://devoria.fr/ca/blog/resolution-center-apple-respondre-rebuig-app-review).

## Revisa el teu projecte abans d'enviar-lo

El [Review Kit](https://devoria.fr/ca/kits/app-review) reuneix la meva checklist d'abans d'enviar, els meus rebutjos corregits i skills de Claude Code que revisen el teu projecte Expo. Si vols una mirada humana, [reserva una hora amb mi](https://devoria.fr/ca/coaching): llegim junts el missatge d'Apple i les teves dependències. Tot el procés é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): t'envia la meva checklist antirebuig d'Apple.

## Preguntes freqüents

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

És el títol del rebuig quan Apple considera que la teva app fa servir una API no pública, una tecnologia obsoleta o un framework fora del seu ús previst. El missatge sol indicar l'element en qüestió.

### Quina diferència hi ha entre la guideline 2.5.1 i l'error ITMS-90338?

ITMS-90338 és un error automàtic que reps en enviar el build, quan l'anàlisi detecta un símbol no públic. La 2.5.1 és la norma de revisió que aplica una persona, i també cobreix els frameworks mal utilitzats i les tecnologies obsoletes.

### Es pot enviar una app compilada amb una beta d'Xcode?

No. App Store Connect només accepta aquests builds per a TestFlight. Per a la revisió, compila amb una versió final d'Xcode, o amb una RC que Apple hagi obert a l'App Store a les seves notes de versió.

### Una app Expo pot fer servir una API privada sense saber-ho?

Sí, a través d'un mòdul natiu de tercers. El teu codi JavaScript no crida iOS directament, però cada paquet natiu inclou codi Objective-C o Swift. Repassa la llista de mòduls fora de l'SDK d'Expo abans de cada versió.

### Cal passar a l'SDK 58 d'Expo ara mateix?

No per la 2.5.1 a 15 d'octubre de 2026: l'SDK 57 compila amb l'SDK d'iOS 26, que encara s'accepta. Preveu l'actualització abans de l'abril de 2027, quan Apple exigirà l'SDK d'iOS 27 i el cicle de vida per escenes.


## 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.
