自己动手
$109 每个平台,一次性付费
WebViewGold 许可证:一个现成的 Xcode 或 Android Studio 项目。粘贴您的 URL,设置名称和图标,开启所需功能,构建并提交。永久免费更新。
在主页查看方案App Store Connect 错误
ITMS-91053 不是 App Review 的裁决,而是 App Store Connect 在告诉您:构建版本中的原生代码使用了某个 API,Apple 希望您在隐私清单(PrivacyInfo.xcprivacy)中说明使用理由。修复方法是一个小小的属性列表,填上如实的原因代码,或者换用更新的 SDK 版本;您的 Web 应用完全不需要改动。
每个平台一次性 $109 起,或由我们的团队全程代劳,$698 起。
Apple 维护着一份“需声明原因的 API”(required reason API)清单:这些系统调用对正常的应用功能很有用,但也可能被滥用来识别设备指纹。它们分为五个类别:文件时间戳、系统启动时间、磁盘空间、活动键盘和用户默认设置(user defaults)。任何使用它们的应用或 SDK,都必须在隐私清单中从一组固定的已批准原因里选择,说明为什么使用。
邮件会写明两件事:其代码使用了该 API 的文件(您应用的主可执行文件,或 Frameworks 文件夹中的某个框架),以及 API 类别,写法类似 NSPrivacyAccessedAPICategoryUserDefaults。2024 年初,这类邮件还只是提醒;根据Apple 关于需声明原因 API 的文档,自 2024 年 5 月 1 日起,缺少这些声明的上传已不再被接受。这就是为什么旧论坛帖子说它“只是个警告”,而您收到的却不是。
Web 封装应用触发它的是原生外壳,绝不是您的 JavaScript。每个 iOS 应用都会在 user defaults 中存储设置、缓存文件并计时,推送、广告和分析 SDK 也一样。它通常在这些时候出现:您添加了一个 SDK,您让 Cursor 或 Claude Code 编写了自定义 Swift 代码,或者您用当前版本的 Xcode 重新构建了一个旧项目。
| 代码 | App Store Connect 的意思(转述) | 修复方法 |
|---|---|---|
| ITMS-91053 Missing API declaration | 所指文件中的代码使用了需声明原因的 API,而该 bundle 中没有任何隐私清单为它声明原因。 | 在包含该代码的 bundle 的清单中添加该类别和一个已批准的原因。如果该文件是第三方框架,请改为更新 SDK。 |
| ITMS-91061 Missing privacy manifest | 构建版本中包含 Apple 常用 SDK 列表里的某个 SDK,但它没有自带隐私清单。 | 把该 SDK 更新到附带清单的版本。该列表包括 Firebase 组件、OneSignal 和 Facebook SDK 框架等众多 SDK。 |
| ITMS-91065 Missing signature | 列表中的某个 SDK 以二进制依赖的形式被包含,但缺少供应商的代码签名。 | 使用供应商发布的已签名版本。不要编辑框架内部的文件,那会破坏签名。 |
| ITMS-91056 Invalid privacy manifest | 存在 PrivacyInfo.xcprivacy 文件,但其中的键、值或结构有误。 | 在 Xcode 的属性列表编辑器中打开它,把其中的键与下方示例逐一对照,删除拼写错误或自行编造的原因代码。 |
只选择真正描述代码行为的原因。Apple 的原因列表为每个原因都附加了条件,例如数据绝不离开设备。
| 邮件中的类别 | 已批准的原因(Apple) | WebViewGold 应用的常见选择 |
|---|---|---|
NSPrivacyAccessedAPICategoryUserDefaults | CA92.1 仅本应用读写的数据;1C8F.1 在您的 App Group 内共享;C56D.1 SDK 封装(仅限 SDK);AC6B.1 通过 MDM 下发的托管配置 | CA92.1。只有当应用通过 App Group 与扩展共享设置时(推送服务扩展、小组件、共享扩展),才添加 1C8F.1。 |
NSPrivacyAccessedAPICategoryFileTimestamp | C617.1 应用或 App Group 容器内的文件;DDA9.1 向用户显示的时间戳;3B52.1 用户选择的文件;0A2A.1 SDK 封装(仅限 SDK) | C617.1,用于应用容器内的缓存和下载文件。只有当代码读取用户所选文件的元数据时,才使用 3B52.1。 |
NSPrivacyAccessedAPICategorySystemBootTime | 35F9.1 应用内事件之间的经过时间和计时器;8FFB.1 应用内事件的绝对时间戳;3D61.1 可选的错误报告 | 35F9.1,这是计时器、超时和加载耗时测量的常规情况。 |
NSPrivacyAccessedAPICategoryDiskSpace | E174.1 写入文件前检查空间,且有可见的行为;85F4.1 向用户显示空间;7D9E.1 可选的错误报告;B728.1 健康研究类应用 | 仅当应用确实在保存下载内容前检查可用空间时,才使用 E174.1。如果您说不出原因,请先查清是哪段代码在使用它,再做任何声明。 |
NSPrivacyAccessedAPICategoryActiveKeyboards | 3EC4.1 自定义键盘应用;54BD.1 根据活动键盘调整界面 | 在 WebView 应用中很少见。如果邮件点名的是您自己的 target,请查找 AI 代理添加的自定义 Swift 代码。 |

只要有一个优化良好的Web应用版本,几分钟内您就能拥有一个出色的移动应用。除此之外,客户服务非常友好且乐于助人!我只能说:推荐WebViewGold :-)
在 Xcode 里花二十分钟,然后换一个新的构建号。
如果是您应用的可执行文件(即您的 .app 的名称),声明应放在应用 target 的清单中。如果是类似 Frameworks/SomeSDK.framework 的路径,就必须由该 SDK 在它自己的清单中声明,您的文件无法修复这一点。
更新是免费的。如果您的项目较旧,请下载当前版本,把您的 Config.swift 值、Info.plist 文本、图标和启动画面迁移过去,在手动编辑任何内容之前,先检查错误是否依然存在。较新的版本可能包含较新的 SDK 版本;如果拿不准,请向WebViewGold 技术支持询问您需要哪个版本。
在项目导航器中搜索 PrivacyInfo.xcprivacy。如果应用 target 已经有一个,就在它的基础上扩展;绝不要给同一个 target 添加第二个清单。如果没有,选择 File、New、File from Template,选取 App Privacy,保留名称 PrivacyInfo,并勾选主应用 target。
在 NSPrivacyAccessedAPITypes 下添加一个条目,将 NSPrivacyAccessedAPIType 设为邮件中的类别,并在 NSPrivacyAccessedAPITypeReasons 中填入对您的应用属实的原因代码。下方示例展示了具体结构。
Apple 要求:凡是可执行文件使用了该 API 的 bundle,都要有自己的清单。如果邮件点名的是某个扩展(通知服务扩展、小组件、共享扩展或 App Clip),请为该 target 单独添加一份带有对应原因的清单。
归档后,在 Organizer 中按住 Control 点按该归档,选择 Generate Privacy Report:Xcode 会把所有清单合并成一个 PDF,您可以在其中看到自己列出的类别。提高构建号,上传,等收到处理完成的邮件后再提交审核。
以两个常见类别为例。只使用邮件中列出的类别和与您的应用相符的原因;文件中已有的其他键请保留。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<!-- NSPrivacyTracking 或 NSPrivacyCollectedDataTypes 等已有的键保持不变 -->
<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>CA92.1</string>
</array>
</dict>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>C617.1</string>
</array>
</dict>
</array>
</dict>
</plist>NSPrivacyTracking 与 App Tracking Transparency 属于同一套隐私说明。如果您展示个性化的 AdMob 广告,请在设置它之前阅读带广告 Web 应用的 ATT。在指定位置粘贴完整的 ITMS 邮件。构建之前请先审查 diff;代理绝不能编造原因代码。更多代理设置:用 Claude Code 配置 WebViewGold 项目。
App Store Connect 用下面这封邮件拒绝了我的上传。请在这个 WebViewGold iOS 项目中修复它。 1. 对每一条 ITMS-91053,告诉我它点名的是哪个文件,以及该文件是我的应用 target、我的某个扩展,还是第三方框架。 2. 对我自己的 target:找到现有的 PrivacyInfo.xcprivacy(每个 target 不要再创建第二个)。如果没有,就创建一个,并且只加入该 target。 3. 为邮件中点名的每个类别添加一个 NSPrivacyAccessedAPITypes 字典。只能从以下列表中选择原因,并用一句话解释每个选择:UserDefaults CA92.1、1C8F.1(仅在使用 App Group 时);FileTimestamp C617.1、DDA9.1、3B52.1;SystemBootTime 35F9.1、8FFB.1、3D61.1;DiskSpace E174.1、85F4.1、7D9E.1;ActiveKeyboards 3EC4.1、54BD.1。如果找不到能证明某个原因成立的代码,请停下来问我。 4. 对第三方框架:不要动它们。列出该 SDK 及其在本项目中的版本,并告诉我哪次更新会包含它自己的隐私清单。 5. 不要修改 Config.swift、Info.plist 中的用途说明或任何其他文件。 邮件: [在此粘贴完整的 ITMS 邮件]
不是。它是构建版本处理阶段的自动检查,发生在任何人查看应用之前。该构建版本不会被接受,所以 App Review 根本看不到它;修复后的构建版本顺利上传后,您照常提交即可。
不能。每个原因都是对您的代码如何使用该 API 及相关数据的陈述,而且有些原因仅限 SDK 或健康研究等特定类型的应用使用。只声明属实的内容,不多不少。
不需要。您的 Web 应用运行在 Apple 的系统框架 WebKit 中。清单涵盖的是您二进制文件中的原生代码,以及随之一起发布的 SDK。
在这种方式下,您不需要编辑 Xcode 项目。请把邮件全文发给 WebViewGold 技术支持,以便检查构建配置,不要改动您的 Web 应用;清单是原生构建的一部分。
需要。清单位于应用 bundle 内部,所以只有通过新的上传才能送达 Apple。提高构建号,重新归档并上传。
结果相同,只是您需要投入的工作量不同。三种方式都附带审核通过保证和 7×24 小时人工支持。
$109 每个平台,一次性付费
WebViewGold 许可证:一个现成的 Xcode 或 Android Studio 项目。粘贴您的 URL,设置名称和图标,开启所需功能,构建并提交。永久免费更新。
在主页查看方案$349 每个许可证,一次性附加购买
无需 Mac、Xcode 或 Android Studio:在浏览器中完成配置,我们在云端构建两个应用,并将其交付到 App Store Connect 和 Play Console。
Cloud Builder 如何运作 试用免费演示$698 每个平台 $798
把您的 URL 和图标发给我们。我们的团队在 72 小时内完成配置、构建并交付您的应用,白标,附源码项目。两个平台共 $1,158。
Full Service 详情 服务提供方:冬季特惠价格有效期至 2026年12月31日。
App Store & Google Play 审核通过保证 – 否则 14 天内退款
想直接交给我们?Full Service:我们在 72 小时内完成配置、构建并交付,每个平台 $698 起。有疑问?通过 7×24 小时在线聊天联系我们。
退款依据我们 FAQ 中列出的条件:应用因非内容原因被 Apple 和/或 Google 拒审,并在购买后 14 天内提出申请。