自己动手
$109 每个平台,一次性付费
WebViewGold 许可证:一个现成的 Xcode 或 Android Studio 项目。粘贴您的 URL,设置名称和图标,开启所需功能,构建并提交。永久免费更新。
在主页查看方案Claude Code
应用上线后,每一次合并都是一次发布,因为 WebViewGold 应用加载的是您的生产 URL。借助运行 Claude Code 的 GitHub Actions 工作流,可以针对那些会让基于 Web 的应用被拒的改动审查每个 pull request,并在您合并之前指出来。下面是两套可以配合使用的方案:一个通过官方 action 发表评论的审查者,以及一个基于无头模式构建的硬性关卡。
每个平台一次性 $109 起,或由我们的团队全程代劳,$698 起。
对于 WebViewGold 应用,商店里的二进制文件只是一个外壳,您的 Web 应用才是产品。一个在定价页面添加 Stripe 按钮、移除“删除账户”操作,或者上线一个“即将推出”标签页的 pull request,在部署的那一刻就会改变 iOS 和 Android 用户看到的内容。它也会改变审核人员在您下一次原生更新时看到的内容,因为 App Review 测试的是当天的整个应用,而不是您的 diff。
常规的代码审查发现不了这类问题,因为代码本身没有问题;问题出在商店规则上。所以下面的检查刻意收窄了范围:它忽略代码风格和架构,只关注 App Store 和 Google Play 的风险。它有两种形式:
anthropics/claude-code-action@v1 审查 diff,并在 pull request 上发表一条评论。仅供参考,易于阅读,起步成本低。claude -p)的 Claude Code 返回结构化 JSON,一旦发现阻断项,任务就会失败。等您信任它之后,再把它设为必需的状态检查。您需要仓库的管理员权限,以及 Claude API 密钥或 Claude 订阅令牌二者之一。
最快的方法是在 Claude Code 中运行 /install-github-app;它需要已通过 gh auth login 登录的 GitHub CLI。手动方式:在仓库上安装 Claude GitHub App,并把 ANTHROPIC_API_KEY(来自 Claude Console 的 API 密钥)或 CLAUDE_CODE_OAUTH_TOKEN(用 claude setup-token 创建)添加为仓库 secret。
Claude Code 每次运行都会读取 CLAUDE.md,所以CLAUDE.md 模板中的原生上下文和商店规则在 CI 中同样适用。保持这个文件简短;每次运行都会读取它,也都要为它付费。
把下面的 YAML 保存为 .github/workflows/store-readiness.yml,并按您的文件夹调整 paths 列表。
在原生应用用户能看到的页面上加一个硬编码的“购买积分”链接。评论应该依据 Apple 3.1.1 和 Google Play 结算政策把它标出来。之后关闭这个 pull request。
添加 gate 任务及其 JSON schema,让它和评论并行运行几周,然后在分支保护规则中把它标记为必需的状态检查。
工作流会跳过草稿、只针对相关路径运行、取消被新提交取代的运行,并限制轮数和分钟数。每次运行都会消耗 GitHub Actions 分钟数,外加 API token 或订阅用量。
基于官方 action 的自动化模式:因为设置了 prompt,所以无需任何人输入 @claude,它就会在每个匹配的 pull request 上运行。允许的工具都是只读的,外加读取 diff 和发表一条评论所需的 gh 命令。
# .github/workflows/store-readiness.yml
name: Store readiness
on:
pull_request:
types: [opened, synchronize, ready_for_review, reopened]
paths:
- "src/**"
- "app/**"
- "public/**"
- "native/**"
- "CLAUDE.md"
concurrency:
group: store-readiness-${{ github.event.pull_request.number }}
cancel-in-progress: true
jobs:
review:
if: github.event.pull_request.draft == false
runs-on: ubuntu-latest
timeout-minutes: 20
permissions:
contents: read
pull-requests: write
issues: read
id-token: write
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 1
- uses: anthropics/claude-code-action@v1
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
prompt: |
REPO: ${{ github.repository }}
PR NUMBER: ${{ github.event.pull_request.number }}
This web app is also published as iOS and Android apps built with
WebViewGold. The apps load our production URL in a native WebView, so
every merged change is live in the store apps after the next deploy.
CLAUDE.md describes the native context and the store rules we follow.
Review only the changes in this pull request (gh pr diff) for App Store
and Google Play risks:
- digital goods, subscriptions, prices or external payment links that
are visible when isNativeApp() is true (Apple 3.1.1, Google Play billing)
- removed or broken /privacy, /terms, /delete-account or the in-app
Delete account action (Apple 5.1.1, Google Play account deletion)
- a new third-party login without Sign in with Apple (Apple 4.8)
- placeholder content, "coming soon", dead links, beta labels (Apple 2.1, 2.3)
- new data collection, SDKs or tracking the privacy policy does not
cover (Apple 5.1.1 and 5.1.2, Google Play Data safety)
- fixed bars without safe-area padding, tap targets under 44 px (Apple 4.0)
- user-generated content without report and block (Apple 1.2)
- under native/: URLs other than the production domain in Config.swift
or Config.java, new permissions, version and build numbers
Post exactly one comment with gh pr comment: a verdict line, then a table
with severity (blocker, risk, polish), rule, file:line and fix. If nothing
in the diff is store-relevant, post one line saying so. Skip general code
review feedback; another check handles that.
claude_args: |
--max-turns 25
--allowedTools "Read,Grep,Glob,Bash(gh pr diff *),Bash(gh pr view *),Bash(gh pr comment *)"
在过去5年我们尝试过的所有应用平台中,WebViewGold为我们带来了有史以来最短、最高效的上市时间。我不知道为什么没有更早发现你们,但我真的非常满意。目前我们的应用在iOS App Store和Google Play商店的下载量已超过6000次,没有任何问题!
把这个任务添加到同一文件的 jobs: 下。它会安装 Claude Code,把 pull request 的 diff 通过管道传入无头模式,并要求返回符合 schema 的 JSON。--permission-mode dontAsk 会拒绝任何需要批准的操作,所以这次运行可以读取文件,但不能修改。store-review-ok 标签让人可以否决误报:添加标签,然后重新运行该任务。
# Second job in the same workflow file
gate:
if: github.event.pull_request.draft == false
runs-on: ubuntu-latest
timeout-minutes: 15
permissions:
contents: read
pull-requests: read
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Install Claude Code
run: |
curl -fsSL https://claude.ai/install.sh | bash
echo "$HOME/.local/bin" >> "$GITHUB_PATH"
- name: Store-readiness gate
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
GH_TOKEN: ${{ github.token }}
PR: ${{ github.event.pull_request.number }}
BASE_REF: ${{ github.base_ref }}
run: |
# Human override: add the label, then re-run this job
if gh pr view "$PR" --json labels --jq '.labels[].name' | grep -qx 'store-review-ok'; then
echo "Label store-review-ok is set, skipping the gate."
exit 0
fi
git diff "origin/$BASE_REF...HEAD" | claude -p \
"The input is the diff of a pull request. This web app is also published as iOS and Android apps with WebViewGold, which load the production URL. Using the store rules in CLAUDE.md, report every change in this diff that would likely get the iOS or Android app rejected or removed. Only report findings you can tie to a file and line of the diff. Use severity blocker only for a likely rejection." \
--permission-mode dontAsk \
--allowedTools "Read,Grep,Glob" \
--max-turns 15 \
--output-format json \
--json-schema "$(cat .github/store-gate-schema.json)" > result.json
if ! jq -e '.structured_output' result.json > /dev/null; then
echo "::warning::The store gate returned no structured result; see the log."
exit 0
fi
jq '.structured_output' result.json
blockers=$(jq '[.structured_output.findings[] | select(.severity == "blocker")] | length' result.json)
if [ "$blockers" -gt 0 ]; then
echo "::error::$blockers store-review blocker(s). Fix them or add the store-review-ok label."
exit 1
fi保存为 .github/store-gate-schema.json。无头模式会把符合 schema 的结果放进其 JSON 输出的 structured_output 字段中,工作流用 jq 读取它。
{
"type": "object",
"properties": {
"verdict": { "type": "string", "enum": ["pass", "risks", "blockers"] },
"findings": {
"type": "array",
"items": {
"type": "object",
"properties": {
"severity": { "type": "string", "enum": ["blocker", "risk", "polish"] },
"rule": { "type": "string" },
"file": { "type": "string" },
"line": { "type": "integer" },
"fix": { "type": "string" }
},
"required": ["severity", "rule", "file", "fix"]
}
}
},
"required": ["verdict", "findings"]
}| 评论(claude-code-action) | 关卡(claude -p) | |
|---|---|---|
| 输出 | 一条可读的评论,包含结论和表格 | 通过或失败状态,JSON 在任务日志中 |
| 阻止合并 | 否 | 是,一旦设为必需的状态检查 |
| 身份验证 | Claude GitHub App 加 API 密钥或订阅令牌 | 作为环境变量的 API 密钥 |
| 最适合 | 向编写 pull request 的人解释风险 | 确保在忙碌的日子里没有人合并已知的阻断项 |
| 误报 | 忽略这条评论 | 修复代码,或添加 store-review-ok 标签后重新运行 |
Claude 会根据您的文件夹结构调整 paths 过滤器,并把 secret 留给您处理。
为 pull request 上的商店上架就绪检查创建 GitHub Actions 工作流。背景:这个 Web 应用也通过 WebViewGold 发布为 iOS 和 Android 应用,这些应用加载我们的生产 URL,所以每个合并的改动在下一次部署后都会出现在商店应用中。CLAUDE.md 包含我们的原生上下文和商店规则。 1. .github/workflows/store-readiness.yml:在 pull_request(opened、synchronize、ready_for_review、reopened)时触发,跳过草稿,每个 pull request 使用一个 concurrency group,并设置与我们真实的 Web 应用和原生文件夹相匹配的 paths 过滤器(先查看仓库结构)。 2. review 任务:使用 anthropics/claude-code-action@v1,提示词只审查 diff 中的商店风险(Apple 1.2、2.1、2.3、3.1.1、4.0、4.2、4.8、5.1.1、5.1.2;Google Play 结算、数据安全、账户删除、权限;Config.swift 和 Config.java 中的生产 URL),并用 gh pr comment 发表一条评论。允许的工具:Read、Grep、Glob,以及 gh pr diff、view 和 comment 命令。最多 25 轮。 3. gate 任务:安装 Claude Code,把 pull request 的 diff 通过管道传给 claude -p,使用 --permission-mode dontAsk、--allowedTools "Read,Grep,Glob"、--output-format json,以及来自 .github/store-gate-schema.json 的 --json-schema。当某条发现的 severity 为 blocker 时失败;当 pull request 带有 store-review-ok 标签时跳过。 4. 包含 verdict 和 findings(severity、rule、file、line、fix)的 schema 文件。 不要把任何 secret 写进文件。告诉我需要创建哪个仓库 secret,以及如何把这个关卡设为必需的状态检查。
--bare 会跳过什么。--bare 让 CI 运行结果可复现,但会跳过 CLAUDE.md、hook 和技能。如果使用它,请用 --append-system-prompt-file 传入您的规则。这个 action 两种都支持。ANTHROPIC_API_KEY 把 API 用量计入您的 Claude Console 账户;用 claude setup-token 创建的 CLAUDE_CODE_OAUTH_TOKEN 则使用付费的 Claude 方案。对于多人共用的仓库,API 密钥是更干净的选择,因为令牌与某一个人绑定。
它在检出的仓库中运行 Claude Code,所以 CLAUDE.md 对每次运行都有效;把 /skill-name 作为提示词传入,还可以启动某个项目技能。同一套规则同时服务于您的本地会话和 CI。
Anthropic 还提供 Code Review,无需工作流文件即可自动审查 pull request。它是通用审查工具,所以商店相关的规则仍需写在 CLAUDE.md 中,它才会加以应用。
取决于 diff 的大小,以及审查者打开了多少文件。轮数限制、paths 过滤器和超时设置限定了最坏情况,而无头模式的 JSON 输出还包含每次运行的预估费用,您可以把它记录下来。
Claude Code 也有 GitLab CI/CD 集成,而无头关卡可以在任何能运行 shell 命令并设置好 API 密钥的 CI 系统中工作。action 本身只适用于 GitHub。
不能。它只能发现 diff 中可见的问题。审核备注、截图、隐私问卷和设备上的表现仍然需要您来把关,而对于完整的提交前审查,审查子代理是更合适的工具。
结果相同,只是您需要投入的工作量不同。三种方式都附带审核通过保证和 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 天内提出申请。