跳至内容
WebViewGold 从 Vibe Coding 到 App Store
中文
获取 WebViewGold

App Store 审核被拒

准则 2.5.2(自包含应用):为什么您的 Web 应用没问题,以及 AI 生成的代码在哪里越界

准则 2.5.2 禁止应用下载或运行会在审核后改变应用功能的代码。在 WKWebView 中加载的 Web 应用并不是 Apple 针对的对象,所以普通的 WebViewGold 应用是安全的。麻烦始于您的应用运行了它本身并未附带的代码:AI 生成的迷你应用、用户插件或热更新 SDK。

每个平台一次性 $109 起,或由我们的团队全程代劳,$698 起。

  • 审核通过保证 – 否则 14 天内退款
  • 无需编程
  • 一次性付费,免费更新
  • 7×24 小时人工支持
  • 2014 年起德国出品 · ISO 27001

2.5.2 的规定及其背后的协议

准则 2.5.2 要求应用在自身的 bundle 内自包含。应用不得读写自身容器之外的数据,也不得下载、安装或执行会引入或改变功能的代码,无论改变的是它自己的功能还是其他应用的功能。只有一个范围很窄的例外:教授编程的教育类应用可以让学生下载并运行代码,前提是这些代码不作他用,并且用户可以完整查看和编辑源代码。

这条准则以 Apple Developer Program 许可协议为后盾,Apple 在此类案例中引用过其中关于下载的解释型代码的规定(近期版本中为第 3.3.1(B) 节)。概括来说,下载的解释型代码只有在不改变应用主要用途、不为其他代码或应用建立商店、并且不绕过签名、沙盒或其他安全机制的情况下才可以接受。确切措辞请在您的开发者账号中查阅当前版本的协议。

为什么 WKWebView 中的 Web 应用能通过

准则 2.5.6 要求浏览网页的应用使用 WebKit,而 WebViewGold 正是如此:您的 Web 应用在 Apple 自家的引擎 WKWebView 中运行,处在应用的沙盒之内。审核通过后更新网站,是所有基于 Web 的应用的工作方式,也是 WebViewGold 应用自 2014 年以来一直在做的事。

Apple 关心的是用途,而不是文件从哪里来。一个习惯追踪应用在网站上新增了一张图表,它依然是习惯追踪应用。而一个在审核通过后通过远程开关变成赌场的习惯追踪应用,无论这个变化是用什么技术实现的,都违反了 2.5.2 以及 2.3.1 中关于隐藏功能的规定。如果某次 Web 更新改变了应用的本质,请把它作为 App Store 更新提交,并附上如实的审核备注;关于Web 更新与原生更新的指南说明了哪些改动需要新的构建版本。

拒审消息通常怎么说

这条备注通常表示,应用、扩展或链接的框架似乎包含可在审核后改变应用行为或功能的代码,或者应用会下载或执行代码。有时它会点名您项目中的某个框架;有时它描述的是审核人员用过的某项功能,例如应用允许用户创建并运行应用,或者会加载可执行的插件。审核人员会要求您移除这项能力后重新提交。

出色的工作!无需任何编码就能轻松完成。简单快捷!创作者也提供了大力帮助!

卢卡斯·杜波依斯(Lucas Dubois) · CodeCanyon

界线在哪里

您的应用做什么结论原因
在 WKWebView 中从您的域名加载 Web 应用,由您部署更新没问题WebKit 中的 Web 内容,用途与审核时相同
把 Web 应用打包在 local-www 中(uselocalhtmlfolder),或者通过 zipfiledownloadfromserver 保留离线副本没问题这是您自己的应用,由 WebKit 渲染;与线上网站同理
AI 返回由您的代码渲染的文本、图片或结构化数据在 2.5.2 下没问题是内容而不是代码;适用准则 1.2的内容审核规则
AI 或用户生成在您的应用内运行的 HTML/JS 迷你应用高风险在您的应用中运行的新软件:至少适用准则 4.7的各项义务,而且 2026 年已有应用构建工具因此被拒
用户从目录中安装的插件或扩展仅限在 4.7 范围内提供索引、内容审核、数字商品使用应用内购买、不开放原生 API
在运行时修补应用的原生框架或脚本(热更新 SDK)被拒典型的 2.5.2 案例;Apple 多年前就曾就此类框架警告过开发者
审核通过后开启另一个应用的远程开关被拒,并有下架风险隐藏功能(2.3.1)以及用途改变
学生运行自己所写代码的编程课程可能可以教育类例外:代码可完整查看和编辑,并且不作他用

遇到 2.5.2 拒审时的修复步骤

  1. 弄清审核人员看到了什么

    在 TestFlight 版本上重现备注中提到的功能。如果备注点名了某个框架,就在 Xcode 项目中搜索它(Podfile、Package Dependencies)。Cursor 或 Claude Code 添加到 WebViewGold 项目中的原生代码是首要怀疑对象;项目自带的 SDK(OneSignal、Firebase、AdMob、RevenueCat)被广泛使用,并不是 2.5.2 针对的对象。

  2. 移除运行时修补和远程原生代码

    删除任何下载脚本来改变原生行为、在可访问原生 API 的环境中执行下载代码,或者通过远程配置切换功能的 SDK。远程配置可以继续用于文案、内容以及现有功能的 A/B 测试。

  3. 把代码执行移出设备

    如果您的产品会生成或运行代码,请在服务器上运行,然后展示结果:输出、渲染后的图片、测试报告或导出文件。您可以把预览域名加入 safariwhitelist,让实时预览在 Safari 中打开(URL 处理文档)。据报道,2026 年至少有一款应用构建工具仅靠跳转浏览器还不够,所以请把它当作降低风险的手段,而不是通过的保证。

  4. 原生桥接只留给您自己的代码

    WebViewGold 的 URL scheme(推送、扫描器、通讯录、NFC 等)是由 WebView 内的页面跳转触发的。如果用户或 AI 生成的代码在您的主文档中运行,它就能像您自己的代码一样触发这些功能。请在独立源(origin)上的沙盒 iframe 中渲染生成的 HTML,从生成的输出中剔除自定义 scheme 链接,并在构建版本上测试生成的内容无法打开任何原生功能。

  5. 在审核备注中描述架构

    一段话即可:应用在 WKWebView 中显示您域名下的 Web 应用;不下载任何原生代码;生成的内容是由您自己的代码渲染的数据;所有代码执行都在您的服务器上进行。准则 2.3.1 本来就要求对新功能给出具体说明,审核备注模板为您提供了现成的结构。

  6. 如果二进制文件有改动,上传新的构建版本

    移除 SDK 或原生功能需要一个构建号更高的新构建版本。如果只改了 Web 应用,部署后在 TestFlight 版本上验证,然后在 Resolution Center 回复即可。

显示生成的 HTML,但不在应用中运行它

如果您的应用会显示模型或用户生成的 HTML(格式化回答、报告、图表),请把它隔离在主页面之外。空的 sandbox 属性会阻止脚本、表单和页面跳转;独立的源则让它接触不到您的会话。

xml
<!-- 主应用页面:绝不要用 innerHTML 或 dangerouslySetInnerHTML 注入生成的 HTML -->
<iframe
  src="https://render.yourapp-content.com/view?id=abc123"
  sandbox=""
  referrerpolicy="no-referrer"
  style="width:100%;height:70vh;border:0"></iframe>

<!-- sandbox="" = 不运行脚本、不提交表单、不进行顶层跳转。
     添加 allow-scripts 就意味着您在运行生成的代码:请先规划好 4.7 的义务和 2.5.2 的要求。
     在渲染域名上,还要从输出中移除自定义 scheme 链接(registerpush://、qrcode:// 等)。 -->

审计 Web 应用中的代码执行

并非每一处命中都是问题,很多都无害。您要找的是来自模型、用户或远程服务器的文本变成可执行脚本的地方。

bash
# Web 应用执行非自带代码的位置
grep -rnE "eval\(|new Function\(|srcdoc|dangerouslySetInnerHTML|insertAdjacentHTML|document\.write\(" \
  --include=*.{ts,tsx,js,jsx,html,vue,svelte} \
  --exclude-dir={node_modules,dist,build,.next} .

Resolution Center 回复模板

先解释架构,再说明改动。精确的描述往往能得到审核人员的积极回应。模板保留英文,因为 Apple 审核人员阅读的是英文。

Resolution Center 回复(只保留适用的行)
Hello App Review team,

Thank you for your feedback on [App name] [version] ([build]). We would like to explain how the app works and what we changed.

How the app works:
[App name] displays our web app at [https://yourdomain.com] in WKWebView (WebKit). The app does not download or execute native code, and its purpose is the one described in the submission: [one sentence about what the app does].

What we changed:
- [We removed the SDK [name], which could modify app behavior at runtime.]
- [Users can no longer create and run mini apps inside the app. Generated content is now returned as text and images that our own code displays; code runs only on our servers.]
- [Previews of user projects now open in Safari instead of inside the app.]

Where to verify: [screen or steps]. [New build: [number].]

If any part of the app still raises a concern under Guideline 2.5.2, we would be grateful if you could point us to the specific screen so we can address it directly.

Best regards,
[Name], [email], [phone]

检查清单

  • 没有会下载脚本或在运行时修补应用的 SDK 或原生代码。
  • 远程配置只改变文案、内容和现有功能,绝不改变应用的用途。
  • AI 输出由您自己的代码作为数据渲染;不对模型输出使用 eval 或 new Function。
  • 生成的或用户制作的 HTML 绝不在主文档中运行,也无法触发 WebViewGold 的 URL scheme。
  • 如果您提供插件或迷你应用,它们满足 4.7 的各项义务。
  • 审核备注具体描述了架构和每一项新功能。

常见问题

审核通过后,我可以不经新的审核就更新 Web 应用吗?

可以,只要应用保持审核时的用途和功能。对基于 Web 的应用来说,修复 bug、新增内容以及同一用途内的新页面都很正常。如果用途发生改变,或者新功能需要新的权限或购买项目,就应该通过附带审核备注的 App Store 更新来提交。

我应用里的 AI 聊天机器人算远程代码吗?

不算。聊天机器人发送文本,接收由您的代码显示的文本或图片,这属于内容。准则 4.7 提到了聊天机器人,准则 1.2 则要求对生成的内容提供过滤和举报功能。

WebViewGold 的离线 zip 下载算下载代码吗?

它下载的是您自己 Web 应用的离线副本,在设备没有网络时由 WebKit 渲染。它和线上网站是同一个应用、同一个用途,所以与 URL 同理。不要用它来交付审核时的应用所没有的功能。

我做了一个应用构建工具。它能上架 App Store 吗?

帮助人们构建应用的应用确实存在,但 2026 年审核失败的地方,恰恰是在您自己的应用内运行生成的应用。请在服务器上生成和运行,以文件、导出或网页预览的形式交付结果,并做好接受严格审核的准备。规划这项功能之前,请先查看 2.5.2 和 4.7 的最新措辞。

Cursor 或 Claude Code 添加的原生代码会导致 2.5.2 拒审吗?

会,如果它下载或加载可执行代码、根据远程指令改变应用行为,或者调用私有 API。原生改动请限制在 Config.swift 和有文档的 WebViewGold 选项范围内,让 AI 智能体去改 Web 应用。

让您的应用上架商店的三种方式

结果相同,只是您需要投入的工作量不同。三种方式都附带审核通过保证和 7×24 小时人工支持。

自己动手

$109 每个平台,一次性付费

WebViewGold 许可证:一个现成的 Xcode 或 Android Studio 项目。粘贴您的 URL,设置名称和图标,开启所需功能,构建并提交。永久免费更新。

在主页查看方案

Cloud Builder

$349 每个许可证,一次性附加购买

无需 Mac、Xcode 或 Android Studio:在浏览器中完成配置,我们在云端构建两个应用,并将其交付到 App Store Connect 和 Play Console。

Cloud Builder 如何运作 试用免费演示

Full Service

$698 每个平台 $798

把您的 URL 和图标发给我们。我们的团队在 72 小时内完成配置、构建并交付您的应用,白标,附源码项目。两个平台共 $1,158。

Full Service 详情 服务提供方: WeSetupYourWebViewApp

冬季特惠价格有效期至 2026年12月31日。

准备好发布您的应用了吗?

App Store & Google Play 审核通过保证 – 否则 14 天内退款

想直接交给我们?Full Service:我们在 72 小时内完成配置、构建并交付,每个平台 $698 起。有疑问?通过 7×24 小时在线聊天联系我们。

退款依据我们 FAQ 中列出的条件:应用因非内容原因被 Apple 和/或 Google 拒审,并在购买后 14 天内提出申请。