关于 asc-beta-review
asc-beta-review 是通过 `asc` 命令行管理 Apple Beta 应用审核及相关 TestFlight 信息的技能。它可提交构建版本、跟踪审核状态、编辑联系人信息,并维护各语言的 Beta 应用描述。
主要功能
- 01创建并查看 Beta 审核提交
- 02管理审核联系人和演示账户信息
- 03列出并更新 Beta 应用本地化内容
- 04利用响应中的后续命令提示
适用场景
- 01提交构建版本以供 TestFlight 外部测试审核
- 02查看提交是否获批或被拒
- 03更新审核联系人或演示账户信息
- 04维护面向 TestFlight 测试者的本地化描述
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ tddworks/ asc-cli-skills --skill asc-beta-review安装后在 Claude Code 中输入/asc-beta-review确认已加载。
详细介绍
使用 asc 进行 Beta App 审核
提交构建版本以供 TestFlight 外部测试审核,并管理 Beta 审核联系人信息。Apple 要求先通过 Beta App 审核,才能通过 TestFlight 向外部测试人员分发构建版本。
身份验证
在运行任何 Beta 审核命令之前,请先设置凭据:
asc auth login --key-id <id> --issuer-id <id> --private-key-path ~/.asc/AuthKey.p8
CAEOAS — 根据功能提示引导下一步操作
每个 JSON 响应都包含 "affordances",其中提供可直接运行的命令:
BetaAppReviewSubmission affordances:
{
"id": "sub-abc123",
"buildId": "build-42",
"state": "WAITING_FOR_REVIEW",
"affordances": {
"getSubmission": "asc beta-review submissions get --submission-id sub-abc123",
"listSubmissions": "asc beta-review submissions list --build-id build-42"
}
}
BetaAppReviewDetail affordances:
{
"id": "d-xyz789",
"appId": "app-1",
"contactFirstName": "John",
"contactEmail": "[email protected]",
"demoAccountRequired": false,
"affordances": {
"getDetail": "asc beta-review detail get --app-id app-1",
"updateDetail": "asc beta-review detail update --detail-id d-xyz789"
}
}
值为 nil 的可选字段(contactFirstName、contactLastName、contactPhone、contactEmail、demoAccountName、demoAccountPassword、notes)会从 JSON 输出中省略。
命令
submissions list — 列出某个构建版本的 Beta 审核提交
asc beta-review submissions list --build-id <BUILD_ID> [--pretty]
submissions create — 提交构建版本以供 Beta 审核
asc beta-review submissions create --build-id <BUILD_ID> [--pretty]
创建新的 Beta App 审核提交。构建版本将进入 WAITING_FOR_REVIEW 状态。
submissions get — 获取特定提交
asc beta-review submissions get --submission-id <SUBMISSION_ID> [--pretty]
detail get — 获取某个 App 的 Beta 审核联系人信息
asc beta-review detail get --app-id <APP_ID> [--pretty]
返回该 App 的 Beta App 审核详细记录(联系人信息和演示账户)。每个 App 只有一条 Beta 审核详细记录。
detail update — 更新 Beta 审核联系人信息
asc beta-review detail update --detail-id <DETAIL_ID> \
[--contact-first-name <name>] \
[--contact-last-name <name>] \
[--contact-phone <phone>] \
[--contact-email <email>] \
[--demo-account-name <username>] \
[--demo-account-password <password>] \
[--demo-account-required] \
[--notes <text>]
仅发送已提供的标志;未指定的字段保持不变。
Beta App 本地化 — asc beta-app-localizations
按地区提供 Beta App 描述、测试人员反馈邮箱、营销 URL 和隐私政策 URL,这些信息会显示给 TestFlight 测试人员。Apple 要求在开放外部测试前提供这些信息;主要地区缺少描述或描述为空,是外部测试提交被拒最常见的原因。
与现有命令的用途不同:
asc beta-review detail→ App 级审核联系人信息和演示账户asc builds update-beta-notes→ 每个构建版本的“测试内容”说明asc beta-app-localizations→ 按地区提供的 Beta App 描述(本节)
# List existing beta localizations for an app
asc beta-app-localizations list --app-id <APP_ID> [--pretty]
# Get a single localization
asc beta-app-localizations get --localization-id <ID>
# Create a new localization (Apple auto-creates one for the primary locale)
asc beta-app-localizations create \
--app-id <APP_ID> \
--locale en-US \
[--description <text>] \
[--feedback-email <email>] \
[--marketing-url <url>] \
[--privacy-policy-url <url>] \
[--tv-os-privacy-policy <text>]
# Patch — only supplied flags are sent; omitted fields unchanged
asc beta-app-localizations update \
--localization-id <ID> \
[--description <text>] \
[--feedback-email <email>] \
[--marketing-url <url>] \
[--privacy-policy-url <url>]
# Delete (e.g. removing a no-longer-supported locale)
asc beta-app-localizations delete --localization-id <ID>
每个本地化项支持以下 affordances:delete、get、listSiblings(asc beta-app-localizations list --app-id <appId>)、update。
完整参考请参见 docs/features/beta-app-localizations.md。
BetaReviewState
| 状态 | 描述 |
|---|---|
WAITING_FOR_REVIEW | 已提交,等待 Apple 审核 |
IN_REVIEW | 正在审核 |
APPROVED | 已获准进行外部测试 |
REJECTED | 已拒绝 — 修复问题后重新提交 |
语义布尔值:isPending、isInReview、isApproved、isRejected。
典型工作流
APP_ID=$(cat .asc/project.json 2>/dev/null | jq -r '.appId // empty')
# 1. Upload a build
asc builds upload --file MyApp.ipa
# 2. Add the build to an external beta group
BUILD_ID=$(asc builds list --app-id "$APP_ID" | jq -r '.data[0].id')
GROUP_ID=$(asc testflight groups list --app-id "$APP_ID" | jq -r '.data[] | select(.isInternalGroup == false) | .id' | head -1)
asc builds add-beta-group --build-id "$BUILD_ID" --beta-group-id "$GROUP_ID"
# 3. Set up beta review contact details (first time)
asc beta-review detail get --app-id "$APP_ID" --pretty
DETAIL_ID=$(asc beta-review detail get --app-id "$APP_ID" | jq -r '.data[0].id')
asc beta-review detail update --detail-id "$DETAIL_ID" \
--contact-first-name "John" \
--contact-last-name "Doe" \
--contact-email "[email protected]" \
--contact-phone "+1-555-0100"
# 4. Set the Beta App Description for the primary locale (required for external testing)
EXISTING=$(asc beta-app-localizations list --app-id "$APP_ID" | jq -r '.data[] | select(.locale == "en-US") | .id')
if [ -z "$EXISTING" ]; then
asc beta-app-localizations create --app-id "$APP_ID" --locale en-US \
--description "Welcome to the beta — please test the new dashboard." \
--feedback-email [email protected]
else
asc beta-app-localizations update --localization-id "$EXISTING" \
--description "Welcome to the beta — please test the new dashboard." \
--feedback-email [email protected]
fi
# 5. Submit the build for beta app review
asc beta-review submissions create --build-id "$BUILD_ID" --pretty
# 6. Check submission status
asc beta-review submissions list --build-id "$BUILD_ID" --pretty
关键计算属性(BetaAppReviewDetail)
| 属性 | 逻辑 |
|---|---|
hasContact | contactEmail != nil && contactPhone != nil |
demoAccountConfigured | !demoAccountRequired || (name != nil && password != nil) |
确定 App ID
请参见 project-context.md — 在询问用户或运行 asc apps list 之前,先检查 .asc/project.json。
输出标志
--pretty # Pretty-print JSON
--output table # Table format
--output markdown # Markdown table