自己动手
$109 每个平台,一次性付费
WebViewGold 许可证:一个现成的 Xcode 或 Android Studio 项目。粘贴您的 URL,设置名称和图标,开启所需功能,构建并提交。永久免费更新。
在主页查看方案App Store Connect 错误
ITMS-90683 会在上传后不久通过邮件发来:您的二进制文件引用了相机、位置或通讯录等受保护的资源,而 Info.plist 中没有一句话解释原因。添加邮件点名的键,写上一句如实的说明,然后上传新的构建版本。真正值得用心的是这句话本身,因为 App Review 也会读它。
每个平台一次性 $109 起,或由我们的团队全程代劳,$698 起。
邮件会点名一个键,例如 NSCameraUsageDescription 或 NSLocationWhenInUseUsageDescription,以及缺少该键的 bundle。Apple 的措辞还指出,外部库和 SDK 可能会引用这些 API,即使您的应用可能并不使用它们,也必须提供用途说明。请把它当作阻断性问题:补上键,提高构建号,重新上传。
您的 Web 应用通过 <input type="file" capture> 请求相机,通过 navigator.geolocation 请求位置,通过 getUserMedia 请求麦克风。在 WebViewGold 应用中,这些请求都经由 WebKit 和原生外壳处理,iOS 会使用应用 Info.plist 中的用途说明来显示权限对话框。没有这句说明,iOS 就无法显示对话框,转而终止应用,而 Apple 的上传检查要防止的正是这种情况。
在 WebViewGold 项目中,最常见的触发原因是准则 2.5.1所鼓励的清理:您删除了未使用功能的用途说明,而其中一条属于仍被编译进二进制文件的代码。二进制文件引用了什么,以邮件为准,所以这个键要加回去,并配上一句准确的说明。
Xcode 在 Info.plist 编辑器中显示的是可读名称;邮件中使用的是原始键名。
| 邮件中的原始键名 | Xcode 中显示为 | 您的应用在以下情况需要它…… |
|---|---|---|
NSCameraUsageDescription | Privacy - Camera Usage Description | 为上传而拍照或录像,使用 qrcode:// 或 barcodescanner://、文档扫描(kVisionKitEnable)、手电筒 API,或在 Web 应用中使用摄像头视频流。参见二维码扫描器文档。 |
NSPhotoLibraryAddUsageDescription | Privacy - Photo Library Additions Usage Description | 使用 savethisimage://?url= 保存图片,或使用 takescreenshot:// 保存截图(文件下载器文档)。 |
NSPhotoLibraryUsageDescription | Privacy - Photo Library Usage Description | 从照片图库读取内容,例如用于图片上传,或者邮件要求提供它时。 |
NSMicrophoneUsageDescription | Privacy - Microphone Usage Description | 录制音频:语音笔记、AI 聊天中的语音输入,或带声音的视频。 |
NSLocationWhenInUseUsageDescription | Privacy - Location When In Use Usage Description | 调用 HTML5 地理定位 API(仅限 HTTPS,参见地理定位文档)。 |
NSLocationAlwaysAndWhenInUseUsageDescription | Privacy - Location Always and When In Use Usage Description | 将 backgroundlocation 设为 true,以便在后台获取位置。 |
NSContactsUsageDescription | Privacy - Contacts Usage Description | 使用 requestcontactpermission:// 和 readcontacts://。 |
NSFaceIDUsageDescription | Privacy - Face ID Usage Description | 使用 enableBioMetricAuth 或 bioauth://(生物识别文档)。 |
NFCReaderUsageDescription | Privacy - NFC Scan Usage Description | 使用 NFC 插件(readnfc://、writenfc://)。 |
NSHealthShareUsageDescription 和 NSHealthUpdateUsageDescription | Privacy - Health Share / Health Update Usage Description | 使用 HealthKit 插件(readhealthkit://、writehealthkit://)。根据HealthKit 文档,这两个键都是必需的。 |
NSUserTrackingUsageDescription | Privacy - Tracking Usage Description | 始终需要。WebViewGold 文档指出此键为必需项,删除它会导致应用崩溃。 |
Apple 的用途说明指南要求用一个主动语态的完整句子,写明功能以及数据会被如何使用。不要营销话术,也不要只是复述资源名称。
| 资源 | 会被质疑 | 能通过 |
|---|---|---|
| 相机 | 此应用需要访问相机。 | 扫描会员卡上的二维码,在前台办理签到。 |
| 位置 | 用于使用位置。 | 显示离您最近的攀岩馆,以及步行到每一家所需的时间。 |
| 照片添加 | 保存照片。 | 将您的活动门票保存到“照片”,这样在入口处没有网络也能出示。 |
| 麦克风 | 应用需要麦克风。 | 录制您的语音笔记,并将其转换为日记条目中的文字。 |
| Face ID | 使用 Face ID。 | 用 Face ID 代替密码解锁您的预算。 |
| 通讯录 | 访问您的通讯录以获得更好的体验。 | 让您从通讯录中挑选好友,邀请他们加入共享清单。只有您选择的联系人会被发送到我们的服务器。(第二句只有在属实时才写。) |

出色的工作!无需任何编码就能轻松完成。简单快捷!创作者也提供了大力帮助!
bundle 可能是您的主应用,也可能是某个扩展 target(推送服务扩展、小组件、共享扩展、App Clip)。每个 target 都有自己的 Info.plist,键必须放在邮件点名的那一个里。
打开该 Info.plist,将鼠标悬停在某一行上,点击加号,从列表中选择对应的 “Privacy - ...” 条目,然后粘贴您的句子。也可以右键点击该文件,选择 Open As、Source Code,添加下方所示的键和字符串。
如果该功能是您应用的一部分,就描述它。如果不是,有两个如实的选项:添加该键,并用一句准确的话描述那段代码的作用(ITMS 邮件本身就说,即使您的应用可能不使用该 API,也必须提供说明);或者删除引用该 API 的代码,在没有正当理由时,Apple 的用途说明指南推荐这样做。在 WebViewGold 项目中,不要自行删除 Swift 文件或 SDK(文档警告,删除 AdMob SDK 会引发大量依赖错误);如需移除某个模块,请咨询技术支持。用途说明本身永远不会弹出对话框;只有当代码真正请求访问时,iOS 才会显示它。
在 InfoPlist.strings 中为应用支持的每种语言添加相同的键,并把 Info.plist 中的字符串(通常是英文)保留为后备。在设备上逐一测试每种语言。
归档、上传,然后等待处理完成的邮件。如果处理完成后没有收到 ITMS 邮件,该构建版本就会出现在 TestFlight 中。
安装 TestFlight 版本,使用每个会请求权限的功能,检查对话框是否在使用的那一刻弹出,并显示您写的句子。首次启动时毫无来由地弹出对话框,正是审核人员会依据 5.1.1 标记的问题。
以下为示例值;请替换成描述您自己功能的句子。
<key>NSCameraUsageDescription</key>
<string>扫描会员卡上的二维码,在前台办理签到。</string>
<key>NSPhotoLibraryAddUsageDescription</key>
<string>将您的活动门票保存到“照片”,这样在入口处没有网络也能出示。</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>显示离您最近的攀岩馆,以及步行到每一家所需的时间。</string>
<key>NSFaceIDUsageDescription</key>
<string>用 Face ID 代替密码解锁您的预算。</string>我的上传因 ITMS-90683 被拒(邮件见下方)。请在这个 WebViewGold iOS 项目中: 1. 告诉我每个缺失的键属于哪个 target、哪个 Info.plist。 2. 阅读 Config.swift,列出已启用的原生功能(扫描器、文档扫描、地理定位、后台定位、生物识别、通讯录、NFC、HealthKit、文件和图片保存)。 3. 把每个缺失的键添加到正确的 Info.plist 中。值写成一个主动语态的完整句子,写明我的应用中的具体功能,以及数据会被如何使用。不要营销用语,不要写“为了提供更好的体验”这类话。我的应用:[用一段话说明应用做什么、面向谁]。 4. 如果某个键属于未启用的功能,仍然添加它,为那段代码的作用写一句准确的话,并单独列出来,以便我做决定。 5. 如果存在 InfoPlist.strings 文件,为每个键添加这些语言的翻译。 6. 绝不要删除 NSUserTrackingUsageDescription。不要修改任何其他文件。 邮件: [在此粘贴 ITMS-90683 邮件]
因为您二进制文件中的代码(通常是某个 SDK 或模板模块)引用了相机 API。Apple 的检查看的是二进制文件,而不是您开启了哪些功能。请添加该键并写一句准确的说明,或者把相关代码移除。
不会。只有当代码真正请求访问时,对话框才会出现,例如用户点击您的扫描按钮时。未使用功能的说明永远不会显示。
用应用的主要语言填写 Info.plist 中的值,并为应用支持的其他语言添加 InfoPlist.strings 文件。对于您没有翻译的每种语言,Info.plist 中的值都是后备。
有可能。“此应用需要您的位置”这样的句子,是典型的准则 5.1.1 问题。请用一个具体的句子写明功能和它带来的好处。
需要新的构建版本。Info.plist 是应用 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 天内提出申请。