# ITMS-90725 SDK version issue：Expo 修复方法

> ITMS-90725 表示 iOS SDK 太旧。Apple 现要求 Xcode 26：升级到 Expo SDK 54 或更高版本，然后重新构建。

原始页面：[ITMS-90725 SDK version issue：Expo 修复方法](https://devoria.fr/zh-hans/blog/itms-90725-sdk-version-issue-expo)
作者：[Mehdi Azizi](https://devoria.fr/zh-hans/mehdi-azizi)
发布：2026-11-04
内容最后修订：2026-11-04


ITMS-90725 是 Apple 对你的构建做的一项自动检查：它表示这个 app 是用比最低要求更旧的 iOS SDK 编译的。截至 2026 年 10 月 15 日，Apple 说明：自 2026 年 4 月 28 日起，提交到 App Store Connect 的 app 必须用 Xcode 26 或更高版本、iOS 26 SDK 编译。**用 Expo 的话，关键全在 EAS 的构建镜像：从 Expo SDK 54 开始，默认选用的镜像就自带 Xcode 26。**

我的几个 app，Solys、TradaZen 和 Nolera，都在 Expo SDK 57 上，eas.json 里没有强制指定镜像：Xcode 版本由 EAS 自己选。下面讲怎么检查你的项目，以及项目比较老时该怎么办。

## ITMS-90725 错误是什么意思？

这条消息的标题是“ITMS-90725: SDK version issue”。它会写出你的 app 用哪个 SDK 编译，然后给出最低要求，以及包含该 SDK 的 Xcode 版本。比如在 Apple 开发者论坛上，2024 年的一条消息开头是这样的：“This app was built with the iOS 16.2 SDK”，后面跟着当时的要求。

SDK 就是 Xcode 编译你的 app 时用到的那一整套 iOS 库。每个 Xcode 版本都自带自己的 SDK：Xcode 26 包含 iOS 26 SDK。**用新 SDK 编译，不等于放弃老 iPhone。** 你的 app 支持的最低 iOS 版本是另一个独立设置，也就是部署目标（deployment target）。

和其他 ITMS 错误一样，这不是审核员拒绝的。检查是自动的，针对的是你上传的二进制文件。

## Apple 现在要求哪个版本的 Xcode？

以下是 Apple [即将生效的要求](https://developer.apple.com/news/upcoming-requirements/)页面和 [App Store 提交](https://developer.apple.com/app-store/submitting/)页面的内容，查阅于 2026 年 10 月 15 日：

| 日期               | 要求                    |
| ------------------ | ----------------------- |
| 2026 年 4 月 28 日 | Xcode 26，iOS 26 SDK    |
| 2026 年 9 月 9 日  | 最低目标 iOS 13         |
| 2027 年 4 月       | iOS 27 SDK，目标 iOS 15 |

触发 ITMS-90725 的是第一条。用 Xcode 16 和 iOS 18 SDK 做的构建已经不再被接受。第二条针对的是最低目标版本，不是 SDK。第三条预告在 2027 年 4 月，查阅时页面上还没有具体日期。Apple 已经在建议用 Xcode 27 编译和测试了。

**这个要求会定期提高，而且总在春天。** Apple 这个页面保留了好几个截止日期的记录：2023 年 4 月 25 日 Xcode 14.1，2024 年 4 月 29 日 Xcode 15，2026 年 4 月 28 日 Xcode 26。每年春天之前，去重新看一遍这个页面，别只信某篇文章，包括这篇。

## 警告还是阻止：怎么区分？

截止日期之前，ITMS-90725 是以警告形式出现的。2024 年在 Apple 论坛上，邮件里写明交付已成功，并建议在下次上传时修复。截止日期之后，Apple 写的是 app “必须”用要求的 SDK 编译才能提交：构建不再被接受。

| 线索       | 警告         | 阻止         |
| ---------- | ------------ | ------------ |
| 上传日期   | 截止日期之前 | 截止日期之后 |
| 上传被接受 | 是           | 否           |
| 你要做的   | 下次修复     | 重新构建     |

**ITMS-90725 警告就是一个倒计时。** 这次构建能通过，但下一次如果还这样编译，过了日期就会被拒。趁你还没有紧急更新要发，先把它修好。

## 在 Expo 项目中修复 ITMS-90725

用 EAS 的话，你的 app 是在 Expo 的 Mac 上编译的，我在[没有 Mac 也能发布 iOS app](https://devoria.fr/zh-hans/blog/publish-ios-app-without-mac-expo-eas) 里讲过。Xcode 版本取决于构建镜像。如果你没在 eas.json 里指定 `image`，EAS 会用 `auto` 别名：根据你的 Expo SDK 版本选择镜像。

以下是每个 SDK 对应的镜像，依据 [EAS 基础设施文档](https://docs.expo.dev/build-reference/infrastructure/)，更新于 2026 年 10 月 8 日：

| Expo SDK | 镜像的 Xcode | ITMS-90725 |
| -------- | ------------ | ---------- |
| 57       | 26.6         | 否         |
| 56       | 26.4         | 否         |
| 55       | 26.2         | 否         |
| 54       | 26.0         | 否         |
| 53       | 16.4         | 是         |
| 52       | 16.2         | 是         |

1. **看看你上一次构建用的镜像。** 在 expo.dev 的构建页面上，日志里的“Spin up build environment”部分会显示镜像名称和 Xcode 版本。
2. **如果你在 SDK 54 或更高版本，检查有没有强制指定镜像。** 只要有一行 `image` 指向 Xcode 16，比如 `macos-sequoia-15.6-xcode-16.4`，就足以引发这个错误。Expo 文档把它列为 SDK 54 中不想用 Xcode 26 的人可选的镜像：自 2026 年 4 月 28 日起，这个选择会导致被拒。删掉这一行：EAS 就会回到默认镜像。
3. **如果你在 SDK 53 或更低版本，升级 SDK。** 这是 Expo 在 [2026 年 4 月 27 日的公告](https://expo.dev/blog/app-store-connect-minimum-sdk-26)里的建议：至少升到 SDK 54。
4. **重新构建并重新上传。** SDK 是固化在二进制文件里的：远程更新改变不了它。

### 老 SDK 的临时应急方案

Expo 同一篇公告还给了一个选项，适合暂时没法升级的情况：在 eas.json 的 production 配置里强制指定一个 Xcode 26 镜像。

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

Expo 提醒：并不是所有 SDK 版本都兼容 Xcode 26，结果也取决于你用的库。**把它当成缓兵之计，而不是修复。** 如果编译失败，唯一的出路还是升级 SDK。

### 升级 SDK，一次升一个版本

[Expo 升级指南](https://docs.expo.dev/workflow/upgrading-expo-sdk-walkthrough/)建议一次只升一个版本，这样每一步都能发现哪里坏了。从 SDK 53 升到 SDK 54：

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

如果你的 `ios` 文件夹是 Expo 生成的，就把它删掉：下次构建时会重新生成。然后先在你的 iPhone 上测试 app，再继续升下一个版本。

瞄准最新 SDK 之前，有一点要知道。根据 [Expo 版本表](https://docs.expo.dev/versions/latest/)，SDK 54 和 55 支持 iOS 15.1 及以上，SDK 56 和 57 只支持 iOS 16.4 及以上。**所以升到 SDK 56，就会放弃还停留在 iOS 15 的 iPhone。** 要解决 ITMS-90725，SDK 54 就够了。

## 上传前检查构建的 SDK

Xcode 会把所用的 SDK 和 Xcode 版本写进每个构建的 Info.plist。从 expo.dev 的构建页面下载 IPA，然后在你的 Mac 上运行：

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

对于要上 App Store 的构建，第一个值必须以 `iphoneos26` 开头。第二个值是 Xcode 版本的编码：我用 Xcode 26.2 为模拟器做的一个 Nolera 构建，得到的是 `2620`。如果你看到 `iphoneos18`，或者以 `16` 开头的值，这个构建就会被拒。

如果你在自己的 Mac 上编译，算数的是你本机的 Xcode，不是 EAS 的镜像。`xcodebuild -version` 会显示当前启用的版本。持续集成也是同样的道理：Xcode 版本取决于所选的机器。2024 年在 Apple 论坛上，就有开发者因为 GitHub Actions 机器的 macOS 太旧、装不了 Xcode 15 而收到 ITMS-90725。

正确的构建上传之后，提交之前先在 [TestFlight](https://devoria.fr/zh-hans/blog/testflight-guide-test-iphone-app) 里测试。新构建也要重新走审核，时间见 [App Store 审核需要多久](https://devoria.fr/zh-hans/blog/app-store-review-time-how-long)。

## 上传构建，不再有意外

ITMS-90725 一分钟就能预防：每次生产构建前，检查镜像和 SDK。其他自动检查也需要同样的严谨，比如权限说明文字的 [ITMS-90683](https://devoria.fr/zh-hans/blog/itms-90683-missing-purpose-string-expo)。审核员的拒绝则需要更冷静地处理：处理步骤在 [app 被 Apple 拒绝](https://devoria.fr/zh-hans/expertise/app-rejected-by-apple)页面，最常见的原因在[Apple 为什么拒绝 app](https://devoria.fr/zh-hans/blog/apple-app-rejection-reasons-real-cases)。

想在上传前检查你的材料，[Review Kit](https://devoria.fr/zh-hans/kits/app-review) 汇集了我的检查清单，以及会审阅你项目的 Claude Code skills。如果上传卡住了，想要真人帮你看看，[和我预约一小时](https://devoria.fr/zh-hans/coaching)：我们视频连线，在你的屏幕上一起过你的项目。如果你在准备第一次发布，[做一下免费诊断](https://devoria.fr/zh-hans/diagnostic)：它会把步骤理顺，并发给你我的 Apple 防拒检查清单。

## 常见问题

### ITMS-90725 会阻止我发布 app 吗？

过了 Apple 定的截止日期，会：构建不再被接受，必须重新编译一个。截止日期之前，它只是警告：这次构建能通过，但下一次如果还这样编译就会被拒。

### 用 iOS 26 SDK 编译，必须放弃老 iPhone 吗？

不用。编译用的 SDK 和最低 iOS 版本是两个独立设置。用 Expo 的话，这个最低版本由你的 Expo SDK 版本决定：SDK 54 和 55 是 iOS 15.1，SDK 56 和 57 是 iOS 16.4。

### 能用远程更新修复 ITMS-90725 吗？

不能。SDK 在编译时就写进了二进制文件。远程更新只改变 JavaScript 和资源文件。必须用 Xcode 26 重新构建并重新上传。

### 怎么知道 EAS 用的是哪个版本的 Xcode？

在 expo.dev 打开构建日志，看“Spin up build environment”部分。镜像名称会标明 Xcode 版本，比如 `macos-tahoe-26.5-xcode-26.6`。完整列表在 EAS 基础设施文档里。

### 2027 年 4 月的要求会带来什么变化？

根据 Apple 的提交页面，届时必须用 iOS 27 SDK 编译，并且最低目标至少是 iOS 15。EAS 方面，Expo 计划为未来的 SDK 58 提供带 Xcode 27 的镜像：编译前查看构建镜像列表。春天时重新看一遍 Apple 的页面，确认具体日期。


## 你的项目

[Review Kit](https://devoria.fr/zh-hans/kits/app-review)：我的 App Store 审核清单、我被 Apple 拒审后的修正方案、Google Play 审核清单，以及三个 Claude Code skill。¥369。

[iOS & Android Kit](https://devoria.fr/zh-hans/kits/ios)：用 Claude Code 打造你的 iPhone 和 Android 应用：我自己应用的起步代码、上架商店的完整流程，以及全部工具包。¥739。

[诊断：你离自己的 iPhone 应用还差什么](https://devoria.fr/zh-hans/diagnostic)：7 个问题，60 秒：看清真正阻碍你发布 iPhone 应用的原因，拿到你的 4 步路线和适合你的套件。
