跳到主要内容

App Store 上传报错 ITMS-90xxx 怎么办?18 个上传错误码速查

App Store 上传报 ITMS-90xxx、ITMS-91xxx 错误,多数靠加大构建号、修正 Info.plist 和图标、补齐隐私清单解决。本文整理 18 个常见错误码的含义、原因和改法,如 ITMS-90189、ITMS-91053。

App Store 上传报错 ITMS-90xxx、ITMS-91xxx,是 Apple 在自动检查构建时发现的问题,邮件或上传工具里会给出错误码和一句说明。多数错误靠三类改动解决:加大版本号或构建号、修正 Info.plist 和图标、补齐隐私清单。先在下面的主表里按错误码找到原因和改法,再到对应小节看细节,改完加构建号重新上传。本文整理 18 个常见错误码,规则以 Apple 官方文档为准,截至 2026 年 10 月。

上传结果是错误还是警告?

上传检查的结果分两种。

  • ERROR:构建被拒收,App Store Connect 里看不到这个构建,必须改完重新上传。
  • WARNING 或邮件里的「问题提醒」:构建已经收下,可以继续测试,但要在下次上传前改好。有些提醒到期后会变成拒收,隐私清单相关的几项就是这样。

同一个错误码在不同时期可能从警告升级为错误,以邮件里的原文为准。

18 个 ITMS 错误码速查表

错误码 含义 最常见的原因 改法
ITMS-90189 重复的构建(Redundant Binary Upload) 同一版本号下构建号已上传过 加大构建号
ITMS-90062 版本号必须高于已上架版本 版本号等于或低于已批准的版本 加大版本号
ITMS-90186 版本序列已关闭(Invalid Pre-Release Train) 这个版本号已经上架,不再接收新构建 加大版本号
ITMS-90060 版本号格式无效 版本号超过三段或带字母 改成 1.2.3 这种格式
ITMS-90717 App Store 图标无效 1024 图标带透明或 alpha 通道 导出不带 alpha 的 PNG
ITMS-90022 缺少必需的图标文件 缺 iPhone 120×120 图标或资源目录没打进包 补齐 AppIcon,确认资源目录在 target 里
ITMS-90713 Info.plist 缺少 CFBundleIconName 图标集名和 Info.plist 不一致 设置 App 图标集名
ITMS-90683 Info.plist 缺少权限用途说明 代码或 SDK 调用了受保护的 API 加对应的 NS…UsageDescription
ITMS-90474 iPad 多任务需要全部方向 支持 iPad 却只开了部分方向 开全四个方向或设 UIRequiresFullScreen
ITMS-90078 缺少推送权限 注册了推送但签名里没有 aps-environment 打开推送能力或移除推送代码
ITMS-91053 缺少必需原因 API 声明 用了 UserDefaults 等 API 没写进隐私清单 在 PrivacyInfo.xcprivacy 声明原因
ITMS-91061 第三方 SDK 缺少隐私清单 依赖的 SDK 版本太旧 升级 SDK 到带隐私清单的版本
ITMS-91056 隐私清单无效 键名、类型或原因码写错 按官方键值修正
ITMS-90725 SDK 版本过旧 用旧版 SDK 构建 用 iOS 26 SDK 重新构建
ITMS-90087 不支持的架构 框架里带模拟器的 x86_64、i386 架构 换成只含真机架构的框架或 XCFramework
ITMS-90338 使用了非公开 API 代码或静态库里有私有符号 改名或升级、移除对应库
ITMS-90034 签名缺失或无效 没用 Apple 提交证书签名 用 Apple Distribution 证书重新构建
ITMS-90035 签名无效(Invalid Signature) 用了开发或 Ad Hoc 证书、包被改过 用 Distribution 证书和 App Store 描述文件重签

版本号和构建号报错怎么改?

App Store Connect 用两个号区分构建。版本号 CFBundleShortVersionString 是商店里显示的 1.0、1.2.1。构建号 CFBundleVersion 区分同一版本下的多次上传。

ITMS-90189 重复的构建

含义:这个版本号下,同样构建号的包已经传过了。即使上次上传失败或构建被删除,这个号也不能再用。

改法:只加构建号,例如从 5 改成 6,重新构建上传。想每次自动递增,见自动递增构建号。

ITMS-90062 版本号必须更高

含义:版本号要高于上一个已批准的版本。同一个版本号可以上传多个构建,但上架过的版本号不能再用。

改法:把版本号加大,例如 1.2 上架后下一版用 1.2.1 或 1.3。

ITMS-90186 版本序列已关闭

含义:这个版本号的序列不再接收新构建,常见于该版本已经上架。

改法:和 90062 一样,换一个更高的版本号。只加构建号解决不了。

ITMS-90060 版本号格式无效

含义:版本号只能是用点分隔的最多三段非负整数。2.6.0.0、3.4.2b6 都不合格,1.0、4.2.1 合格。

改法:改成三段以内的纯数字。测试标记写进构建号或分支名,不要写进版本号。

在 KXBuild 里改

在 Windows、Linux 上用 KXBuild 时,在工程设置编辑器的 General 页修改 Marketing Version(版本号)和 Current Project Version(构建号)。临时覆盖可以在构建命令里加参数。

1kxbuild build .\MyApp.xcodeproj -c Release --export app-store -D MARKETING_VERSION=1.2.1 -D CURRENT_PROJECT_VERSION=6

图标相关的上传报错怎么改?

ITMS-90717 App Store 图标无效

含义:资源目录里的 1024×1024 App Store 图标不能透明,也不能带 alpha 通道。

原因:最常见的是自己画了圆角,四角变成透明。还有导出工具默认带 alpha,即使画面看起来不透明。

改法:铺一层纯色背景,导出时取消透明度或 alpha 选项。系统会自动裁圆角,原图保持直角。

ITMS-90022 缺少必需的图标

含义:包里找不到 iPhone 用的 120×120 图标,通常意味着 AppIcon 不全,或资源目录没有编进包。

改法:确认 AppIcon 有 1024 图(单尺寸格式)或各尺寸齐全,确认 Assets.xcassets 属于 App 的 target。只做 iPhone 版的,删掉 Info.plist 里空的 iPad 图标配置。

ITMS-90713 缺少 CFBundleIconName

含义:构建出的 Info.plist 里没有 CFBundleIconName。用资源目录提供图标时,这个键要等于图标集名,默认是 AppIcon。

改法:确认工程的 App 图标集名和资源目录里的图标集名称一致,构建时会写入这个键。

在 KXBuild 里改

打开资源目录编辑器,右键 AppIcon 选「用一张 1024×1024 图生成全部尺寸…」。带 alpha 的 App Store 图标、缺少 1024 图标,编辑器都会在「问题」面板标出。上传前点标题栏「KXBuild: 编译检查资源目录」按真实编译规则再查一遍。图标集名在工程设置编辑器 General 页的「App 图标集名」里改。用 Xcode 26 的 .icon 图标文档的,见图标文档编辑器。

Info.plist 和权限报错怎么改?

ITMS-90683 缺少权限用途说明

含义:二进制里调用了需要用户授权的 API(相机、相册、定位、麦克风、通讯录、蓝牙等),Info.plist 里却没有对应的 NS…UsageDescription。邮件会写出缺少的键名。

原因:除了自己的代码,第三方 SDK 引用了这些 API 也会触发,即使你从不调用。扩展(例如小组件、App Clip)有自己的 Info.plist,主 App 的键不覆盖它们。

改法:按邮件给出的键名补上用途说明,写清具体用途。各键写法见 Info.plist 权限用途说明。用了本地化的,基础 Info.plist 里也要保留一份。

ITMS-90474 iPad 多任务需要全部方向

含义:App 支持 iPad 多任务,但没有开启全部四个方向。

改法:二选一。在 iPad 方向里开启竖屏、倒置竖屏、横屏左、横屏右四项;或在 Info.plist 里加 Boolean 类型的 UIRequiresFullScreen 设为 YES,退出多任务。只做 iPhone 版的,把设备家族改成只有 iPhone。

ITMS-90078 缺少推送权限

含义:App 注册了远程推送,但签名里没有 aps-environment 权限。

改法:要用推送的,在开发者网站给 App ID 打开 Push Notifications,重新生成描述文件,并在 entitlements 文件里加上 aps-environment,见给 iOS App 加推送通知。不用推送的,找出注册推送的第三方 SDK,升级或移除。

在 KXBuild 里改

工程里有 Info.plist 文件的,双击用 plist 编辑器打开,添加 String 类型的用途说明键。自动生成 Info.plist 的工程,在 App 源码文件夹里新建一个 Info.plist 写入这些键,再在工程设置编辑器 General 页的「Info.plist 文件」填上它的路径,构建时会和自动生成的键合并。iPad 方向、设备家族、Entitlements 文件也都在 General 页。

隐私清单报 ITMS-91xxx 怎么办?

ITMS-91053 缺少必需原因 API 声明

含义:App 或其中的 SDK 用了「必需原因 API」,却没有在隐私清单的 NSPrivacyAccessedAPITypes 里声明原因。邮件会列出 API 类别,例如 NSPrivacyAccessedAPICategoryUserDefaults。

规则:Apple 官方文档写明,自 2024 年 5 月 1 日起,没有在隐私清单里说明必需原因 API 用途的 App 不被 App Store Connect 接受。

改法:在 App 的 PrivacyInfo.xcprivacy 里为每个类别写上原因码,例如 UserDefaults 用 CA92.1。文件结构和全部常用原因码见 iOS 隐私清单 PrivacyInfo.xcprivacy 怎么写。邮件列出的类别来自第三方 SDK 时,升级 SDK,而不是写进你自己的清单。

ITMS-91061 第三方 SDK 缺少隐私清单

含义:App 里包含 Apple 常用第三方 SDK 名单上的 SDK,但这个 SDK 没有自带隐私清单。名单里有 Alamofire、Firebase 系列、Flutter、hermes、Kingfisher、SDWebImage、Lottie 以及一批 Flutter 插件等。

规则:Apple 文档写明,自 2025 年 2 月 12 日起,提交审核的 App 必须为这些常用 SDK 包含有效的隐私清单。新 App 包含名单上的 SDK,或更新版本新加入名单上的 SDK 时适用;以二进制形式引入的还要求签名。

改法:按邮件给出的 SDK 名和路径,把 CocoaPods、Swift Package、Flutter 插件升级到带 PrivacyInfo.xcprivacy 的版本。

ITMS-91056 隐私清单无效

含义:包里某个 PrivacyInfo.xcprivacy 含有不认识的键或值,或格式不是合法的 plist。邮件会给出文件路径。Apple 的 TN3181 写明,自 2024 年 11 月 12 日起,提交审核的 App 必须包含有效的隐私清单。

常见原因:类别名或原因码拼错;NSPrivacyTracking 为 true 但跟踪域名数组为空;NSPrivacyTracking 为 false 却写了跟踪域名;数组里留了空项。

改法:路径在你的 App 里的,按官方键值修正。路径在某个 SDK 里的,升级这个 SDK。

SDK 版本与二进制架构报错

ITMS-90725 SDK 版本过旧

含义:构建所用的 SDK 低于 Apple 当前要求的最低版本。

规则:截至 2026 年 10 月,Apple 的 Upcoming requirements 写明,自 2026 年 4 月 28 日起,上传到 App Store Connect 的 App 必须用 Xcode 26 或更高版本、iOS 26 SDK 构建。另外,自 2026 年 9 月 9 日起,上传的 iOS 和 iPadOS App 最低部署目标要是 iOS 13 或更高。

改法:用 iOS 26 及以上的 SDK 重新构建。SDK 版本决定的是构建用的接口,最低支持的系统版本由部署目标决定,两者可以不同。在 Mac 上用 Xcode 26 及以上构建。在 Windows、Linux 上用 KXBuild 的,按 iOS SDK 页换用 iOS 26 及以上的 SDK,运行 kxbuild doctor 后重新构建。部署目标在工程设置编辑器 General 页的 iOS Deployment Target 里改。

ITMS-90087 不支持的架构

含义:包里的某个框架含有模拟器用的 x86_64 或 i386 架构,App Store 只接受真机架构。

原因:引入了同时含真机和模拟器架构的「胖」框架。

改法:向 SDK 提供方要 XCFramework 格式的版本,或只含 arm64 的真机版本。KXBuild 构建 iOS App 时架构固定为 arm64,这个错误几乎都来自预编译的第三方框架。

ITMS-90338 使用了非公开 API

含义:二进制里出现了与私有 API 同名的符号或选择器,邮件会列出名字。私有 API 可能在你打包进去的静态库里。

改法:自己代码里的方法和私有 API 重名的,换个名字。来自第三方库的,升级或移除这个库。跨平台框架偶尔会在某段时间集中出现误报,确认自己没改动相关代码时,可以先等一两天再重传。

签名无效的上传报错怎么改?

ITMS-90034 签名缺失或无效

含义:包没有用 Apple 提交证书签名。

改法:确认 Release 配置用的是 Apple Distribution 证书和 App Store 类型的描述文件。证书、描述文件过期或不配套的,重新生成。

ITMS-90035 签名无效

含义:签名校验失败,常见于用开发证书或 Ad Hoc 描述文件签了要上架的包,或签名后包内文件被改动。

改法:用 Distribution 证书重新构建,直接上传构建产出的 ipa,不要解压改动后再手工压缩。

在 KXBuild 里改

把 Distribution 证书(.p12)和 App Store 描述文件放进工程的 keychain 目录,做法见证书与签名。构建命令加 --export app-store,不管工程里设的是哪种证书,都用 keychain 目录里的 Distribution 证书和 App Store 描述文件签名。

上传时直接选 build\MyApp.ipa,它已包含 App Store Connect 要求的结构,不要解压改动后再压缩,能避开签名类的 App Store 上传报错,见发布与上架。签名和安装阶段的其他报错见 iOS 签名报错与 ipa 安装失败。

常见问题

ITMS-90189 和 ITMS-90062 有什么区别?

90189 是构建号重复,同一版本号下只加构建号即可。90062 是版本号不够高,要把商店显示的版本号本身加大。

上传成功但收到 ITMS-91053 邮件,还能提交审核吗?

自 2024 年 5 月 1 日起,Apple 规定未声明必需原因 API 的 App 不被接受,以邮件里写的是警告还是拒收为准。最稳妥的做法是补好隐私清单,加构建号重新上传后再提交。

2026 年上传 App Store 最低要用哪个 Xcode 和 SDK?

截至 2026 年 10 月,Apple 要求自 2026 年 4 月 28 日起上传的 App 用 Xcode 26 或更高、iOS 26 SDK 构建。最低部署目标自 2026 年 9 月 9 日起要是 iOS 13 或更高。

ITMS-90717 图标看起来不透明,为什么还报 alpha 通道?

PNG 文件本身带 alpha 通道就会报错,和画面是否透明无关。在作图工具里铺纯色背景,导出时关掉透明度或 alpha 选项再放回 AppIcon。

错误来自第三方 SDK,我自己能修吗?

隐私清单、私有 API、模拟器架构这几类,根本解决办法是升级 SDK 到修好的版本。Apple 也建议联系 SDK 提供方获取带有效隐私清单的新版,不要把 SDK 的隐私行为写进你自己的清单。