React Native 的 ITMS-90725 警告如何排查和修复?
ITMS-90725 检查的是上传构建时实际使用的 SDK。电脑上安装了某个版本的 Xcode,不能单凭这一点证明上传包使用了对应的 SDK。Rosetta 2 和 x86_64 模拟器兼容方案本身也不会让真机归档自动改用 iOS 18.2 SDK。
你报告安装的是 Xcode 26.3,警告却显示上传包由 iOS 18.2 SDK 构建。Apple 的发布说明确认,Xcode 26.3 包含 iOS 26.2 SDK,满足警告中的 SDK 最低要求。应先检查实际归档环境和上传产物;仅凭现有信息,还无法确定具体原因。Xcode 26.3 发布说明
警告检查的是什么?
警告中的 SDK 是构建应用时使用的 Apple iOS SDK,也称为 Base SDK。它不同于以下几项:
OmronConnectivityLibrary:项目依赖的第三方库。- Simulator Runtime:运行模拟器系统所需的运行时。
IPHONEOS_DEPLOYMENT_TARGET:应用允许安装的最低 iOS 版本。
SDKROOT 决定构建使用的基础 SDK。提高 Deployment Target 或下载新的模拟器运行时,都不能代替使用新 SDK 重新构建。Apple Build Settings Reference
Apple 明确规定,自 2026 年 4 月 28 日起,上传到 App Store Connect 的 iOS 和 iPadOS 应用必须使用 iOS 26、iPadOS 26 SDK 或更高版本构建,并使用 Xcode 26 或更高版本。这个日期已经过去,之前成功发布的经历不能用来判断下一次提交是否符合要求。Apple SDK 最低要求
Rosetta 和 Omron 库会影响归档吗?
根据你提供的 slice 信息,Omron 库包含真机所需的 ios-arm64,但缺少 Apple Silicon 模拟器所需的 ios-arm64-simulator。真机和模拟器是不同的构建平台,即使都使用 arm64,也不能互相替代。
如果环境支持 Rosetta 模拟器目的地,可以暂时只对模拟器排除 arm64:
EXCLUDED_ARCHS[sdk=iphonesimulator*] = arm64
不要将该设置扩展到 iphoneos,也不要把整个项目的 ARCHS 固定为 x86_64,否则可能破坏真机构建。Apple 建议通过 Rosetta 模拟器目的地处理这种临时兼容需求,并明确不建议通过 Rosetta 启动整个 Xcode 来解决此类架构错误。Apple TN3117
范围仅限模拟器的兼容设置不会直接导致 SDK 版本警告。还需要检查相关脚本是否同时修改了 SDK 路径、构建工具路径或真机构建设置。
第一步:确认实际使用的 Xcode 和 SDK
在执行归档的终端环境中运行:
xcode-select -p
printenv DEVELOPER_DIR
xcodebuild -version
xcodebuild -showsdks
xcrun --sdk iphoneos --show-sdk-version
xcrun --sdk iphoneos --show-sdk-path
重点查看:
- 当前开发者目录是否指向预期的完整 Xcode。
DEVELOPER_DIR是否指向另一份 Xcode;未设置时没有输出是正常的。xcodebuild -version是否与预期一致。iphoneosSDK 版本是否为 26 或更高版本。
如果命令行选中了旧 Xcode,可以切换到正确路径。以下路径仅为示例,应替换成实际安装位置:
sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
如果当前终端设置了过期的 DEVELOPER_DIR,需要修正或取消这一覆盖。也可以在 Xcode 的 Settings > Locations > Command Line Tools 中选择对应版本。命令行工具的选择方式和 DEVELOPER_DIR 覆盖机制见 Apple 命令行工具配置说明。
这些命令只说明当前终端会使用什么工具。如果归档发生在 CI、EAS Build 或另一台机器上,应在实际构建环境中检查。通过 Xcode 界面归档时,还要确认打开项目的是哪一份 Xcode;终端选中的版本不能证明之前的界面归档使用了相同版本。
第二步:检查 Release 的有效构建设置
以使用 CocoaPods 的项目为例,在项目根目录运行以下命令,并替换 workspace 和 scheme 名称:
xcodebuild \
-workspace ios/MyApp.xcworkspace \
-scheme MyApp \
-configuration Release \
-destination 'generic/platform=iOS' \
-showBuildSettings
如果项目不使用 workspace,应改用实际的 -project 参数。
检查输出中的 SDKROOT、SDK_VERSION、ARCHS、EXCLUDED_ARCHS 和 IPHONEOS_DEPLOYMENT_TARGET。如果 Archive 使用自定义配置,应将 Release 替换成 Scheme 的 Archive 动作实际使用的配置。
同时检查项目设置、target 设置、.xcconfig、Podfile 的 post_install 和构建脚本,查找旧 SDK 路径、固定版本的 SDKROOT,以及未限定平台的架构覆盖。在 Xcode 的 Build Settings 中使用 Levels,可以查看设置来源和最终生效值,帮助定位覆盖项。Apple 构建设置配置说明
不要为了满足 SDK 要求就直接把 IPHONEOS_DEPLOYMENT_TARGET 改成 26。最低支持系统版本应根据应用及依赖的兼容范围决定。
第三步:重新归档并检查实际产物
确认工具和配置正确后,重新生成真机归档。例如:
xcodebuild \
-workspace ios/MyApp.xcworkspace \
-scheme MyApp \
-configuration Release \
-destination 'generic/platform=iOS' \
-archivePath "$PWD/build/MyApp.xcarchive" \
archive
示例要求项目已配置好签名,workspace、scheme、配置名称和输出路径都需按实际项目调整。也可以在 Xcode 中选择真机目的地,然后执行 Product > Archive。
对刚生成的归档,可以检查其中主应用的构建信息:
APP_PATH="$PWD/build/MyApp.xcarchive/Products/Applications/MyApp.app"
/usr/libexec/PlistBuddy -c 'Print :DTSDKName' "$APP_PATH/Info.plist"
/usr/libexec/PlistBuddy -c 'Print :DTXcode' "$APP_PATH/Info.plist"
xcrun vtool -show-build "$APP_PATH/MyApp"
将 MyApp.app 和可执行文件名 MyApp 替换成实际名称。DTSDKName 可作为构建来源的线索;Mach-O 构建信息中的 sdk 与 minos 分别对应构建 SDK 和最低系统版本。不要通过手动修改这些元数据来处理警告,应使用正确的 SDK 重新编译。
上传时还要核对 App 版本、build number 和归档时间,确保提交的是这次生成的产物,而不是旧 .xcarchive 或旧 .ipa。如果重新构建后仍出现同样的警告,应保存完整反馈,核对对应构建及包内扩展等可执行产物。不能仅凭本地工具版本认定 Apple 判断有误。
是否需要升级 React Native 或 Omron 库?
仅凭这条警告,无法判断必须升级到哪个 React Native、Expo 或 Omron 版本。对于所述要求,Xcode 26.3 自带的 iOS 26.2 SDK 已经足够;其他依赖是否需要更新,要看它们在该工具链下的实际编译和运行情况。
建议向 Omron 请求包含 ios-arm64-simulator 的 XCFramework,以便恢复 Apple Silicon 模拟器原生测试。收到更新后,再移除临时的模拟器架构排除设置。现有 ios-arm64 slice 能否在新工具链下正常链接和运行,需要通过真机构建及测试确认,不能仅根据 slice 名称保证兼容。
备注:内容仅供参考。
