Guideline 2.5.1: veřejná API a aktuální SDK v Expo
Autor: Mehdi Azizi
Publikováno , 9 min
Guideline 2.5.1: jen veřejná API, kompatibilita s aktuálním iOS a frameworky k určenému účelu. V Expo nejdřív zkontroluj nativní moduly.
Guideline 2.5.1 stanovuje čtyři požadavky: používat jen veřejná API, běžet na aktuální verzi iOS, zbavit se toho, co Apple označí za zastaralé, a používat každý framework k jeho určenému účelu. S Expo riziko jen zřídka pochází z tvého JavaScriptového kódu: pochází z nativních modulů, které instaluješ, a z SDK, se kterým kompiluješ.
Solys, TradaZen a Nolera vydávám s Expo SDK 57. Solys stojí na Apple API Screen Time, frameworku s regulovaným použitím. Tenhle návod se zabývá pravidlem revize. Pro chybu, kterou dostaneš při odeslání buildu, si přečti návod k ITMS-90338. Pro režimy na pozadí, které jsou ve stejné části hned vedle, si přečti návod ke guideline 2.5.4.
Co říká guideline 2.5.1?
Pravidlo najdeš v části 2.5, „Software Requirements“, v App Review Guidelines: „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.“
Jednoduše řečeno, čtyři povinnosti:
- Jen veřejná API, tedy ta, která Apple dokumentuje.
- Aplikace, která běží na aktuální verzi iOS, od září 2026 je to iOS 27.
- Nic zastaralého, co brzy zmizí: nahradíš všechno, u čeho Apple ohlásí konec podpory.
- Každý framework na svém místě a zmíněný v popisu: HomeKit pro chytrou domácnost, HealthKit pro zdraví a sport, propojený s aplikací Zdraví.
Odtud název zamítnutí: „Guideline 2.5.1 - Performance - Software Requirements“.
Veřejná API: kde se v Expo aplikaci skrývá riziko
Privátní API je systémová funkce, kterou Apple nedokumentuje. Apple neručí za její chování ani za to, že bude v další verzi iOS, proto je zakázaná.
Tvůj JavaScriptový kód se iOS nikdy nedotýká přímo: jde přes nativní moduly. Ty ze SDK Expo udržuje tým Expo. Ostatní obsahují kód, který jsi nenapsal, a Apple ho posuzuje stejně jako tvůj. Návod k ITMS-90683 ukazuje stejný mechanismus u textů žádostí o oprávnění: Apple posuzuje kód přítomný v buildu, ne to, co aplikace dělá.
V Solys obsahuje k 15. říjnu 2026 nativní iOS kód 42 přímých závislostí, z toho 14 mimo SDK Expo. Najdeš mezi nimi RevenueCat, Sentry, AppsFlyer a react-native-device-activity, most k API Screen Time.
Privátní API se dá odhalit ve dvou chvílích. Při odeslání může automatická analýza App Store Connect vrátit chybu ITMS-90338. Během revize reviewer cituje 2.5.1.
Zastaralá API: od UIWebView k UIScene
Nejznámější příklad je UIWebView, starší komponenta pro zobrazení webu. Apple ji přestal přijímat v nových aplikacích v dubnu 2020 a v aktualizacích v prosinci 2020. Stará knihovna, která na ni ještě odkazovala, zablokovala odeslání. V Solys hledání z checklistu níže nenajde žádný odkaz.
Další změna je už ohlášená. Píše to technická poznámka Apple TN3187: „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.“ Jinými slovy, aplikace zkompilovaná s SDK iOS 27 bez životního cyklu založeného na scénách se nespustí.
Tři data, která spolu souvisí:
- Od dubna 2026 Apple vyžaduje Xcode 26: tomu se věnuje návod k ITMS-90725.
- V dubnu 2027 bude podle stránky Apple o odesílání povinné SDK iOS 27.
- SDK Expo 58, v betě od 15. září 2026, už podle oznámení Expo generuje správu scén.
S SDK Expo 57 a Xcode 26 pořád kompiluješ s SDK iOS 26: dnes se nic nerozbije. Moduly, které upravují AppDelegate, se budou muset přizpůsobit do dubna 2027.
Frameworky použité mimo svůj určený účel
Reviewer kontroluje, jestli citlivý framework slouží viditelné funkci a jestli ji tvůj záznam v App Store zmiňuje.
- HealthKit slouží zdraví a sportu. Doporučení Apple pro rozhraní to říkají: „If your app doesn't provide health and fitness functionality, don't request access to people's private health data.“
- HealthKit ne, HomeKit slouží chytré domácnosti a ničemu jinému.
- PushKit slouží hovorům přes VoIP. Dokumentace PushKit je jasná: „If you are unable to support CallKit in your app, you cannot use PushKit to handle push notifications.“ VoIP notifikace, která probudí aplikaci bez hovoru, je zneužití.
- Family Controls, API Screen Time, vyžaduje zvláštní oprávnění. Jeho dokumentace upřesňuje: „Before submitting your app to the App Store, you must request permission to use the entitlement.“
Pro Solys jsem o toto distribuční oprávnění požádal 23. září 2026 a Apple ho udělil ještě týž den. Použití odpovídá frameworku: uživatel si vybere aplikace k pozastavení a Solys je po probuzení zablokuje na 30, 45 nebo 60 minut. Popis v záznamu to říká jednou větou: „Solys používá oprávnění Screen Time od Apple k pozastavení vybraných aplikací.“ Přesně to žádá konec 2.5.1: zmínit integraci v popisu.
Beta verze: TestFlight ano, App Store ne
Poznámky k vydání App Store Connect ukazují pravidlo v praxi. 14. října 2026 jsou buildy z Xcode 27.2 beta 3 přijímány „for internal and external testing“, tedy pro TestFlight. 5. října jsou buildy z Xcode 27.1 RC přijímány „for the App Store“.
Build zkompilovaný v betě Xcode jde do TestFlightu, nikdy do revize. K odeslání potřebuješ finální verzi, nebo RC, kterou Apple pro App Store otevřel.
Dvě upřesnění pro Expo aplikaci:
- Beta Expo není beta od Apple. Apple kontroluje verzi Xcode a SDK iOS, ne verzi Expo. Oznámení SDK 58 dodávalo, že EAS image s Xcode 27 brzy dorazí.
- Testovat na aktuálním iOS je pořád povinné, i když kompiluješ s SDK iOS 26. Spusť aplikaci načisto na aktualizovaném iPhonu nebo simulátoru.
Checklist: nativní závislosti před odesláním
Projdi ho před každým produkčním buildem. Příkazy spouštěj v kořeni Expo projektu:
npx expo-doctor
npx expo install --check
grep -rlw "UIWebView" node_modules --include='*.m' --include='*.mm' --include='*.swift' --include='*.h'
npx expo-doctornehlásí žádné selhání. V Solys 15. října 2026: 20 z 21 kontrol prošlo. Selhání způsobilo 13 balíčků Expo, kterým chyběla jedna opravná verze, anpx expo install --checkje srovná.- Každý modul mimo SDK Expo je v React Native Directory. Expo Doctor tuhle kontrolu dělá ve výchozím nastavení, jak uvádí dokumentace Expo. Neznámý balíček si zaslouží přečíst jeho iOS kód.
- Každý nativní modul drží krok s tvou verzí React Native. Tabulka verzí Expo přiřazuje SDK 57 k React Native 0.86. Modul bez vydání po několik verzí je varovný signál.
- Hledání UIWebView nic nevrátí. Stejně postupuj u každého API, u kterého Apple ohlásí konec podpory.
- Každý citlivý framework má svou viditelnou funkci: zdraví, Screen Time, hovory, domácnost. Popis ji zmiňuje a zvláštní oprávnění je udělené.
- Build pochází z finálního Xcode. Verzi ověř v logách buildu EAS.
- Aplikace se načisto spustí na aktuální verzi iOS, s novým účtem.
- Moduly, které sahají na AppDelegate, deklarují podporu UIScene dřív, než přejdeš na SDK iOS 27.
Jak odpovědět na zamítnutí podle 2.5.1?
Zpráva obvykle jmenuje dotčené API nebo framework. Dva případy:
- Framework neslouží ničemu viditelnému: odstraň modul nebo capability, udělej nový build a odpověz dvěma větami.
- Framework slouží skutečné funkci: uveď přesnou cestu, screenshot nebo krátké video a zmiň integraci v popisu záznamu.
Odstranění nativního modulu mění binárku: vzdálená aktualizace nestačí. Návod ke guideline 2.1 vysvětluje, proč reviewer vidí jen zabudovaný kód. Konverzace pak probíhá v App Store Connect, jako v návodu, jak odpovědět App Review.
Zkontroluj svůj projekt před odesláním
Review Kit obsahuje můj checklist před odesláním, moje opravená zamítnutí a skills pro Claude Code, které projdou tvůj Expo projekt. Pokud chceš lidský pohled, zarezervuj si se mnou hodinu: společně projdeme zprávu od Apple i tvoje závislosti. Celý postup najdeš na stránce aplikace zamítnutá Applem.
Chystáš své první vydání? Udělej si bezplatnou diagnostiku: pošle ti můj checklist proti zamítnutí od Apple.
Časté dotazy
Co znamená „Guideline 2.5.1 - Performance - Software Requirements“?
To je název zamítnutí, když Apple usoudí, že tvoje aplikace používá neveřejné API, zastaralou technologii nebo framework mimo jeho určený účel. Zpráva obvykle jmenuje dotčený prvek.
Jaký je rozdíl mezi guideline 2.5.1 a chybou ITMS-90338?
ITMS-90338 je automatická chyba, kterou dostaneš při odeslání buildu, když analýza odhalí neveřejný symbol. 2.5.1 je pravidlo revize, které uplatňuje člověk, a pokrývá i zneužité frameworky a zastaralé technologie.
Můžu odeslat aplikaci zkompilovanou v betě Xcode?
Ne. App Store Connect takové buildy přijímá jen pro TestFlight. Pro revizi kompiluj s finální verzí Xcode, nebo s RC, kterou Apple ve svých poznámkách k vydání otevřel pro App Store.
Může Expo aplikace použít privátní API, aniž bys o tom věděl?
Ano, přes nativní modul třetí strany. Tvůj JavaScriptový kód sám iOS nevolá, ale každý nativní balíček obsahuje kód v Objective-C nebo Swiftu. Před každou verzí si projdi seznam modulů mimo SDK Expo.
Musím hned přejít na SDK Expo 58?
Kvůli 2.5.1 k 15. říjnu 2026 ne: SDK 57 kompiluje s SDK iOS 26, které se pořád přijímá. Naplánuj přechod před dubnem 2027, kdy Apple bude vyžadovat SDK iOS 27 a životní cyklus založený na scénách.

