ITMS-90725 SDK version issue:用 Expo 修正
作者:Mehdi Azizi
發布於 ,7 分鐘
ITMS-90725 代表 App 用太舊的 iOS SDK 編譯。Apple 自 2026 年 4 月 28 日起要求 Xcode 26,請升到 Expo SDK 54 以上並重新 build。
ITMS-90725 是 Apple 對你的 build 做的自動檢查:它表示這個 App 是用比最低要求還舊的 iOS SDK 編譯的。截至 2026 年 10 月 15 日,Apple 表示自 2026 年 4 月 28 日起,上傳到 App Store Connect 的 App 必須用 Xcode 26 以上版本和 iOS 26 SDK 編譯。用 Expo 的話,關鍵全在 EAS 的 build 映像檔:從 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 的即將實施的要求頁面和 App Store 提交頁面的內容,於 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 做的 build 已經不會被接受。第二條針對的是最低支援版本,不是 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 論壇上的案例中,email 說明這次上傳成功,並建議在下一次上傳時修正。過了期限之後,Apple 寫的是 App「必須」用指定的 SDK 編譯才能上傳:build 就不會被接受了。
| 線索 | 警告 | 封鎖 |
|---|---|---|
| 上傳日期 | 期限之前 | 期限之後 |
| 上傳被接受 | 是 | 否 |
| 你該做的事 | 下次上傳時修正 | 重新 build |
ITMS-90725 警告就是倒數計時。 今天這個 build 能過,但過了期限後,用同樣方式編譯的下一個 build 就會被拒。趁你還沒被緊急更新追著跑的時候把它修好。
在 Expo 專案中修正 ITMS-90725
用 EAS 的話,你的 App 是在 Expo 的 Mac 上編譯的,我在沒有 Mac 也能上架 iOS App 裡有說明。Xcode 版本取決於 build 映像檔。如果你沒有在 eas.json 裡指定 image,EAS 會使用 auto 別名:它會依照你的 Expo SDK 版本選擇映像檔。
以下是根據 EAS 基礎架構文件(2026 年 10 月 8 日更新)整理的各 SDK 對應映像檔:
| Expo SDK | 映像檔的 Xcode | ITMS-90725 |
|---|---|---|
| 57 | 26.6 | 否 |
| 56 | 26.4 | 否 |
| 55 | 26.2 | 否 |
| 54 | 26.0 | 否 |
| 53 | 16.4 | 是 |
| 52 | 16.2 | 是 |
- 查看你上一次 build 用的映像檔。 在 expo.dev 的 build 頁面上,日誌中的「Spin up build environment」區段會顯示映像檔名稱和它的 Xcode 版本。
- 如果你在 SDK 54 以上,找找看有沒有強制指定的映像檔。 只要有一行
image指向 Xcode 16,例如macos-sequoia-15.6-xcode-16.4,就足以造成這個錯誤。Expo 文件把它列為給不想用 Xcode 26 的人使用的 SDK 54 映像檔:自 2026 年 4 月 28 日起,這個選擇會導致被拒。刪掉這一行,EAS 就會回到預設映像檔。 - 如果你在 SDK 53 以下,就升級 SDK。 這是 Expo 在 2026 年 4 月 27 日公告中的建議:至少升到 SDK 54。
- 重新 build 並再次上傳。 SDK 是固定在二進位檔裡的:遠端更新改變不了什麼。
舊 SDK 的應急解法
Expo 同一篇公告也提供了一個選項,給暫時沒辦法升級的人:在 eas.json 的 production profile 裡強制指定 Xcode 26 映像檔。
{
"build": {
"production": {
"ios": {
"image": "macos-sequoia-15.6-xcode-26.2"
}
}
}
}
Expo 有提醒:不是每個 SDK 版本都相容於 Xcode 26,結果也取決於你用的函式庫。把它當成緩刑,而不是修正。 如果 build 在編譯階段失敗,唯一的路還是升級 SDK。
升級 SDK,一次一個版本
Expo 的升級指南建議一次只升一個版本,這樣每一步都能找出哪裡壞掉。從 SDK 53 升到 SDK 54:
npm install expo@^54.0.0
npx expo install --fix
npx expo-doctor
如果你的 ios 資料夾是 Expo 產生的,就把它刪掉:下次 build 時會重新產生。然後先在你的 iPhone 上測試 App,再進行下一個版本的升級。
要衝最新 SDK 之前,有一點要知道。根據 Expo 的版本表,SDK 54 和 55 支援 iOS 15.1 以上,SDK 56 和 57 只支援 iOS 16.4 以上。所以升到 SDK 56,就會排除還停在 iOS 15 的 iPhone。 要解決 ITMS-90725,SDK 54 就夠了。
上傳前檢查 build 的 SDK
Xcode 會把使用的 SDK 和 Xcode 版本寫進每個 build 的 Info.plist。從 expo.dev 的 build 頁面下載 IPA,然後在你的 Mac 上執行:
unzip -q MyApp.ipa -d ipa
plutil -extract DTSDKName raw ipa/Payload/*.app/Info.plist
plutil -extract DTXcode raw ipa/Payload/*.app/Info.plist
如果是要上 App Store 的 build,第一個值必須以 iphoneos26 開頭。第二個值是 Xcode 版本的編碼:我用 Xcode 26.2 為模擬器做的 Nolera build,得到的是 2620。如果你看到 iphoneos18,或是以 16 開頭的值,這個 build 就會被拒。
如果你是在自己的 Mac 上編譯,算數的是你的 Xcode,不是 EAS 的映像檔。xcodebuild -version 會顯示目前使用的版本。CI 也是同樣道理:Xcode 版本取決於你選的機器。2024 年在 Apple 論壇上,有開發者收到 ITMS-90725,就是因為他們的 GitHub Actions 機器跑的 macOS 太舊,裝不了 Xcode 15。
正確的 build 上傳之後,提交審查前先在 TestFlight 裡測試。新的 build 也要重新經過審查,所需時間請看 App Store 審核時間。
上傳 build 不再有意外
ITMS-90725 一分鐘就能預防:每次 production build 前檢查映像檔和 SDK。其他自動檢查也需要同樣的嚴謹,例如權限說明文字的 ITMS-90683。審查員退件則需要多一點思考:處理方式在 App 被 Apple 拒絕頁面,最常見的原因整理在 Apple 為什麼拒絕你的 App。
想在上傳前檢查你的資料,Review Kit 收錄了我的檢查清單,以及會幫你審視專案的 Claude Code skills。如果上傳卡住、你想找人看看,跟我預約一小時:我們透過視訊、在你的螢幕上一起看你的專案。如果你正在準備第一次上架,做免費診斷:它會幫你把步驟排好順序,並寄給你我的防 Apple 退件檢查清單。
常見問題
ITMS-90725 會讓我的 App 無法上架嗎?
過了 Apple 訂的期限,會:build 不再被接受,你必須重新編譯一個。期限之前則是警告:這個 build 能過,但下一個如果用同樣方式編譯就會被拒。
用 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 重新 build 再上傳。
怎麼知道 EAS 用的是哪個 Xcode 版本?
在 expo.dev 打開你的 build 日誌,看「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 的映像檔:編譯前先確認 build 映像檔清單。春天時重看 Apple 的頁面,才能知道確切日期。

