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

ChatGPT & Codex

GitHub 上的 Codex 代码审查:在发布前发现上架阻碍、泄露的密钥和损坏的移动端布局

对 WebViewGold 应用来说,每次合并到 main 都是一次发布:原生应用加载的是您的生产 URL,所以一次糟糕的部署几分钟内就会到达 App Store 和 Google Play 用户手中。Codex 可以在每个 pull request 合并之前在 GitHub 上审查它。在 AGENTS.md 中教会它您的商店规则,它标记的就不只是 bug,还有会导致拒审和泄露的问题。

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

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

为什么封装应用的每个 pull request 都需要审查

在纯原生应用中,代码只有在您构建、提交并通过审核之后才会到达用户手中。WebViewGold 应用加载的是您的生产 URL,所以合并到 main 的代码一经部署,就会立即出现在商店版本中。这是这种方式的一大优势(Web 改动无需重新提交,参见 Web 更新与原生更新),也正因如此,一个草率的 pull request 可能让所有手机上的应用崩坏,或者在两次审核之间,把一个购买点数的 Stripe 结账页面摆到 iOS 用户面前。每次您提交原生更新时,Apple 和 Google 都会重新审视,期间违反的规则届时就会暴露出来。

Codex 代码审查弥补了这个缺口。仓库连接到 Codex 后,它会自动审查 GitHub 上的 pull request,或者在有人评论 @codex review 时进行审查,并发布一条普通的 GitHub 审查,在具体代码行上给出问题。有两个细节决定了如何设置:在 GitHub 上,它只报告高优先级的问题(P0 和 P1);它从 AGENTS.md 文件中的 ## Code Review Rules 部分读取审查规则,对每个改动的路径应用根目录文件加上最具体的嵌套文件。所以商店规则必须写下来,而且必须标记为 P1。

十五分钟完成设置

  1. 连接仓库

    在 Codex 中连接 GitHub,并授予 Codex connector 访问该仓库的权限。GitHub 上的审查不需要云端环境;Codex 会直接读取 pull request。

  2. 开启自动审查

    在 Codex 中打开代码审查设置,选择仓库并开启自动审查。配置它需要对 GitHub 仓库拥有 push 或 admin 权限。如果不开启自动审查,在 pull request 上评论 @codex review 即可请求一次审查。

  3. 编写规则

    把下面的 ## Code Review Rules 部分添加到根目录的 AGENTS.md 中(或我们模板中的 AGENTS.md)。先从简短开始:OpenAI 建议只写几条简洁的规则,把格式和 lint 交给 CI。嵌套的 AGENTS.md 文件可以添加针对文件夹的规则,例如为您的服务器函数制定更严格的规则。

  4. 保护 main 分支

    在 GitHub 仓库设置中,要求 main 分支必须通过 pull request 并通过检查。Codex 只会评论,它不会阻止合并;阻止合并的是分支保护。

  5. 证明它有效

    创建一个故意违反某条规则的临时 pull request,例如在 isNativeApp() 为 true 时显示 Stripe 付款链接。如果 Codex 没有标记它,就把规则写得更具体再试一次,然后不合并直接关闭该 pull request。

WebViewGold 应用的 Code Review Rules

粘贴到 AGENTS.md 中,并根据您的代码库调整名称。“Treat as P1”这一行很重要:GitHub 上的审查只显示 P0 和 P1 问题,如果没有这一行,商店规则可能被判定为次要问题而永远不会出现。

markdown
## Code Review Rules

These rules protect the App Store and Google Play releases of our WebViewGold
apps, which load this web app in a native WebView. Treat every violation below
as P1.

### Secrets
- No API keys, service-role keys, private keys or tokens in client code, in
  public env variables (NEXT_PUBLIC_*, VITE_*) or in committed .env files.
- Server-only keys (database service role, OpenAI, Stripe secret) are read in
  server code only.

### Store rules
- Digital goods, subscriptions and credits: when isNativeApp() is true, buy
  buttons use the in-app purchase path (revenuecat://purchase?...). No Stripe
  checkout, card form or external payment link for digital goods in the app.
- Account deletion (settings screen and /delete-account) keeps working and
  deletes server-side.
- A new Google, Facebook or other third-party login requires Sign in with
  Apple with equal prominence.
- /privacy and /terms stay reachable from settings and the footer.
- No placeholder text, lorem ipsum, "coming soon" screens or dead links in
  routes reachable from the app.
- No "Download our app" banners or App Store / Google Play links when
  isNativeApp() is true.

### Mobile layout inside the WebView
- Fixed headers, footers and bottom sheets pad with env(safe-area-inset-*).
- Tap targets 44x44px or larger; inputs use font-size 16px or more.
- No hover-only controls; no horizontal scrolling at 320px width.
- Login and payment flows do not depend on window.open popups.

### WebViewGold bridge
- Bridge calls run only behind isNativeApp() and keep a web fallback.
- Only URL schemes documented in https://www.webviewgold.com/llms-full.txt.
  Flag any scheme that is not in that file.

我很高兴购买了这个应用!非常简单,文档也很棒。联系客服后,他们回复很快且非常友好,一天之内就解决了我的问题。10/10,值得推荐。

Nelis Geiger · CodeCanyon

每条规则保护的是什么

规则为什么重要典型的 P1 问题
客户端代码中没有密钥代码包中的任何内容,打开应用或网站的每个人都能读到;数据库的 service-role key 或 OpenAI 密钥意味着数据泄露或一张巨额账单在 React 组件中直接使用 VITE_OPENAI_API_KEY
数字商品通过应用内购买销售Apple 准则 3.1.1 和 Google Play 的支付政策(有地区性例外);这是 AI 和 SaaS 应用最常见的拒审原因,参见准则 3.1.1点数包按钮在没有 isNativeApp() 分支的情况下打开 Stripe Checkout
账号删除持续可用对于支持注册的应用,Apple 5.1.1(v) 和 Google Play 都要求提供应用内删除一次重构移除了对服务器端删除函数的调用
Sign in with Apple 对等存在第三方登录时适用 Apple 4.8新增了一个“使用 Google 继续”按钮,却没有 Apple 选项
安全区域、44 px 点按区域、16 px 输入框Apple 4.0 设计类拒审;iOS 会放大字号小于 16 px 的输入框,参见安全区域和点按区域新的底部导航使用 position: fixed; bottom: 0,却没有 inset
应用内没有网站残留元素审核人员会把下载横幅和商店链接视为“这就是个网站”(准则 4.2 和 2.3)对所有 User-Agent 都显示的“获取应用”横幅
只使用文档记载的桥接 scheme凭空捏造的 scheme 在应用内会静默失败使用 window.location.href = "share://..." 而不是 shareapp://

发布前的审查请求

自动审查已经会应用您的规则。在提交商店之前,请针对发布用的 pull request 要求一次重点审查;@codex review 后面的文字只会收窄这一次审查的范围,不会改动 AGENTS.md。

在 pull request 中评论
@codex review 检查 App Store 和 Google Play 的发布阻碍问题。请应用 AGENTS.md 中的 Code Review Rules,重点关注:客户端代码能访问到的密钥或仅限服务器使用的密钥;当 isNativeApp() 为 true 时,未走应用内购买路径就销售的数字商品、订阅或点数;任何削弱账号删除、隐私政策和条款页面或 Sign in with Apple 对等性的改动;没有安全区域 inset 的固定页眉、页脚或底部面板,小于 44px 的点按区域和小于 16px 的输入框;在应用内可见的下载横幅或商店链接;未在 https://www.webviewgold.com/llms-full.txt 中记载的桥接 URL scheme。

审查自上次商店构建以来的全部改动

一次 pull request 审查只能看到一个改动。在提交新的原生构建之前,请审查自上次提交以来的全部改动:为每个已提交的状态打上 tag,然后从 main 向一个基于该 tag 创建的分支发起一个仅用于审查的 pull request。在其中评论上面的请求,逐一处理问题,然后不合并直接关闭该 pull request。

bash
# when you submit a build to the stores, tag the state of main
git tag store-1.2.0
git push origin store-1.2.0

# before the next submission: a base branch at the old state
git branch review/store-1.2.0 store-1.2.0
git push origin review/store-1.2.0

# review-only pull request: base = the old state, head = main
gh pr create --base review/store-1.2.0 --head main \
  --title "Release review: changes since store 1.2.0" \
  --body "Review only. Do not merge."

推送前在本地审查

在 Codex CLI 中,/review 会启动一个独立的审查者,它读取一个 diff(相对于某个基础分支、未提交的改动或某次提交),并在不修改您文件的情况下报告按优先级排列的问题。选择自定义审查指令并粘贴以下内容:

Codex CLI:/review,然后选择自定义审查指令
请把相对于 main 的改动当作我们 WebViewGold iOS 和 Android 应用的发布关卡来审查,这些应用在原生 WebView 中加载这个 Web 应用。报告每一处违反 AGENTS.md 中 Code Review Rules 的地方,注明文件、行号、所违反的规则、它为什么会阻碍 App Store 或 Google Play 发布,以及最小的修复方法。然后列出需要在真机上检查的内容(刘海和主屏幕指示条附近的布局、键盘遮挡输入框、登录和购买流程)。不要报告格式或命名问题。

Codex 审查不会替您做的事

  • 取代测试、分支保护或人工批准。OpenAI 表示,这些规则用于引导 Codex,并不能取代上述措施。请把审查结果当作第二双眼睛。
  • 看到仓库之外的内容。除非 WebViewGold 项目位于同一个仓库中,否则 Config.swift、Config.java 和控制台设置都是不可见的,而您的 App Privacy 和数据安全答案永远不会被检查。
  • 在 GitHub 上显示次要问题。那里只显示 P0 和 P1;没有标注“Treat as P1”的商店规则可能永远不会出现。
  • 在手机上运行应用。布局问题来自阅读 CSS,而不是截图;Play Store 上架就绪检查和真机构建仍然是您的工作。
  • 永远正确。采取行动之前,先对照 diff 核实每个问题。像 @codex fix the P1 finding 这样的请求(任何不是 review 的提及)会启动一个可以向分支推送的云端任务,所以那次提交也要审阅。

常见问题

Codex 代码审查需要额外付费吗?

代码审查是 Codex 的一项功能,而 Codex 包含在付费的 ChatGPT 套餐中,使用限额取决于套餐。在繁忙的仓库上开启自动审查之前,请查看您套餐的最新条款。

Codex 会对代码风格和命名发表评论吗?

在 GitHub 上不会:那里只报告 P0 和 P1 问题。这也是商店规则需要明确写上“treat as P1”的原因。格式问题请交给您的 linter 和 CI。

Codex 能修复它发现的问题吗?

能。用 review 以外的请求评论 @codex,例如“@codex fix the P1 finding about the Stripe button”。它会以该 pull request 为上下文启动一个任务,如果有权限,还可以把修复推送到该分支。请像审阅其他提交一样审阅那次提交。

它适用于私有仓库吗?

适用,只要您授予 Codex GitHub connector 访问该仓库的权限。配置自动审查需要对该仓库拥有 push 或 admin 权限。

一篇较早的教程使用的是“Review guidelines”标题,现在还有效吗?

OpenAI 当前的文档把这个部分命名为 ## Code Review Rules。请把标题改成一致的名称,保留下面的规则,并用一个故意违反规则的 pull request 进行测试。

WebViewGold 项目应该放在同一个仓库中吗?

可以,这样审查也能看到 Config.swift 和 Config.java 的改动。很多团队把它单独存放,因为原生改动很少。无论哪种方式,都绝不要提交证书、描述文件或密钥库。

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

结果相同,只是您需要投入的工作量不同。三种方式都附带审核通过保证和 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 天内提出申请。