Guideline 2.5.1: javni API-ji i ažurni SDK u Expo aplikaciji
Autor: Mehdi Azizi
Objavljeno , 9 min
Guideline 2.5.1 traži samo javne API-je, podršku za aktualni iOS i frameworke za predviđenu namjenu. S Expoom prvo provjeri nativne module.
Guideline 2.5.1 postavlja četiri zahtjeva: koristi samo javne API-je, aplikacija mora raditi na aktualnoj verziji iOS-a, izbaci ono što Apple proglasi zastarjelim i svaki framework koristi za njegovu predviđenu namjenu. S Expoom rizik rijetko dolazi iz tvog JavaScript koda: dolazi iz nativnih modula koje instaliraš i iz SDK-a s kojim kompajliraš.
Solys, TradaZen i Nolera objavljujem s Expo SDK 57. Solys se oslanja na Appleov Screen Time API, framework čija je upotreba strogo regulirana. Ovaj vodič bavi se pravilom pregleda. Za grešku koju dobiješ pri slanju builda pročitaj vodič za ITMS-90338. Za pozadinske načine rada, koji su u istom dijelu pravila, pročitaj vodič za guideline 2.5.4.
Što kaže guideline 2.5.1?
Pravilo se nalazi u dijelu 2.5, „Software Requirements“, u 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.“
Jednostavno rečeno, četiri obveze:
- Samo javni API-ji, dakle oni koje Apple dokumentira.
- Aplikacija koja radi na aktualnoj verziji iOS-a, a to je iOS 27 od rujna 2026.
- Ništa zastarjelo što će nestati: zamijeniš ono za što Apple najavi kraj podrške.
- Svaki framework na svom mjestu, i spomenut u opisu: HomeKit za pametni dom, HealthKit za zdravlje i sport, povezan s aplikacijom Health.
Otuda i naslov odbijanja: „Guideline 2.5.1 - Performance - Software Requirements“.
Javni API-ji: gdje se krije rizik u Expo aplikaciji
Privatni API je sistemska funkcija koju Apple ne dokumentira. Apple ne jamči ni kako se ponaša ni da će postojati u sljedećoj verziji iOS-a, zato je zabranjen.
Tvoj JavaScript kod nikad ne dira iOS izravno: ide preko nativnih modula. Module iz Expo SDK-a održava Expo tim. Ostali sadrže kod koji nisi ti napisao, a Apple ga pregledava kao da je tvoj. Vodič za ITMS-90683 pokazuje isti mehanizam s tekstovima za dozvole: Apple ocjenjuje kod koji je u buildu, a ne ono što aplikacija radi.
U Solysu, na dan 15. listopada 2026., 42 izravne ovisnosti sadrže nativni iOS kod, od čega 14 izvan Expo SDK-a. Među njima su RevenueCat, Sentry, AppsFlyer i react-native-device-activity, most prema Screen Time API-ju.
Privatni API može se otkriti u dva trenutka. Pri slanju automatska analiza App Store Connecta može vratiti grešku ITMS-90338. Tijekom pregleda reviewer navodi 2.5.1.
Zastarjeli API-ji: od UIWebView do UIScene
Najpoznatiji primjer je UIWebView, stara komponenta za prikaz weba. Apple ga je prestao prihvaćati u novim aplikacijama u travnju 2020., a zatim i u ažuriranjima u prosincu 2020. Stara biblioteka koja ga je još referencirala blokirala je slanje. U Solysu pretraga iz check-liste niže ne pronalazi nijednu referencu.
Sljedeća promjena je već najavljena. Appleova tehnička bilješka TN3187 kaž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.“ Jednostavno rečeno, aplikacija kompajlirana s iOS 27 SDK-om bez životnog ciklusa temeljenog na scenama neće se pokrenuti.
Tri datuma koja treba povezati:
- Od travnja 2026. Apple traži Xcode 26: o tome govori vodič za ITMS-90725.
- U travnju 2027., prema Appleovoj stranici za slanje, iOS 27 SDK postaje obavezan.
- Expo SDK 58, u beti od 15. rujna 2026., već generira upravljanje scenama, prema Expovoj objavi.
S Expo SDK 57 i Xcodeom 26 i dalje kompajliraš s iOS 26 SDK-om: danas se ništa ne kvari. Moduli koji mijenjaju AppDelegate morat će se prilagoditi prije travnja 2027.
Frameworki korišteni izvan predviđene namjene
Reviewer provjerava služi li osjetljivi framework nekoj vidljivoj funkciji i spominje li ga tvoja stranica u App Storeu.
- HealthKit služi za zdravlje i sport. Appleove smjernice za sučelje kažu: „If your app doesn't provide health and fitness functionality, don't request access to people's private health data.“
- HomeKit služi za pametni dom i ni za što drugo.
- PushKit služi za VoIP pozive. Dokumentacija PushKita je jasna: „If you are unable to support CallKit in your app, you cannot use PushKit to handle push notifications.“ VoIP notifikacija koja budi aplikaciju bez poziva je zlouporaba.
- Family Controls, Screen Time API, traži posebno odobrenje. Njegova dokumentacija navodi: „Before submitting your app to the App Store, you must request permission to use the entitlement.“
Za Solys sam to odobrenje za distribuciju zatražio 23. rujna 2026., a Apple ga je odobrio isti dan. Upotreba odgovara frameworku: korisnik bira aplikacije koje želi pauzirati, a Solys ih blokira 30, 45 ili 60 minuta nakon buđenja. Opis na stranici to kaže u jednoj rečenici: „Solys koristi Appleovo Screen Time odobrenje za pauziranje odabranih aplikacija.“ Upravo to traži kraj pravila 2.5.1: spomeni integraciju u opisu.
Beta verzije: TestFlight da, App Store ne
Bilješke o izdanjima App Store Connecta pokazuju pravilo u praksi. 14. listopada 2026. buildovi napravljeni s Xcode 27.2 beta 3 prihvaćaju se „for internal and external testing“, dakle za TestFlight. 5. listopada buildovi iz Xcode 27.1 RC prihvaćaju se „for the App Store“.
Build kompajliran s beta verzijom Xcodea ide u TestFlight, nikad na pregled. Za slanje ti treba finalna verzija ili RC koji je Apple otvorio za App Store.
Dvije napomene za Expo aplikaciju:
- Expo beta nije Apple beta. Apple provjerava verziju Xcodea i iOS SDK-a, ne verziju Expoa. Objava SDK-a 58 dodaje da EAS slike s Xcodeom 27 stižu uskoro.
- Testiranje na aktualnom iOS-u i dalje je obavezno, čak i ako kompajliraš s iOS 26 SDK-om. Pokreni aplikaciju od nule na ažuriranom iPhoneu ili simulatoru.
Check-lista: nativne ovisnosti prije slanja
Prođi je prije svakog produkcijskog builda. Naredbe se pokreću u korijenu Expo projekta:
npx expo-doctor
npx expo install --check
grep -rlw "UIWebView" node_modules --include='*.m' --include='*.mm' --include='*.swift' --include='*.h'
npx expo-doctorne prijavljuje nijedan neuspjeh. U Solysu, 15. listopada 2026.: 20 od 21 provjere uspješno. Neuspjeh je dolazio od 13 Expo paketa koji su kasnili jednu zakrpu, anpx expo install --checkih usklađuje.- Svaki modul izvan Expo SDK-a nalazi se u React Native Directoryju. Expo Doctor to provjerava po defaultu, kako navodi Expova dokumentacija. Nepoznati paket zaslužuje da pročitaš njegov iOS kod.
- Svaki nativni modul prati tvoju verziju React Nativea. Expova tablica verzija povezuje SDK 57 s React Native 0.86. Modul bez novog izdanja kroz nekoliko verzija je znak upozorenja.
- Pretraga za UIWebView ne vraća ništa. Učini isto za svaki API za koji Apple najavi kraj podrške.
- Svaki osjetljivi framework ima svoju vidljivu funkciju: zdravlje, Screen Time, pozivi, dom. Opis je spominje, a posebno odobrenje je dobiveno.
- Build dolazi iz finalnog Xcodea. Provjeri verziju u EAS build logovima.
- Aplikacija se pokreće od nule na aktualnoj verziji iOS-a, s novim računom.
- Moduli koji diraju AppDelegate najavljuju podršku za UIScene prije nego što prijeđeš na iOS 27 SDK.
Kako odgovoriti na odbijanje po 2.5.1?
Poruka obično navodi API ili framework o kojem je riječ. Dva slučaja:
- Framework ne služi ničemu vidljivom: ukloni modul ili capability, napravi novi build, pa odgovori u dvije rečenice.
- Framework služi pravoj funkciji: daj točan put do nje, snimku zaslona ili kratki video, i spomeni integraciju u opisu stranice.
Uklanjanje nativnog modula mijenja binarnu datoteku: ažuriranje na daljinu nije dovoljno. Vodič za guideline 2.1 objašnjava zašto reviewer vidi samo ugrađeni kod. Razgovor se zatim vodi u App Store Connectu, kao u vodiču o tome kako odgovoriti App Reviewu.
Provjeri svoj projekt prije slanja
Review Kit sadrži moju checklistu prije slanja, moja ispravljena odbijanja i Claude Code skillove koji pregledavaju tvoj Expo projekt. Ako želiš ljudsko oko, rezerviraj sat vremena sa mnom: zajedno čitamo Appleovu poruku i tvoje ovisnosti. Cijeli postupak je na stranici aplikacija koju je Apple odbio.
Pripremaš svoje prvo izdanje? Napravi besplatnu dijagnostiku: dobit ćeš moju checklistu protiv Appleovih odbijanja.
Česta pitanja
Što znači „Guideline 2.5.1 - Performance - Software Requirements“?
To je naslov odbijanja kad Apple procijeni da tvoja aplikacija koristi nejavni API, zastarjelu tehnologiju ili framework izvan njegove predviđene namjene. Poruka obično navodi o čemu je riječ.
Koja je razlika između guidelinea 2.5.1 i greške ITMS-90338?
ITMS-90338 je automatska greška koju dobiješ pri slanju builda, kad analiza otkrije nejavni simbol. 2.5.1 je pravilo pregleda koje primjenjuje čovjek i koje pokriva i zloupotrijebljene frameworke i zastarjele tehnologije.
Može li se poslati aplikacija kompajlirana s beta verzijom Xcodea?
Ne. App Store Connect takve buildove prihvaća samo za TestFlight. Za pregled kompajliraj s finalnom verzijom Xcodea ili s RC-om koji je Apple u bilješkama o izdanjima otvorio za App Store.
Može li Expo aplikacija koristiti privatni API, a da to ne znaš?
Da, preko nativnog modula treće strane. Tvoj JavaScript kod sam ne poziva iOS, ali svaki nativni paket sadrži Objective-C ili Swift kod. Pregledaj popis modula izvan Expo SDK-a prije svake verzije.
Treba li odmah prijeći na Expo SDK 58?
Ne zbog 2.5.1, na dan 15. listopada 2026.: SDK 57 kompajlira s iOS 26 SDK-om, koji se još prihvaća. Planiraj prelazak prije travnja 2027., kad će Apple tražiti iOS 27 SDK i životni ciklus temeljen na scenama.

