# Lỗi ITMS-90725 SDK version issue: cách sửa với Expo

> ITMS-90725 nghĩa là app của bạn được build bằng SDK iOS quá cũ. Từ ngày 28/4/2026, Apple bắt buộc dùng Xcode 26: hãy lên Expo SDK 54 trở lên rồi build lại.

Trang gốc: [Lỗi ITMS-90725 SDK version issue: cách sửa với Expo](https://devoria.fr/vi/blog/itms-90725-sdk-version-issue-expo)
Tác giả: [Mehdi Azizi](https://devoria.fr/vi/mehdi-azizi)
Ngày đăng: 2026-11-04
Lần sửa nội dung gần nhất: 2026-11-04


ITMS-90725 là một bước kiểm tra tự động của Apple trên bản build của bạn: nó báo rằng app đã được build bằng một SDK iOS cũ hơn mức tối thiểu được yêu cầu. Tính đến ngày 15/10/2026, Apple cho biết từ ngày 28/4/2026, các app gửi lên App Store Connect phải được build bằng Xcode 26 trở lên và SDK iOS 26. **Với Expo, mọi thứ nằm ở image build của EAS: từ Expo SDK 54, image được chọn mặc định đã có sẵn Xcode 26.**

Các app của mình, Solys, TradaZen và Nolera, đều dùng Expo SDK 57, không ép image nào trong eas.json: EAS tự chọn phiên bản Xcode. Dưới đây là cách kiểm tra project của bạn, và phải làm gì nếu project của bạn cũ hơn.

## Lỗi ITMS-90725 nghĩa là gì?

Thông báo có tiêu đề "ITMS-90725: SDK version issue". Nó cho biết SDK mà app của bạn đã được build, sau đó là mức tối thiểu được yêu cầu và phiên bản Xcode chứa SDK đó. Ví dụ, trên diễn đàn developer của Apple, một thông báo năm 2024 bắt đầu như sau: "This app was built with the iOS 16.2 SDK", rồi tiếp theo là yêu cầu của thời điểm đó.

SDK là tập hợp các thư viện iOS mà Xcode dùng để build app của bạn. Mỗi phiên bản Xcode đi kèm SDK riêng: Xcode 26 chứa SDK iOS 26. **Build bằng SDK mới không có nghĩa là bỏ rơi các iPhone đời cũ.** Phiên bản iOS tối thiểu mà app hỗ trợ là một thiết lập riêng, gọi là deployment target.

Giống các lỗi ITMS khác, đây không phải là bị reviewer từ chối. Việc kiểm tra là tự động và áp dụng lên file binary được gửi lên.

## Hiện nay Apple yêu cầu phiên bản Xcode nào?

Đây là nội dung trên trang [các yêu cầu sắp tới của Apple](https://developer.apple.com/news/upcoming-requirements/) và trang [gửi app lên App Store](https://developer.apple.com/app-store/submitting/), ghi nhận ngày 15/10/2026:

| Ngày         | Yêu cầu                   |
| ------------ | ------------------------- |
| 28/4/2026    | Xcode 26, SDK iOS 26      |
| 9/9/2026     | Target tối thiểu iOS 13   |
| Tháng 4/2027 | SDK iOS 27, target iOS 15 |

Quy định gây ra ITMS-90725 là dòng đầu tiên. Bản build làm bằng Xcode 16 và SDK iOS 18 không còn được chấp nhận. Dòng thứ hai liên quan đến phiên bản tối thiểu được nhắm tới, không phải SDK. Dòng thứ ba được công bố cho tháng 4/2027, chưa có ngày cụ thể trên trang tại thời điểm ghi nhận. Apple đã khuyến khích build và test bằng Xcode 27.

**Yêu cầu này được nâng lên đều đặn, và luôn vào mùa xuân.** Chính trang đó của Apple vẫn lưu lại nhiều mốc: Xcode 14.1 ngày 25/4/2023, Xcode 15 ngày 29/4/2024, Xcode 26 ngày 28/4/2026. Trước mỗi mùa xuân, hãy đọc lại trang đó thay vì tin vào một bài viết, kể cả bài này.

## Cảnh báo hay bị chặn: phân biệt thế nào?

Trước hạn chót, ITMS-90725 đến dưới dạng cảnh báo. Năm 2024, trên diễn đàn của Apple, email nói rõ việc gửi đã thành công và khuyên sửa ở lần gửi sau. Sau hạn chót, Apple viết rằng app "phải" được build bằng SDK yêu cầu mới được gửi lên: bản build không còn được chấp nhận.

| Dấu hiệu       | Cảnh báo       | Bị chặn      |
| -------------- | -------------- | ------------ |
| Ngày gửi       | Trước hạn chót | Sau hạn chót |
| Được chấp nhận | Có             | Không        |
| Bạn cần làm    | Sửa ở lần sau  | Build mới    |

**Cảnh báo ITMS-90725 là một chiếc đồng hồ đếm ngược.** Hôm nay build vẫn qua, nhưng bản tiếp theo build theo cùng cách sẽ bị từ chối sau mốc đó. Hãy sửa ngay khi bạn chưa bị một bản cập nhật gấp hối thúc.

## Sửa ITMS-90725 trong project Expo

Với EAS, app của bạn được build trên máy Mac của Expo, như mình giải thích trong bài [publish app iOS không cần Mac](https://devoria.fr/vi/blog/phat-hanh-app-ios-khong-can-mac-expo-eas). Phiên bản Xcode phụ thuộc vào image build. Nếu bạn không ghi `image` trong eas.json, EAS dùng alias `auto`: nó chọn image theo phiên bản Expo SDK của bạn.

Đây là image tương ứng với từng SDK theo [tài liệu hạ tầng EAS](https://docs.expo.dev/build-reference/infrastructure/), cập nhật ngày 8/10/2026:

| Expo SDK | Xcode của image | ITMS-90725 |
| -------- | --------------- | ---------- |
| 57       | 26.6            | Không      |
| 56       | 26.4            | Không      |
| 55       | 26.2            | Không      |
| 54       | 26.0            | Không      |
| 53       | 16.4            | Có         |
| 52       | 16.2            | Có         |

1. **Xem image mà bản build gần nhất đã dùng.** Trên trang build trong expo.dev, mục "Spin up build environment" của log hiển thị tên image và phiên bản Xcode.
2. **Nếu bạn dùng SDK 54 trở lên, tìm xem có image bị ép không.** Một dòng `image` trỏ tới Xcode 16, như `macos-sequoia-15.6-xcode-16.4`, là đủ gây lỗi. Tài liệu của Expo giới thiệu nó là image của SDK 54 cho ai không muốn dùng Xcode 26: từ ngày 28/4/2026, lựa chọn này dẫn đến bị từ chối. Hãy xóa dòng đó: EAS sẽ quay về image mặc định.
3. **Nếu bạn dùng SDK 53 trở xuống, hãy nâng SDK.** Đây là khuyến nghị của Expo trong [thông báo ngày 27/4/2026](https://expo.dev/blog/app-store-connect-minimum-sdk-26): nâng lên ít nhất SDK 54.
4. **Build lại và gửi lại.** SDK đã được cố định trong binary: một bản cập nhật từ xa không thay đổi được gì.

### Giải pháp tạm thời cho SDK cũ

Cũng trong thông báo đó, Expo đưa ra một lựa chọn nếu bạn chưa thể nâng ngay: ép dùng image Xcode 26 trong eas.json, ở profile production.

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

Expo cảnh báo: không phải phiên bản SDK nào cũng tương thích với Xcode 26, và kết quả còn phụ thuộc vào các thư viện của bạn. **Hãy coi đây là cách câu giờ, không phải cách sửa.** Nếu build lỗi khi biên dịch, con đường duy nhất vẫn là nâng SDK.

### Nâng SDK, từng phiên bản một

[Hướng dẫn nâng cấp của Expo](https://docs.expo.dev/workflow/upgrading-expo-sdk-walkthrough/) khuyên nâng từng phiên bản một, để phát hiện cái gì bị hỏng ở mỗi bước. Để chuyển từ SDK 53 lên SDK 54:

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

Nếu thư mục `ios` của bạn do Expo tạo ra, hãy xóa nó: nó sẽ được tạo lại ở lần build sau. Sau đó test app trên iPhone của bạn trước khi làm tiếp cho phiên bản kế tiếp.

Một điểm cần biết trước khi nhắm tới SDK mới nhất. Theo [bảng phiên bản của Expo](https://docs.expo.dev/versions/latest/), SDK 54 và 55 hỗ trợ iOS 15.1 trở lên, còn SDK 56 và 57 chỉ hỗ trợ iOS 16.4 trở lên. **Vì vậy, lên SDK 56 sẽ loại bỏ các iPhone còn ở iOS 15.** SDK 54 là đủ để xử lý ITMS-90725.

## Kiểm tra SDK của bản build trước khi gửi

Xcode ghi vào Info.plist của mỗi bản build SDK và phiên bản Xcode đã dùng. Tải file IPA từ trang build trên expo.dev, rồi chạy trên Mac của bạn:

```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
```

Với bản build dành cho App Store, giá trị đầu tiên phải bắt đầu bằng `iphoneos26`. Giá trị thứ hai mã hóa phiên bản Xcode: với một bản build Nolera làm bằng Xcode 26.2 cho simulator, mình nhận được `2620`. Nếu bạn thấy `iphoneos18` hoặc một giá trị bắt đầu bằng `16`, bản build sẽ bị từ chối.

Nếu bạn build trên máy Mac của mình, Xcode của bạn mới là thứ quyết định, không phải image của EAS. `xcodebuild -version` hiển thị phiên bản đang dùng. CI cũng vậy: phiên bản Xcode phụ thuộc vào máy được chọn. Năm 2024, trên diễn đàn Apple, nhiều developer dính ITMS-90725 vì máy GitHub Actions của họ chạy macOS quá cũ để dùng Xcode 15.

Khi đã gửi được bản build đúng, hãy test nó trên [TestFlight](https://devoria.fr/vi/blog/testflight-kiem-thu-app-iphone) trước khi submit. Một bản build mới cũng phải qua review lại, với thời gian như mô tả trong bài [thời gian duyệt App Store](https://devoria.fr/vi/blog/thoi-gian-duyet-app-app-store).

## Gửi bản build mà không gặp bất ngờ

ITMS-90725 có thể phòng tránh trong một phút: kiểm tra image và SDK trước mỗi bản build production. Các bước kiểm tra tự động khác cũng cần sự cẩn thận tương tự, như [ITMS-90683](https://devoria.fr/vi/blog/itms-90683-missing-purpose-string-expo) cho các câu giải thích quyền truy cập. Bị reviewer từ chối thì cần bình tĩnh hơn: cách xử lý có trên trang [app bị Apple từ chối](https://devoria.fr/vi/expertise/ung-dung-bi-apple-tu-choi), và các lý do phổ biến nhất nằm trong bài [vì sao Apple từ chối app](https://devoria.fr/vi/blog/apple-tu-choi-app-5-ly-do-thuc-te).

Để kiểm tra hồ sơ trước khi gửi, [Review Kit](https://devoria.fr/vi/kits/app-review) tập hợp checklist của mình và các skill Claude Code đọc lại project của bạn. Nếu việc gửi bị kẹt và bạn muốn có người xem giúp, [đặt một giờ với mình](https://devoria.fr/vi/coaching): chúng ta cùng xem project của bạn qua video call, ngay trên màn hình của bạn. Và nếu bạn đang chuẩn bị ra mắt app đầu tiên, [làm bài chẩn đoán miễn phí](https://devoria.fr/vi/diagnostic): nó sắp xếp lại các bước theo thứ tự và gửi bạn checklist chống bị Apple từ chối của mình.

## Câu hỏi thường gặp

### ITMS-90725 có ngăn mình publish app không?

Sau hạn chót Apple đặt ra thì có: bản build không còn được chấp nhận và bạn phải build bản mới. Trước hạn chót, đó là một cảnh báo: bản build vẫn qua, nhưng bản sau sẽ bị từ chối nếu build theo cùng cách.

### Có phải bỏ hỗ trợ iPhone cũ để build bằng SDK iOS 26 không?

Không. SDK dùng để build và phiên bản iOS tối thiểu là hai thiết lập riêng. Với Expo, phiên bản Expo SDK của bạn quyết định mức tối thiểu này: iOS 15.1 cho SDK 54 và 55, iOS 16.4 cho SDK 56 và 57.

### Có thể sửa ITMS-90725 bằng bản cập nhật từ xa không?

Không. SDK được ghi vào binary lúc build. Bản cập nhật từ xa chỉ thay đổi JavaScript và tài nguyên. Bạn phải build lại bằng Xcode 26 và gửi lại.

### Làm sao biết EAS đang dùng phiên bản Xcode nào?

Mở log build của bạn trên expo.dev, mục "Spin up build environment". Tên image cho biết phiên bản Xcode, ví dụ `macos-tahoe-26.5-xcode-26.6`. Danh sách đầy đủ có trong tài liệu hạ tầng EAS.

### Yêu cầu tháng 4/2027 sẽ thay đổi điều gì?

Theo trang gửi app của Apple, bạn sẽ phải build bằng SDK iOS 27 và nhắm tối thiểu iOS 15. Về phía EAS, Expo dự kiến có image với Xcode 27 cho SDK 58 sắp tới: hãy kiểm tra danh sách image build trước khi build. Đọc lại trang của Apple vào mùa xuân để biết ngày chính xác.


## Dự án của bạn

[Review Kit](https://devoria.fr/vi/kits/app-review): Checklist duyệt App Store của mình, các lần Apple từ chối đã sửa, checklist Google Play và ba skill Claude Code. 1.399.000 ₫.

[iOS & Android Kit](https://devoria.fr/vi/kits/ios): Tạo app iPhone và Android với Claude Code: code khởi đầu từ các app của mình, lộ trình đến tận store và tất cả các kit. 2.799.000 ₫.

[Chẩn đoán: điều gì ngăn bạn có app iPhone](https://devoria.fr/vi/diagnostic): 7 câu hỏi, 60 giây: bạn biết điều gì thật sự cản bạn đăng app iPhone, lộ trình 4 bước và kit phù hợp với bạn.
