关于 asc-subscription-localization
此技能通过 asc CLI 批量创建和更新 App Store Connect 中订阅、订阅组及 App 内购买项目的本地化内容,涵盖版本解析、导入和验证流程,并遵循描述字段要求。
主要功能
- 01从 JSON 批量导入本地化内容
- 02创建和更新版本本地化
- 03编辑前解析对应版本
- 04检查现有语言并验证更改
适用场景
- 01为多个 App Store 语言本地化订阅
- 02更新 App 内购买项目名称和描述
- 03为订阅组应用多语言名称
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ rorkai/ app-store-connect-cli-skills --skill asc-subscription-localization安装后在 Claude Code 中输入/asc-subscription-localization确认已加载。
详细介绍
asc 订阅本地化
使用此技能,可在所有 App Store Connect 语言环境中批量创建或更新订阅、订阅群组和 App 内购买项目的显示名称,以及受支持的描述。这样就不必在 App Store Connect 中逐个点击每种语言来设置相同的显示名称。
前提条件
- 已配置身份验证(
asc auth login或ASC_*环境变量)。 - 知道你的 App ID(
ASC_APP_ID或--app)。 - 订阅群组和订阅已存在。
先选择 API 范围
API 4.4.1 为 App 内购买项目、订阅和订阅群组新增了独立版本。版本 ID 与其产品、订阅或群组 ID 不同。
- 所有新的本地化工作都使用
asc ... versions localizations ...。 - 不要使用产品或群组范围的 v1 本地化命令。API 4.4.1 弃用了这些资源,CLI 现在会针对其兼容性命令发出迁移警告。
- 绝不要将产品、订阅或群组 ID 传递给版本范围的命令。
先查找或创建版本,再进行本地化:
asc iap versions list --iap-id "IAP_ID" --state PREPARE_FOR_SUBMISSION --paginate --output table
asc subscriptions versions list --subscription-id "SUB_ID" --state PREPARE_FOR_SUBMISSION --paginate --output table
asc subscriptions groups versions list --group-id "GROUP_ID" --state PREPARE_FOR_SUBMISSION --paginate --output table
分别根据每个列表结果进行处理:没有匹配项时创建;有一个匹配项时复用该版本 ID;有多个匹配项时停止并要求提供明确的版本 ID。仅在对应结果为零匹配时运行以下命令:
# If and only if the IAP version list returned zero matches:
asc iap versions create --iap-id "IAP_ID" --output json
# If and only if the subscription version list returned zero matches:
asc subscriptions versions create --subscription-id "SUB_ID" --output json
# If and only if the group version list returned zero matches:
asc subscriptions groups versions create --group-id "GROUP_ID" --output json
这三类版本都没有删除命令。列出并复用唯一的 PREPARE_FOR_SUBMISSION 版本;只有零匹配时才创建,存在多个匹配项时则停止并要求提供明确的 ID。删除线上父级对象不会级联删除 App 内购买项目或订阅版本,因此不要以为删除父级对象就会清理测试时创建的版本。
支持的 App Store 语言环境
以下是 App Store Connect 支持的订阅和 App 内购买项目本地化语言环境:
ar-SA, ca, cs, da, de-DE, el, en-AU, en-CA, en-GB, en-US,
es-ES, es-MX, fi, fr-CA, fr-FR, he, hi, hr, hu, id, it,
ja, ko, ms, nl-NL, no, pl, pt-BR, pt-PT, ro, ru, sk,
sv, th, tr, uk, vi, zh-Hans, zh-Hant
从单个文件导入多种语言环境
批量写入时,在一个 JSON 文件中将每种语言环境映射到对应字段,然后将其导入已解析的版本 ID。导入会创建缺失的语言环境,只更新有差异的字段,不会清空或删除任何内容,并会报告各语言环境的失败情况。
asc subscriptions versions localizations import --version-id "VERSION_ID" --file "./localizations.json" --dry-run
asc subscriptions versions localizations import --version-id "VERSION_ID" --file "./localizations.json" --confirm
asc iap versions localizations import 使用相同的 name 和 description 字段。asc subscriptions groups versions localizations import 使用 name 和 customAppName。为每种新建的订阅或 App 内购买项目语言环境提供非空的 description;请参阅下方的创建规则。
工作流:批量本地化订阅版本(v2)
列出现有本地化内容,仅创建缺失的语言环境,然后进行验证:
asc subscriptions versions localizations list --version-id "VERSION_ID" --paginate --output table
asc subscriptions versions localizations create --version-id "VERSION_ID" --locale "LOCALE" --name "Display Name" --description "Description"
asc subscriptions versions localizations list --version-id "VERSION_ID" --paginate --output table
更新会区分省略的值、非空字符串和 JSON null:
asc subscriptions versions localizations update --id "LOC_ID" --name "New Name" --description "Updated description"
不要将值标志与对应的 --clear-name 或 --clear-description 标志一起使用。4.4.1 架构允许 JSON null,但由于描述必须至少包含一个字符,Apple 的线上服务目前会拒绝空的 --description 和用于订阅版本本地化的 --clear-description。
因此,创建缺失的订阅版本本地化内容时,必须提供非空描述。仅设置显示名称的操作可以更新现有本地化内容的名称,但在用户提供非空的特定语言环境描述或共享回退描述之前,不得创建缺失的语言环境。
工作流:批量本地化订阅群组版本(v2)
asc subscriptions groups versions localizations list --version-id "VERSION_ID" --paginate --output table
asc subscriptions groups versions localizations create --version-id "VERSION_ID" --locale "LOCALE" --name "Group Display Name" --custom-app-name "My App"
asc subscriptions groups versions localizations update --id "LOC_ID" --name "Updated Group Display Name" --custom-app-name "My App"
asc subscriptions groups versions localizations list --version-id "VERSION_ID" --paginate --output table
清除元数据是单独的明确选择操作。在确认用户希望移除现有的自定义 App 名称后,运行:
asc subscriptions groups versions localizations update --id "LOC_ID" --clear-custom-app-name
不要在标准批量本地化工作流中包含 --clear-name 或 --clear-custom-app-name。只有在明确需要使用 JSON null 时才使用任一标志;省略该标志会使对应属性保持不变。
批量本地化 IAP 版本的工作流(v2)
asc iap versions localizations list --version-id "VERSION_ID" --paginate --output table
asc iap versions localizations create --version-id "VERSION_ID" --locale "LOCALE" --name "Display Name" --description "Description"
asc iap versions localizations update --localization-id "LOC_ID" --description "Updated description"
asc iap versions localizations list --version-id "VERSION_ID" --paginate --output table
Apple 的线上服务也会拒绝 IAP 版本本地化中的空描述和
--clear-description,尽管 4.4.1 架构允许 JSON null。与订阅一样,仅提供显示名称的运行可以更新现有 IAP 本地化,但在有非空描述之前,不得创建缺失的语言地区。
批量本地化应用中的所有订阅版本
对于包含多个订阅组和订阅的完整应用:
# 1. List groups and resolve each group's unique mutable version.
asc subscriptions groups list --app "APP_ID" --paginate --output json
asc subscriptions groups versions list --group-id "GROUP_ID" --state PREPARE_FOR_SUBMISSION --paginate --output json
# 2. Localize each group version.
asc subscriptions groups versions localizations list --version-id "GROUP_VERSION_ID" --paginate --output json
asc subscriptions groups versions localizations create --version-id "GROUP_VERSION_ID" --locale "LOCALE" --name "Group Display Name"
# 3. List subscriptions and resolve each subscription's unique mutable version.
asc subscriptions list --group-id "GROUP_ID" --paginate --output json
asc subscriptions versions list --subscription-id "SUB_ID" --state PREPARE_FOR_SUBMISSION --paginate --output json
# 4. Localize each subscription version.
asc subscriptions versions localizations list --version-id "SUBSCRIPTION_VERSION_ID" --paginate --output json
asc subscriptions versions localizations create --version-id "SUBSCRIPTION_VERSION_ID" --locale "LOCALE" --name "Display Name" --description "Description"
对每个版本列表应用相同的零个/一个/多个匹配项规则:零个匹配项时创建版本,一个匹配项时复用该版本,多个匹配项时停止并要求提供明确的 ID。
Agent 行为
- 新的本地化工作只能使用版本范围内的 v2 资源。
- 将版本 ID 与产品、订阅和组 ID 分开处理。
- 始终先列出现有本地化内容,以避免重复创建错误。
- 创建缺失的语言地区;如果现有值不同,则更新已解析的本地化 ID;如果现有值已匹配,则不执行任何操作。
- 用户只提供一个显示名称时,将其用于所有语言地区(每个地区使用相同名称)。
- 用户按语言地区提供翻译后的名称时,每个地区使用对应的名称。
- 对于订阅和 IAP 版本本地化,每次创建都必须提供非空的
--description。如果用户只提供显示名称,则通过已解析的 ID 更新现有本地化,跳过缺失语言地区的创建,并在创建前要求用户提供各语言地区的描述,或提供一个非空的备用描述。 - 更新现有订阅或 IAP 版本本地化时,除非用户提供了新的非空值,否则省略
--description;绝不推断空值或清除描述。 - 订阅组版本本地化没有描述字段。正常创建或更新名称;仅当用户提供了该值时才使用
--custom-app-name。 - 验证步骤使用
--output table,方便用户直观确认。 - 中间自动化步骤明确使用
--output json;输出默认值会根据 TTY 自动调整。 - 批量写入后,始终运行 list 命令验证是否完整。
- 对于订阅数量较多的应用,按组顺序处理,以保持输出易于阅读。
- 如果某个语言地区的创建或更新调用失败,记录该地区和错误,然后继续处理其余语言地区。批次完成后,将所有失败汇总报告,以便用户处理。
备注
- 订阅显示名称是用户在订阅管理页和购买对话框中看到的名称。
- 为已存在的语言地区创建本地化内容会失败;先列出内容,并在需要更改时更新已解析的 ID。
- Apple 没有批量本地化端点;
... localizations import会验证整个文件,然后逐个语言地区写入。 - 在 list 命令中使用
--paginate,确保返回所有现有本地化内容。 - 如果只有应用名称而没有 ID,请使用
asc-id-resolver技能。