# Guideline 2.5.1: API awam dan SDK terkini dengan Expo

> Guideline 2.5.1: API awam sahaja, app serasi dengan iOS semasa, framework ikut tujuannya. Dengan Expo, semak modul natif anda dahulu.

Halaman asal: [Guideline 2.5.1: API awam dan SDK terkini dengan Expo](https://devoria.fr/ms/blog/guideline-2-5-1-api-awam-sdk-expo)
Pengarang: [Mehdi Azizi](https://devoria.fr/ms/mehdi-azizi)
Diterbitkan: 2026-11-04
Semakan kandungan terakhir: 2026-11-04


Guideline 2.5.1 menetapkan empat syarat: guna API awam sahaja, berjalan pada versi iOS semasa, tinggalkan apa yang Apple tamatkan (deprecated) dan guna setiap framework untuk tujuan asalnya. **Dengan Expo, risikonya jarang datang daripada kod JavaScript anda: ia datang daripada modul natif yang anda pasang dan SDK yang anda guna untuk compile.**

Saya menerbitkan Solys, TradaZen dan Nolera dengan Expo SDK 57. Solys bergantung pada API Screen Time Apple, sebuah framework yang penggunaannya dikawal. Panduan ini membincangkan peraturan semakan. Untuk ralat yang diterima semasa menghantar build, baca panduan [ITMS-90338](https://devoria.fr/ms/blog/itms-90338-non-public-api-usage-expo). Untuk mod latar belakang, yang berada dalam bahagian yang sama, baca panduan [guideline 2.5.4](https://devoria.fr/ms/blog/guideline-2-5-4-mod-latar-belakang-ditolak-apple).

## Apa kata guideline 2.5.1?

Peraturan ini terdapat dalam bahagian 2.5, "Software Requirements", dalam [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."

Ringkasnya, empat kewajipan:

1. **API awam sahaja**, iaitu yang didokumenkan oleh Apple.
2. **App yang berjalan pada versi iOS semasa**, iaitu iOS 27 sejak September 2026.
3. **Tiada apa-apa yang deprecated dan akan hilang**: anda gantikan apa yang Apple umumkan akan ditamatkan.
4. **Setiap framework di tempatnya, dan disebut dalam deskripsi**: HomeKit untuk rumah pintar, HealthKit untuk kesihatan dan sukan, dihubungkan dengan app Health.

Itulah sebabnya tajuk penolakan berbunyi: "Guideline 2.5.1 - Performance - Software Requirements".

## API awam: di mana risiko bersembunyi dalam app Expo

API persendirian (private API) ialah fungsi sistem yang tidak didokumenkan oleh Apple. Apple tidak menjamin tingkah lakunya mahupun kewujudannya dalam versi iOS seterusnya, sebab itu ia dilarang.

Kod JavaScript anda tidak pernah menyentuh iOS secara terus: ia melalui modul natif. Modul dalam SDK Expo diselenggara oleh pasukan Expo. **Modul lain membawa kod yang bukan anda tulis, dan Apple memeriksanya sama seperti kod anda sendiri.** Panduan [ITMS-90683](https://devoria.fr/ms/blog/itms-90683-missing-purpose-string-expo) menunjukkan mekanisme yang sama dengan ayat kebenaran: Apple menilai kod yang ada dalam build, bukan apa yang app lakukan.

Pada Solys, setakat 15 Oktober 2026, 42 kebergantungan langsung mengandungi kod iOS natif, 14 daripadanya di luar SDK Expo. Antaranya RevenueCat, Sentry, AppsFlyer dan `react-native-device-activity`, jambatan ke API Screen Time.

API persendirian boleh dikesan pada dua ketika. Semasa penghantaran, analisis automatik App Store Connect boleh memulangkan ralat ITMS-90338. Semasa semakan, reviewer memetik 2.5.1.

## API deprecated: dari UIWebView ke UIScene

Contoh paling terkenal ialah UIWebView, komponen lama untuk memaparkan web. Apple [berhenti menerimanya](https://developer.apple.com/news/?id=12232019b) dalam app baharu pada April 2020, kemudian dalam kemas kini pada Disember 2020. Library lama yang masih merujuknya akan menyekat penghantaran. Pada Solys, carian dalam senarai semak di bawah tidak menemui sebarang rujukan.

Perubahan seterusnya sudah diumumkan. Nota teknikal [TN3187](https://developer.apple.com/documentation/technotes/tn3187-migrating-to-the-uikit-scene-based-life-cycle) Apple menyatakannya: "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." Maksudnya, app yang di-compile dengan SDK iOS 27 tanpa kitaran hayat berasaskan scene tidak akan bermula.

Tiga tarikh untuk dikaitkan:

- **Sejak April 2026**, Apple mewajibkan Xcode 26: itu topik panduan [ITMS-90725](https://devoria.fr/ms/blog/itms-90725-sdk-version-issue-expo).
- **Pada April 2027**, [halaman penghantaran Apple](https://developer.apple.com/app-store/submitting/) mengumumkan SDK iOS 27 menjadi wajib.
- **Expo SDK 58**, dalam beta sejak 15 September 2026, sudah menjana pengurusan scene, menurut [pengumuman Expo](https://expo.dev/changelog/sdk-58-beta).

Dengan Expo SDK 57 dan Xcode 26, anda masih compile dengan SDK iOS 26: tiada apa yang rosak hari ini. **Modul yang mengubah AppDelegate perlu menyusul sebelum April 2027.**

## Framework yang digunakan di luar tujuan asalnya

Reviewer menyemak bahawa framework sensitif menyokong fungsi yang kelihatan, dan bahawa halaman app anda menyebutnya.

- **HealthKit** untuk kesihatan dan sukan. [Garis panduan antara muka Apple](https://developer.apple.com/design/human-interface-guidelines/healthkit) menyatakan: "If your app doesn't provide health and fitness functionality, don't request access to people's private health data."
- **HomeKit** untuk rumah pintar, dan tiada yang lain.
- **PushKit** untuk panggilan suara melalui IP. [Dokumentasi PushKit](https://developer.apple.com/documentation/pushkit/responding-to-voip-notifications-from-pushkit) jelas: "If you are unable to support CallKit in your app, you cannot use PushKit to handle push notifications." Notifikasi VoIP yang membangunkan app tanpa panggilan ialah penyalahgunaan.
- **Family Controls**, API Screen Time, memerlukan kebenaran khas. [Dokumentasinya](https://developer.apple.com/documentation/familycontrols) menyatakan: "Before submitting your app to the App Store, you must request permission to use the entitlement."

Untuk Solys, saya memohon kebenaran pengedaran ini pada 23 September 2026, dan Apple meluluskannya pada hari yang sama. Penggunaannya selari dengan framework: pengguna memilih app untuk dijeda, dan Solys menyekatnya selama 30, 45 atau 60 minit selepas bangun tidur. Deskripsi halaman app menyatakannya dalam satu ayat: "Solys menggunakan kebenaran Screen Time Apple untuk menjeda app yang dipilih." **Inilah yang diminta di hujung 2.5.1: sebut integrasi itu dalam deskripsi.**

## Versi beta: TestFlight ya, App Store tidak

[Nota keluaran App Store Connect](https://developer.apple.com/help/app-store-connect/release-notes/) menunjukkan peraturan ini secara praktikal. Pada 14 Oktober 2026, build yang dibuat dengan Xcode 27.2 beta 3 diterima "for internal and external testing", iaitu untuk TestFlight. Pada 5 Oktober, build dari Xcode 27.1 RC diterima "for the App Store".

**Build yang di-compile dengan Xcode beta pergi ke TestFlight, tidak pernah ke semakan.** Untuk menghantar, anda perlukan versi akhir, atau RC yang Apple telah buka untuk App Store.

Dua perkara untuk app Expo:

- **Beta Expo bukan beta Apple.** Apple mengawal versi Xcode dan SDK iOS, bukan versi Expo. Pengumuman SDK 58 menambah bahawa imej EAS dengan Xcode 27 akan tiba tidak lama lagi.
- **Menguji pada iOS semasa tetap wajib**, walaupun anda compile dengan SDK iOS 26. Lancarkan app secara cold start pada iPhone atau simulator yang dikemas kini.

## Senarai semak: kebergantungan natif sebelum penghantaran

Lalui senarai ini sebelum setiap build produksi. Arahan dijalankan di root projek 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` tidak melaporkan sebarang kegagalan.** Pada Solys, 15 Oktober 2026: 20 daripada 21 semakan lulus. Kegagalan itu datang daripada 13 pakej Expo yang ketinggalan satu pembetulan, yang diselaraskan oleh `npx expo install --check`.
2. **Setiap modul di luar SDK Expo tersenarai dalam React Native Directory.** Expo Doctor membuat semakan ini secara lalai, seperti dinyatakan dalam [dokumentasi Expo](https://docs.expo.dev/versions/latest/config/package-json/). Pakej yang tidak dikenali patut dibaca kod iOSnya.
3. **Setiap modul natif mengikut versi React Native anda.** [Jadual versi Expo](https://docs.expo.dev/versions/latest/) mengaitkan SDK 57 dengan React Native 0.86. Modul yang tiada keluaran sejak beberapa versi ialah satu petanda.
4. **Carian UIWebView tidak memulangkan apa-apa.** Buat perkara yang sama untuk mana-mana API yang Apple umumkan akan ditamatkan.
5. **Setiap framework sensitif ada fungsi yang kelihatan**: kesihatan, Screen Time, panggilan, rumah. Deskripsi menyebutnya, dan kebenaran khas telah diluluskan.
6. **Build datang daripada Xcode versi akhir.** Semak versinya dalam log build EAS.
7. **App bermula secara cold start pada versi iOS semasa**, dengan akaun baharu.
8. **Modul yang menyentuh AppDelegate mengumumkan sokongan UIScene** sebelum anda beralih ke SDK iOS 27.

## Bagaimana membalas penolakan 2.5.1?

Mesej biasanya menamakan API atau framework yang terlibat. Dua kes:

- **Framework itu tidak menyokong apa-apa yang kelihatan**: buang modul atau capability itu, buat build semula, kemudian balas dalam dua ayat.
- **Framework itu menyokong fungsi sebenar**: berikan laluan tepat, tangkapan skrin atau video pendek, dan sebut integrasi itu dalam deskripsi halaman app.

**Membuang modul natif mengubah binari: kemas kini jarak jauh tidak mencukupi.** Panduan [guideline 2.1](https://devoria.fr/ms/blog/guideline-2-1-app-store-penolakan) menerangkan mengapa reviewer hanya melihat kod yang dibenamkan. Perbualan kemudiannya berlangsung dalam App Store Connect, seperti dalam panduan untuk [membalas App Review](https://devoria.fr/ms/blog/resolution-center-apple-balas-penolakan-app-review).

## Semak projek anda sebelum penghantaran

[Review Kit](https://devoria.fr/ms/kits/app-review) menghimpunkan senarai semak saya sebelum penghantaran, penolakan yang telah saya betulkan dan skill Claude Code yang menyemak projek Expo anda. Untuk pandangan manusia, [tempah sejam dengan saya](https://devoria.fr/ms/coaching): kita baca bersama mesej Apple dan kebergantungan anda. Langkah lengkapnya ada di halaman [app ditolak oleh Apple](https://devoria.fr/ms/expertise/aplikasi-ditolak-apple).

Sedang bersedia untuk keluaran pertama anda? [Buat diagnostik percuma anda](https://devoria.fr/ms/diagnostic): ia akan menghantar senarai semak anti-penolakan Apple saya kepada anda.

## Soalan lazim

### Apa maksud "Guideline 2.5.1 - Performance - Software Requirements"?

Itulah tajuk penolakan apabila Apple menganggap app anda menggunakan API bukan awam, teknologi deprecated atau framework di luar tujuan asalnya. Mesej biasanya menamakan elemen yang terlibat.

### Apa beza guideline 2.5.1 dan ralat ITMS-90338?

ITMS-90338 ialah ralat automatik yang diterima semasa menghantar build, apabila analisis mengesan simbol bukan awam. 2.5.1 ialah peraturan semakan yang dilaksanakan oleh manusia, yang turut merangkumi framework yang disalahgunakan dan teknologi deprecated.

### Bolehkah saya menghantar app yang di-compile dengan Xcode beta?

Tidak. App Store Connect menerima build sebegini untuk TestFlight sahaja. Untuk semakan, compile dengan Xcode versi akhir, atau RC yang Apple telah buka untuk App Store dalam nota keluarannya.

### Bolehkah app Expo menggunakan API persendirian tanpa disedari?

Ya, melalui modul natif pihak ketiga. Kod JavaScript anda tidak memanggil iOS sendiri, tetapi setiap pakej natif membawa kod Objective-C atau Swift. Baca senarai modul di luar SDK Expo sebelum setiap versi.

### Perlukah saya beralih ke Expo SDK 58 sekarang?

Tidak untuk 2.5.1 setakat 15 Oktober 2026: SDK 57 compile dengan SDK iOS 26, yang masih diterima. Rancang peralihan sebelum April 2027, apabila Apple akan mewajibkan SDK iOS 27 dan kitaran hayat berasaskan scene.


## Projek anda

[Review Kit](https://devoria.fr/ms/kits/app-review): Senarai semak review App Store saya, penolakan Apple yang telah saya betulkan, senarai semak Google Play dan tiga skill Claude Code. RM 219.

[iOS & Android Kit](https://devoria.fr/ms/kits/ios): Bina app iPhone dan Android anda dengan Claude Code: kod permulaan app saya, laluan hingga ke store dan semua kit. RM 449.

[Diagnostik: apa yang memisahkan anda daripada app iPhone anda](https://devoria.fr/ms/diagnostic): 7 soalan, 60 saat: anda tahu apa yang benar-benar menghalang anda menerbitkan app iPhone, laluan 4 langkah anda dan kit yang sesuai dengan anda.
