# Guideline 2.5.1: julkiset API:t ja ajantasainen SDK Expolla

> Guideline 2.5.1 sallii vain julkiset API:t, vaatii tuen nykyiselle iOS:lle ja käyttötarkoituksen mukaiset frameworkit. Expolla tarkista ensin natiivimoduulit.

Alkuperäinen sivu: [Guideline 2.5.1: julkiset API:t ja ajantasainen SDK Expolla](https://devoria.fr/fi/blog/guideline-2-5-1-julkiset-api-sdk-expo)
Kirjoittaja: [Mehdi Azizi](https://devoria.fr/fi/mehdi-azizi)
Julkaistu: 2026-11-04
Sisältö tarkistettu viimeksi: 2026-11-04


Guideline 2.5.1 asettaa neljä vaatimusta: käytä vain julkisia API:ita, toimi nykyisellä iOS-versiolla, luovu siitä, minkä Apple merkitsee vanhentuneeksi, ja käytä jokaista frameworkia sen aiottuun tarkoitukseen. **Expolla riski tulee harvoin JavaScript-koodistasi: se tulee asentamistasi natiivimoduuleista ja SDK:sta, jolla käännät.**

Julkaisen Solysin, TradaZenin ja Noleran Expo SDK 57:llä. Solys nojaa Applen Screen Time -API:in, jonka käyttöä valvotaan tarkasti. Tämä opas käsittelee arviointisääntöä. Buildin lähetyksessä saatavasta virheestä kerrotaan [ITMS-90338](https://devoria.fr/fi/blog/itms-90338-non-public-api-usage-expo)-oppaassa. Taustatiloista, jotka ovat samassa osiossa, kerrotaan [guideline 2.5.4](https://devoria.fr/fi/blog/guideline-2-5-4-apple-hylkasi-taustatilan) -oppaassa.

## Mitä guideline 2.5.1 sanoo?

Sääntö löytyy [App Review Guidelinesin](https://developer.apple.com/app-store/review/guidelines/#2.5.1) osiosta 2.5, "Software Requirements": "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."

Selkokielellä neljä velvoitetta:

1. **Vain julkisia API:ita**, eli sellaisia, jotka Apple on dokumentoinut.
2. **Sovellus toimii nykyisellä iOS-versiolla**, syyskuusta 2026 lähtien iOS 27:llä.
3. **Ei mitään vanhentunutta, joka on katoamassa**: korvaat sen, minkä elinkaaren Apple ilmoittaa päättyvän.
4. **Jokainen framework omaan käyttöönsä, ja maininta kuvauksessa**: HomeKit älykotiin, HealthKit terveyteen ja liikuntaan, yhdistettynä Terveys-appiin.

Tästä hylkäyksen otsikko: "Guideline 2.5.1 - Performance - Software Requirements".

## Julkiset API:t: missä riski piilee Expo-sovelluksessa

Yksityinen API on järjestelmän funktio, jota Apple ei dokumentoi. Apple ei takaa sen toimintaa eikä sitä, että se on olemassa seuraavassa iOS-versiossa. Siksi se on kielletty.

JavaScript-koodisi ei koskaan kosketa iOS:ää suoraan: se kulkee natiivimoduulien kautta. Expo SDK:n moduuleja ylläpitää Expon tiimi. **Muut tuovat mukanaan koodia, jota et ole kirjoittanut, ja Apple tarkastaa sen kuin omasi.** [ITMS-90683](https://devoria.fr/fi/blog/itms-90683-missing-purpose-string-expo)-opas näyttää saman mekanismin lupatekstien kanssa: Apple arvioi buildissa olevan koodin, ei sitä, mitä sovellus tekee.

Solysissa on 15. lokakuuta 2026 42 suoraa riippuvuutta, jotka sisältävät natiivia iOS-koodia, ja niistä 14 on Expo SDK:n ulkopuolelta. Joukossa ovat RevenueCat, Sentry, AppsFlyer ja `react-native-device-activity`, silta Screen Time -API:in.

Yksityinen API voidaan havaita kahdessa vaiheessa. Lähetyksessä App Store Connectin automaattinen analyysi voi palauttaa virheen ITMS-90338. Arvioinnin aikana reviewer viittaa kohtaan 2.5.1.

## Vanhentuneet API:t: UIWebView:stä UISceneen

Tunnetuin esimerkki on UIWebView, vanha komponentti verkkosisällön näyttämiseen. Apple [lopetti sen hyväksymisen](https://developer.apple.com/news/?id=12232019b) uusissa sovelluksissa huhtikuussa 2020 ja päivityksissä joulukuussa 2020. Vanha kirjasto, joka vielä viittasi siihen, esti lähetyksen. Solysissa alempana olevan tarkistuslistan haku ei löydä yhtään viittausta.

Seuraava muutos on jo ilmoitettu. Applen tekninen muistio [TN3187](https://developer.apple.com/documentation/technotes/tn3187-migrating-to-the-uikit-scene-based-life-cycle) kertoo sen: "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." Selkokielellä: iOS 27:n SDK:lla käännetty sovellus ilman scene-pohjaista elinkaarta ei käynnisty.

Kolme päivämäärää, jotka liittyvät toisiinsa:

- **Huhtikuusta 2026 lähtien** Apple vaatii Xcode 26:n: siitä kertoo [ITMS-90725](https://devoria.fr/fi/blog/itms-90725-sdk-version-issue-expo)-opas.
- **Huhtikuussa 2027** iOS 27:n SDK tulee pakolliseksi Applen [lähetyssivun](https://developer.apple.com/app-store/submitting/) mukaan.
- **Expo SDK 58**, beetassa 15. syyskuuta 2026 lähtien, generoi jo scenejen hallinnan [Expon ilmoituksen](https://expo.dev/changelog/sdk-58-beta) mukaan.

Expo SDK 57:llä ja Xcode 26:lla käännät vielä iOS 26:n SDK:lla: mikään ei hajoa tänään. **AppDelegatea muokkaavien moduulien on pysyttävä mukana ennen huhtikuuta 2027.**

## Frameworkit muuhun kuin aiottuun käyttöön

Reviewer tarkistaa, että arkaluontoinen framework palvelee näkyvää toimintoa ja että sovellussivusi mainitsee sen.

- **HealthKit** palvelee terveyttä ja liikuntaa. Applen [käyttöliittymäsuositukset](https://developer.apple.com/design/human-interface-guidelines/healthkit) sanovat sen: "If your app doesn't provide health and fitness functionality, don't request access to people's private health data."
- **HomeKit** palvelee älykotia, eikä mitään muuta.
- **PushKit** palvelee VoIP-puheluita. [PushKitin dokumentaatio](https://developer.apple.com/documentation/pushkit/responding-to-voip-notifications-from-pushkit) on selvä: "If you are unable to support CallKit in your app, you cannot use PushKit to handle push notifications." VoIP-ilmoitus, joka herättää sovelluksen ilman puhelua, on väärinkäyttöä.
- **Family Controls**, eli Screen Time -API, vaatii erityisluvan. Sen [dokumentaatio](https://developer.apple.com/documentation/familycontrols) täsmentää: "Before submitting your app to the App Store, you must request permission to use the entitlement."

Solysia varten pyysin tätä jakelulupaa 23. syyskuuta 2026, ja Apple myönsi sen samana päivänä. Käyttö vastaa frameworkia: käyttäjä valitsee tauotettavat sovellukset, ja Solys estää ne 30, 45 tai 60 minuutiksi heräämisen jälkeen. Sovellussivun kuvaus sanoo sen yhdellä lauseella: "Solys käyttää Applen Screen Time -lupaa valittujen sovellusten tauottamiseen." **Juuri tätä 2.5.1:n loppu vaatii: mainitse integraatio kuvauksessa.**

## Beetaversiot: TestFlight kyllä, App Store ei

[App Store Connectin julkaisutiedot](https://developer.apple.com/help/app-store-connect/release-notes/) näyttävät säännön käytännössä. 14. lokakuuta 2026 Xcode 27.2 beta 3:lla tehdyt buildit hyväksytään "for internal and external testing", eli TestFlightiin. 5. lokakuuta Xcode 27.1 RC:n buildit hyväksytään "for the App Store".

**Xcoden beetalla käännetty build menee TestFlightiin, ei koskaan arviointiin.** Lähettämiseen tarvitset lopullisen version tai RC:n, jonka Apple on avannut App Storelle.

Kaksi tarkennusta Expo-sovellukselle:

- **Expon beeta ei ole Applen beeta.** Apple valvoo Xcoden ja iOS SDK:n versiota, ei Expon. SDK 58:n ilmoitus lisäsi, että EAS-imaget Xcode 27:llä ovat tulossa pian.
- **Testaaminen nykyisellä iOS:llä on silti pakollista**, vaikka kääntäisit iOS 26:n SDK:lla. Käynnistä sovellus kylmänä päivitetyllä iPhonella tai simulaattorilla.

## Tarkistuslista: natiiviriippuvuudet ennen lähetystä

Käy se läpi ennen jokaista tuotantobuildia. Komennot ajetaan Expo-projektin juuressa:

```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` ei ilmoita yhtään epäonnistumista.** Solysissa 15. lokakuuta 2026: 20 tarkistusta 21:stä läpi. Epäonnistuminen johtui 13 Expo-paketista, jotka olivat yhden korjauksen jäljessä, ja `npx expo install --check` päivittää ne.
2. **Jokainen Expo SDK:n ulkopuolinen moduuli löytyy React Native Directorysta.** Expo Doctor tekee tämän tarkistuksen oletuksena, kuten [Expon dokumentaatio](https://docs.expo.dev/versions/latest/config/package-json/) kertoo. Tuntemattoman paketin iOS-koodi kannattaa lukea.
3. **Jokainen natiivimoduuli pysyy React Native -versiosi tahdissa.** [Expon versiotaulukko](https://docs.expo.dev/versions/latest/) yhdistää SDK 57:n React Native 0.86:een. Moduuli, jota ei ole julkaistu moneen versioon, on varoitusmerkki.
4. **UIWebView-haku ei palauta mitään.** Tee sama jokaiselle API:lle, jonka elinkaaren Apple ilmoittaa päättyvän.
5. **Jokaisella arkaluontoisella frameworkilla on näkyvä toiminto**: terveys, Screen Time, puhelut, koti. Kuvaus mainitsee sen, ja erityislupa on myönnetty.
6. **Build on tehty lopullisella Xcodella.** Tarkista versio EAS-buildin lokeista.
7. **Sovellus käynnistyy kylmänä nykyisellä iOS-versiolla** uudella tilillä.
8. **AppDelegateen koskevat moduulit ilmoittavat UIScene-tuesta** ennen kuin siirryt iOS 27:n SDK:hon.

## Miten vastata 2.5.1-hylkäykseen?

Viesti nimeää yleensä kyseisen API:n tai frameworkin. Kaksi tapausta:

- **Framework ei palvele mitään näkyvää**: poista moduuli tai capability, tee uusi build ja vastaa kahdella lauseella.
- **Framework palvelee oikeaa toimintoa**: anna tarkka polku, kuvakaappaus tai lyhyt video ja mainitse integraatio sovellussivun kuvauksessa.

**Natiivimoduulin poistaminen muuttaa binääriä: etäpäivitys ei riitä.** [Guideline 2.1](https://devoria.fr/fi/blog/guideline-2-1-app-store-hylkays-korjaus) -opas selittää, miksi reviewer näkee vain mukana olevan koodin. Keskustelu käydään sitten App Store Connectissa, kuten oppaassa [App Review'hun vastaamisesta](https://devoria.fr/fi/blog/apple-resolution-center-vastaa-app-review-hylkaykseen).

## Tarkista projektisi ennen lähetystä

[Review Kit](https://devoria.fr/fi/kits/app-review) kokoaa lähetystä edeltävän tarkistuslistani, korjatut hylkäykseni ja Claude Code -skillejä, jotka käyvät Expo-projektisi läpi. Jos haluat ihmisen katsovan, [varaa tunti kanssani](https://devoria.fr/fi/coaching): luemme yhdessä Applen viestin ja riippuvuutesi. Koko prosessi on sivulla [Applen hylkäämä sovellus](https://devoria.fr/fi/expertise/apple-hylkasi-sovelluksen).

Valmisteletko ensimmäistä julkaisuasi? [Tee ilmainen diagnoosi](https://devoria.fr/fi/diagnostic): saat siitä tarkistuslistani Applen hylkäysten välttämiseen.

## Usein kysytyt kysymykset

### Mitä "Guideline 2.5.1 - Performance - Software Requirements" tarkoittaa?

Se on hylkäyksen otsikko, kun Apple katsoo, että sovelluksesi käyttää ei-julkista API:a, vanhentunutta teknologiaa tai frameworkia muuhun kuin aiottuun käyttöön. Viesti nimeää yleensä kyseisen kohdan.

### Mikä ero on guideline 2.5.1:llä ja virheellä ITMS-90338?

ITMS-90338 on automaattinen virhe, joka tulee buildin lähetyksessä, kun analyysi havaitsee ei-julkisen symbolin. 2.5.1 on ihmisen soveltama arviointisääntö, joka kattaa myös väärin käytetyt frameworkit ja vanhentuneet teknologiat.

### Voiko Xcoden beetalla käännetyn sovelluksen lähettää?

Ei. App Store Connect hyväksyy nämä buildit vain TestFlightiin. Arviointia varten käännä Xcoden lopullisella versiolla tai RC:llä, jonka Apple on julkaisutiedoissaan avannut App Storelle.

### Voiko Expo-sovellus käyttää yksityistä API:a tietämättään?

Kyllä, kolmannen osapuolen natiivimoduulin kautta. JavaScript-koodisi ei itse kutsu iOS:ää, mutta jokainen natiivipaketti tuo mukanaan Objective-C- tai Swift-koodia. Käy Expo SDK:n ulkopuolisten moduulien lista läpi ennen jokaista versiota.

### Pitääkö Expo SDK 58:aan siirtyä heti?

Ei 2.5.1:n takia 15. lokakuuta 2026: SDK 57 kääntää iOS 26:n SDK:lla, joka hyväksytään vielä. Suunnittele päivitys ennen huhtikuuta 2027, jolloin Apple vaatii iOS 27:n SDK:n ja scene-pohjaisen elinkaaren.


## Projektisi

[Review Kit](https://devoria.fr/fi/kits/app-review): App Store -tarkastuksen tarkistuslistani, korjatut Applen hylkäykseni, Google Playn lista ja kolme Claude Code -skilliä. 49 €.

[iOS & Android Kit](https://devoria.fr/fi/kits/ios): Tee iPhone- ja Android-sovelluksesi Claude Codella: sovellusteni pohjakoodi, polku kauppoihin asti ja kaikki kitit. 99 €.

[Diagnoosi: mikä erottaa sinut omasta iPhone-sovelluksestasi](https://devoria.fr/fi/diagnostic): 7 kysymystä, 60 sekuntia: tiedät, mikä oikeasti estää sinua julkaisemasta iPhone-sovellustasi, saat 4 vaiheen polkusi ja sinulle sopivan kitin.
