# ITMS-90725: betulkan “SDK version issue” dengan Expo

> ITMS-90725: app anda dikompil dengan SDK iOS lama. Sejak 28 April 2026, Apple wajibkan Xcode 26: guna SDK Expo 54 ke atas dan buat build baharu.

Halaman asal: [ITMS-90725: betulkan “SDK version issue” dengan Expo](https://devoria.fr/ms/blog/itms-90725-sdk-version-issue-expo)
Pengarang: [Mehdi Azizi](https://devoria.fr/ms/mehdi-azizi)
Diterbitkan: 2026-11-04
Semakan kandungan terakhir: 2026-11-04


ITMS-90725 ialah semakan automatik Apple pada build anda: ia menyatakan app anda dikompil dengan SDK iOS yang lebih lama daripada minimum yang diwajibkan. Pada 15 Oktober 2026, Apple menyatakan bahawa sejak 28 April 2026, app yang dihantar ke App Store Connect mesti dikompil dengan Xcode 26 atau lebih baharu dan SDK iOS 26. **Dengan Expo, semuanya bergantung pada imej build EAS: mulai SDK Expo 54, imej yang dipilih secara lalai sudah membawa Xcode 26.**

App saya, Solys, TradaZen dan Nolera, menggunakan SDK 57 Expo, tanpa imej yang dipaksa dalam eas.json: EAS sendiri memilih versi Xcode. Berikut cara menyemak projek anda, dan apa yang perlu dibuat jika projek anda lebih lama.

## Apakah maksud ralat ITMS-90725?

Mesejnya bertajuk "ITMS-90725: SDK version issue". Ia menyebut SDK yang digunakan untuk mengompil app anda, kemudian minimum yang diwajibkan dan versi Xcode yang mengandunginya. Di forum pembangun Apple, satu mesej pada 2024 contohnya bermula begini: "This app was built with the iOS 16.2 SDK", diikuti keperluan pada masa itu.

SDK ialah himpunan pustaka iOS yang digunakan Xcode untuk mengompil app anda. Setiap versi Xcode membawa SDK sendiri: Xcode 26 mengandungi SDK iOS 26. **Mengompil dengan SDK baharu tidak bermakna anda meninggalkan iPhone lama.** Versi iOS minimum yang diterima app anda ialah tetapan berasingan, iaitu sasaran deployment (deployment target).

Seperti ralat ITMS yang lain, ini bukan penolakan oleh reviewer. Semakan ini automatik dan dibuat pada binari yang dihantar.

## Versi Xcode apa yang Apple wajibkan sekarang?

Inilah yang dinyatakan oleh halaman [keperluan akan datang Apple](https://developer.apple.com/news/upcoming-requirements/) dan halaman [penghantaran ke App Store](https://developer.apple.com/app-store/submitting/), disemak pada 15 Oktober 2026:

| Tarikh           | Keperluan                  |
| ---------------- | -------------------------- |
| 28 April 2026    | Xcode 26, SDK iOS 26       |
| 9 September 2026 | Sasaran minimum iOS 13     |
| April 2027       | SDK iOS 27, sasaran iOS 15 |

Peraturan yang mencetuskan ITMS-90725 ialah yang pertama. Build yang dibuat dengan Xcode 16 dan SDK iOS 18 tidak lagi diterima. Yang kedua berkaitan versi minimum yang disasarkan, bukan SDK. Yang ketiga diumumkan untuk April 2027, tanpa tarikh tepat di halaman itu semasa saya menyemaknya. Apple sudah menggalakkan anda mengompil dan menguji dengan Xcode 27.

**Keperluan ini naik secara berkala, dan sentiasa pada musim bunga.** Halaman Apple yang sama menyimpan rekod beberapa tarikh akhir: Xcode 14.1 pada 25 April 2023, Xcode 15 pada 29 April 2024, Xcode 26 pada 28 April 2026. Sebelum setiap musim bunga, baca semula halaman itu dan jangan bergantung pada artikel, termasuk artikel ini.

## Amaran atau sekatan: bagaimana membezakannya?

Sebelum tarikh akhir, ITMS-90725 datang sebagai amaran. Pada 2024, di forum Apple, e-mel itu menyatakan penghantaran berjaya dan menasihatkan pembetulan pada penghantaran seterusnya. Selepas tarikh akhir, Apple menulis bahawa app "mesti" dikompil dengan SDK yang diwajibkan untuk dihantar: build itu tidak lagi diterima.

| Petunjuk              | Amaran                         | Sekatan              |
| --------------------- | ------------------------------ | -------------------- |
| Tarikh penghantaran   | Sebelum tarikh akhir           | Selepas tarikh akhir |
| Penghantaran diterima | Ya                             | Tidak                |
| Apa yang anda buat    | Betulkan pada build seterusnya | Build baharu         |

**Amaran ITMS-90725 ialah kiraan detik.** Build itu lulus hari ini, tetapi build seterusnya, jika dikompil dengan cara yang sama, akan ditolak selepas tarikh itu. Betulkan sekarang selagi anda tidak terdesak dengan kemas kini segera.

## Betulkan ITMS-90725 dalam projek Expo

Dengan EAS, app anda dikompil pada Mac milik Expo, seperti yang saya terangkan dalam [menerbitkan app iOS tanpa Mac](https://devoria.fr/ms/blog/terbitkan-aplikasi-ios-tanpa-mac-expo-eas). Versi Xcode bergantung pada imej build. Jika anda tidak menetapkan `image` dalam eas.json, EAS menggunakan alias `auto`: ia memilih imej berdasarkan versi SDK Expo anda.

Berikut imej bagi setiap SDK menurut [dokumentasi infrastruktur EAS](https://docs.expo.dev/build-reference/infrastructure/), dikemas kini pada 8 Oktober 2026:

| SDK Expo | Xcode dalam imej | ITMS-90725 |
| -------- | ---------------- | ---------- |
| 57       | 26.6             | Tidak      |
| 56       | 26.4             | Tidak      |
| 55       | 26.2             | Tidak      |
| 54       | 26.0             | Tidak      |
| 53       | 16.4             | Ya         |
| 52       | 16.2             | Ya         |

1. **Lihat imej yang digunakan oleh build terakhir anda.** Di halaman build dalam expo.dev, bahagian "Spin up build environment" dalam log memaparkan nama imej dan versi Xcodenya.
2. **Jika anda menggunakan SDK 54 ke atas, cari imej yang dipaksa.** Satu baris `image` yang menunjuk ke Xcode 16, seperti `macos-sequoia-15.6-xcode-16.4`, sudah cukup untuk mencetuskan ralat. Dokumentasi Expo memperkenalkannya sebagai imej SDK 54 bagi sesiapa yang tidak mahu Xcode 26: sejak 28 April 2026, pilihan ini membawa kepada penolakan. Buang baris itu: EAS kembali ke imej lalai.
3. **Jika anda menggunakan SDK 53 ke bawah, naikkan SDK.** Itulah cadangan Expo dalam [pengumuman 27 April 2026](https://expo.dev/blog/app-store-connect-minimum-sdk-26): naik sekurang-kurangnya ke SDK 54.
4. **Buat build baharu dan hantar semula.** SDK terkunci dalam binari: kemas kini jarak jauh tidak mengubah apa-apa.

### Penyelesaian sementara untuk SDK lama

Pengumuman Expo yang sama memberi satu pilihan jika anda belum boleh naik sekarang: paksa imej Xcode 26 dalam eas.json, dalam profil production anda.

```json
{
  "build": {
    "production": {
      "ios": {
        "image": "macos-sequoia-15.6-xcode-26.2"
      }
    }
  }
}
```

Expo memberi amaran: bukan semua versi SDK serasi dengan Xcode 26, dan hasilnya juga bergantung pada pustaka anda. **Anggap ini sebagai penangguhan, bukan pembetulan.** Jika build gagal semasa kompilasi, satu-satunya jalan ialah menaikkan SDK.

### Naikkan SDK, satu versi pada satu masa

[Panduan naik taraf Expo](https://docs.expo.dev/workflow/upgrading-expo-sdk-walkthrough/) mengesyorkan naik satu versi pada satu masa, supaya anda dapat mengesan apa yang rosak pada setiap langkah. Untuk naik dari SDK 53 ke SDK 54:

```bash
npm install expo@^54.0.0
npx expo install --fix
npx expo-doctor
```

Jika folder `ios` anda dijana oleh Expo, padamkannya: ia akan dicipta semula pada build seterusnya. Kemudian uji app pada iPhone anda sebelum mengulang proses untuk versi seterusnya.

Satu perkara yang perlu tahu sebelum menyasarkan SDK terkini. Menurut [jadual versi Expo](https://docs.expo.dev/versions/latest/), SDK 54 dan 55 menerima iOS 15.1 ke atas, manakala SDK 56 dan 57 hanya iOS 16.4 ke atas. **Jadi, naik ke SDK 56 akan menyingkirkan iPhone yang masih menggunakan iOS 15.** SDK 54 sudah cukup untuk menghilangkan ITMS-90725.

## Semak SDK sesuatu build sebelum menghantarnya

Xcode merekodkan SDK dan versi Xcode yang digunakan dalam Info.plist setiap build. Muat turun IPA dari halaman build di expo.dev, kemudian jalankan pada Mac anda:

```bash
unzip -q MonApp.ipa -d ipa
plutil -extract DTSDKName raw ipa/Payload/*.app/Info.plist
plutil -extract DTXcode raw ipa/Payload/*.app/Info.plist
```

Untuk build App Store, nilai pertama mesti bermula dengan `iphoneos26`. Nilai kedua mengekod versi Xcode: pada build Nolera yang dibuat dengan Xcode 26.2 untuk simulator, saya mendapat `2620`. Jika anda nampak `iphoneos18` atau nilai yang bermula dengan `16`, build itu akan ditolak.

Jika anda mengompil pada Mac sendiri, Xcode anda yang dikira, bukan imej EAS. `xcodebuild -version` memaparkan versi yang aktif. Logik yang sama untuk integrasi berterusan (CI): versi Xcode bergantung pada mesin yang dipilih. Pada 2024, di forum Apple, ada pembangun yang terkena ITMS-90725 kerana mesin GitHub Actions mereka berjalan pada macOS yang terlalu lama untuk Xcode 15.

Setelah build yang betul dihantar, uji dalam [TestFlight](https://devoria.fr/ms/blog/testflight-uji-aplikasi-iphone-sebelum-hantar) sebelum menghantarnya untuk semakan. Build baharu juga akan melalui semakan semula, dengan tempoh yang diterangkan dalam [tempoh kelulusan App Store](https://devoria.fr/ms/blog/tempoh-semakan-app-store-berapa-lama).

## Hantar build anda tanpa kejutan

ITMS-90725 boleh dicegah dalam seminit: semak imej dan SDK sebelum setiap build production. Semakan automatik lain memerlukan ketelitian yang sama, seperti [ITMS-90683](https://devoria.fr/ms/blog/itms-90683-missing-purpose-string-expo) untuk ayat kebenaran. Penolakan oleh reviewer memerlukan lebih banyak pertimbangan: langkahnya ada di halaman [app ditolak oleh Apple](https://devoria.fr/ms/expertise/aplikasi-ditolak-apple), dan sebab paling biasa ada dalam [mengapa Apple menolak app](https://devoria.fr/ms/blog/aplikasi-ditolak-apple-5-kes-sebenar).

Untuk menyemak projek anda sebelum dihantar, [Review Kit](https://devoria.fr/ms/kits/app-review) menghimpunkan senarai semak saya dan skill Claude Code yang menyemak projek anda. Jika penghantaran anda tersekat dan anda mahu pandangan manusia, [tempah satu jam dengan saya](https://devoria.fr/ms/coaching): kita semak projek anda melalui panggilan video, di skrin anda. Dan jika anda sedang menyediakan pelancaran pertama, [buat diagnostik percuma anda](https://devoria.fr/ms/diagnostic): ia menyusun langkah mengikut turutan dan menghantar senarai semak anti-penolakan Apple saya kepada anda.

## Soalan lazim

### Adakah ITMS-90725 menghalang saya daripada menerbitkan app?

Selepas tarikh akhir yang ditetapkan Apple, ya: build itu tidak lagi diterima dan anda perlu mengompil build baharu. Sebelum tarikh akhir, ia hanya amaran: build itu lulus, tetapi build seterusnya akan ditolak jika dikompil dengan cara yang sama.

### Perlukah saya meninggalkan iPhone lama untuk mengompil dengan SDK iOS 26?

Tidak. SDK kompilasi dan versi iOS minimum ialah dua tetapan berasingan. Dengan Expo, versi SDK Expo anda yang menentukan minimum ini: iOS 15.1 untuk SDK 54 dan 55, iOS 16.4 untuk SDK 56 dan 57.

### Bolehkah ITMS-90725 dibetulkan dengan kemas kini jarak jauh?

Tidak. SDK direkodkan dalam binari semasa kompilasi. Kemas kini jarak jauh hanya mengubah JavaScript dan aset. Anda perlu membuat build baharu dengan Xcode 26 dan menghantarnya semula.

### Bagaimana mengetahui versi Xcode yang digunakan EAS?

Buka log build anda di expo.dev, bahagian "Spin up build environment". Nama imej menunjukkan versi Xcode, contohnya `macos-tahoe-26.5-xcode-26.6`. Senarai penuh ada dalam dokumentasi infrastruktur EAS.

### Apa yang akan berubah dengan keperluan April 2027?

Menurut halaman penghantaran Apple, anda perlu mengompil dengan SDK iOS 27 dan menyasarkan sekurang-kurangnya iOS 15. Di pihak EAS, Expo merancang imej dengan Xcode 27 untuk SDK 58 akan datang: semak senarai imej build sebelum mengompil. Baca semula halaman Apple pada musim bunga untuk mengetahui tarikh tepatnya.


## 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.
