Guideline 2.5.1: verejné API a aktuálne SDK s Expo
Autor: Mehdi Azizi
Zverejnené , 9 min
Guideline 2.5.1: len verejné API, appka kompatibilná s aktuálnym iOS a frameworky na zamýšľaný účel. S Expo si najprv skontroluj natívne moduly.
Guideline 2.5.1 kladie štyri požiadavky: používať len verejné API, bežať na aktuálnej verzii iOS, zbaviť sa toho, čo Apple označí za zastarané, a používať každý framework na jeho zamýšľaný účel. S Expo riziko len zriedka pochádza z tvojho JavaScript kódu: pochádza z natívnych modulov, ktoré inštaluješ, a zo SDK, s ktorým kompiluješ.
Solys, TradaZen a Nolera vydávam s Expo SDK 57. Solys stojí na Apple API Screen Time, frameworku s regulovaným použitím. Tento návod sa venuje pravidlu z revízie. Pre chybu, ktorú dostaneš pri nahrávaní buildu, si prečítaj návod k ITMS-90338. Pre režimy na pozadí, ktoré sú v tej istej časti hneď vedľa, si prečítaj návod ku guideline 2.5.4.
Čo hovorí guideline 2.5.1?
Pravidlo je v časti 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.“
Jednoducho povedané, štyri povinnosti:
- Len verejné API, teda tie, ktoré Apple dokumentuje.
- Appka, ktorá beží na aktuálnej verzii iOS, od septembra 2026 je to iOS 27.
- Nič zastarané, čo zmizne: nahradíš to, čomu Apple ohlási koniec životnosti.
- Každý framework na svojom mieste a uvedený v popise: HomeKit pre smart domácnosť, HealthKit pre zdravie a šport, prepojený s appkou Zdravie.
Odtiaľ názov zamietnutia: „Guideline 2.5.1 - Performance - Software Requirements“.
Verejné API: kde sa v Expo appke skrýva riziko
Privátne API je systémová funkcia, ktorú Apple nedokumentuje. Apple nezaručuje ani jej správanie, ani to, že bude v ďalšej verzii iOS, preto je zakázaná.
Tvoj JavaScript kód nikdy nesiaha na iOS priamo: ide cez natívne moduly. Tie zo SDK Expo udržiava tím Expo. Ostatné obsahujú kód, ktorý si nenapísal ty, a Apple ho skúma rovnako ako tvoj. Návod k ITMS-90683 ukazuje ten istý mechanizmus pri textoch žiadostí o povolenie: Apple posudzuje kód prítomný v builde, nie to, čo appka robí.
V Solys k 15. októbru 2026 obsahuje natívny iOS kód 42 priamych závislostí, z toho 14 mimo SDK Expo. Sú medzi nimi RevenueCat, Sentry, AppsFlyer a react-native-device-activity, most k API Screen Time.
Privátne API sa dá odhaliť v dvoch momentoch. Pri nahrávaní môže automatická analýza App Store Connect vrátiť chybu ITMS-90338. Počas revízie reviewer cituje 2.5.1.
Zastarané API: od UIWebView po UIScene
Najznámejší príklad je UIWebView, starý komponent na zobrazovanie webu. Apple ho prestal prijímať v nových appkách v apríli 2020 a potom v aktualizáciách v decembri 2020. Stará knižnica, ktorá naň ešte odkazovala, blokovala nahratie. V Solys vyhľadávanie z checklistu nižšie nenájde žiadny odkaz.
Ďalšia zmena je už ohlásená. Technická poznámka Apple TN3187 píše: „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.“ Jednoducho: appka skompilovaná so SDK iOS 27 bez životného cyklu založeného na scénach sa nespustí.
Tri dátumy, ktoré treba prepojiť:
- Od apríla 2026 Apple vyžaduje Xcode 26: o tom je návod k ITMS-90725.
- V apríli 2027 bude podľa stránky Apple o odosielaní povinné SDK iOS 27.
- Expo SDK 58, v bete od 15. septembra 2026, už generuje správu scén, podľa oznámenia Expo.
S Expo SDK 57 a Xcode 26 ešte kompiluješ so SDK iOS 26: dnes sa nič nerozbije. Moduly, ktoré upravujú AppDelegate, sa budú musieť prispôsobiť pred aprílom 2027.
Frameworky použité mimo zamýšľaného účelu
Reviewer overuje, že citlivý framework slúži viditeľnej funkcii a že ho tvoja stránka v obchode spomína.
- HealthKit slúži zdraviu a športu. Odporúčania Apple pre rozhranie to hovoria: „If your app doesn't provide health and fitness functionality, don't request access to people's private health data.“
- HomeKit slúži smart domácnosti a ničomu inému.
- PushKit slúži na hovory cez VoIP. Dokumentácia PushKit je jasná: „If you are unable to support CallKit in your app, you cannot use PushKit to handle push notifications.“ VoIP notifikácia, ktorá zobudí appku bez hovoru, je zneužitie.
- Family Controls, API Screen Time, vyžaduje špeciálne oprávnenie. Jeho dokumentácia upresňuje: „Before submitting your app to the App Store, you must request permission to use the entitlement.“
Pre Solys som o toto distribučné oprávnenie požiadal 23. septembra 2026 a Apple ho udelil v ten istý deň. Použitie sedí s frameworkom: používateľ si vyberie appky, ktoré chce pozastaviť, a Solys ich zablokuje na 30, 45 alebo 60 minút po zobudení. Popis v obchode to hovorí jednou vetou: „Solys používa oprávnenie Screen Time od Apple na pozastavenie vybraných appiek.“ Presne to žiada koniec 2.5.1: uviesť integráciu v popise.
Beta verzie: TestFlight áno, App Store nie
Poznámky k vydaniu App Store Connect ukazujú pravidlo v praxi. 14. októbra 2026 sú buildy z Xcode 27.2 beta 3 prijímané „for internal and external testing“, teda pre TestFlight. 5. októbra sú buildy z Xcode 27.1 RC prijímané „for the App Store“.
Build skompilovaný s betou Xcode ide do TestFlightu, nikdy nie na revíziu. Na odoslanie potrebuješ finálnu verziu alebo RC, ktorú Apple otvoril pre App Store.
Dve upresnenia pre Expo appku:
- Beta Expo nie je beta Apple. Apple kontroluje verziu Xcode a iOS SDK, nie verziu Expo. Oznámenie SDK 58 dodávalo, že EAS obrazy s Xcode 27 prídu čoskoro.
- Testovanie na aktuálnom iOS zostáva povinné, aj keď kompiluješ so SDK iOS 26. Spusti appku na studeno na aktualizovanom iPhone alebo simulátore.
Checklist: natívne závislosti pred odoslaním
Prejdi ho pred každým produkčným buildom. Príkazy sa spúšťajú v koreni 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ási žiadne zlyhanie. V Solys 15. októbra 2026: 20 z 21 kontrol úspešných. Zlyhanie spôsobilo 13 balíkov Expo zaostávajúcich o jednu opravu, ktorénpx expo install --checkzosúladí.- Každý modul mimo SDK Expo je v React Native Directory. Expo Doctor túto kontrolu robí predvolene, ako uvádza dokumentácia Expo. Neznámy balík si zaslúži prečítať jeho iOS kód.
- Každý natívny modul drží krok s tvojou verziou React Native. Tabuľka verzií Expo priraďuje SDK 57 k React Native 0.86. Modul bez vydania počas viacerých verzií je varovný signál.
- Vyhľadávanie UIWebView nič nevráti. To isté sprav pre každé API, ktorému Apple ohlási koniec životnosti.
- Každý citlivý framework má svoju viditeľnú funkciu: zdravie, Screen Time, hovory, domácnosť. Popis ju uvádza a špeciálne oprávnenie je udelené.
- Build pochádza z finálneho Xcode. Over si verziu v logoch EAS buildu.
- Appka sa spustí na studeno na aktuálnej verzii iOS, s novým účtom.
- Moduly, ktoré zasahujú do AppDelegate, ohlasujú podporu UIScene pred tvojím prechodom na SDK iOS 27.
Ako odpovedať na zamietnutie 2.5.1?
Správa zvyčajne menuje API alebo framework, o ktorý ide. Dva prípady:
- Framework neslúži ničomu viditeľnému: odstráň modul alebo capability, sprav nový build a odpovedz dvoma vetami.
- Framework slúži skutočnej funkcii: uveď presný postup, screenshot alebo krátke video a spomeň integráciu v popise v obchode.
Odstránenie natívneho modulu mení binárku: aktualizácia na diaľku nestačí. Návod ku guideline 2.1 vysvetľuje, prečo reviewer vidí len kód zabalený v builde. Konverzácia potom prebieha v App Store Connect, ako v návode, ako odpovedať App Review.
Skontroluj si projekt pred odoslaním
Review Kit obsahuje môj checklist pred odoslaním, moje opravené zamietnutia a Claude Code skills, ktoré prejdú tvoj Expo projekt. Ak chceš ľudský pohľad, rezervuj si so mnou hodinu: spolu si prečítame správu od Apple a tvoje závislosti. Celý postup nájdeš na stránke appka zamietnutá Apple.
Pripravuješ svoje prvé vydanie? Sprav si bezplatnú diagnostiku: pošle ti môj checklist proti zamietnutiu od Apple.
Často kladené otázky
Čo znamená „Guideline 2.5.1 - Performance - Software Requirements“?
Je to názov zamietnutia, keď Apple usúdi, že tvoja appka používa neverejné API, zastaranú technológiu alebo framework mimo jeho zamýšľaného účelu. Správa zvyčajne menuje prvok, o ktorý ide.
Aký je rozdiel medzi guideline 2.5.1 a chybou ITMS-90338?
ITMS-90338 je automatická chyba pri nahrávaní buildu, keď analýza nájde neverejný symbol. 2.5.1 je pravidlo revízie, ktoré uplatňuje človek, a pokrýva aj zneužité frameworky a zastarané technológie.
Dá sa odoslať appka skompilovaná s betou Xcode?
Nie. App Store Connect takéto buildy prijíma len pre TestFlight. Na revíziu kompiluj s finálnou verziou Xcode alebo s RC, ktorú Apple vo svojich poznámkach k vydaniu otvoril pre App Store.
Môže Expo appka použiť privátne API bez toho, aby o tom vedela?
Áno, cez natívny modul tretej strany. Tvoj JavaScript kód sám iOS nevolá, ale každý natívny balík obsahuje kód v Objective-C alebo Swifte. Pred každou verziou si prejdi zoznam modulov mimo SDK Expo.
Treba hneď prejsť na Expo SDK 58?
Kvôli 2.5.1 k 15. októbru 2026 nie: SDK 57 kompiluje so SDK iOS 26, ktoré sa stále prijíma. Naplánuj si prechod pred aprílom 2027, keď Apple bude vyžadovať SDK iOS 27 a životný cyklus založený na scénach.

