ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

App-Store-Connect-CLI 订阅组版本(Subscription Group Versions)4.4.1 支持实战:命令布局、OpenAPI 契约与源码级实现解析

App-Store-Connect-CLI 订阅组版本(Subscription Group Versions)4.4.1 支持实战:命令布局、OpenAPI 契约与源码级实现解析 【免费下载链接】App-Store-Connect-CLIFast, scriptable CLI for the App Store Connect API. Automate TestFlight, builds, submissions, signing, analytics, screenshots, subscriptions, and more项目地址https://gitcode.com/gh_mirrors/ap/App-Store-Connect-CLI点击查看免费下载本篇文章以 app-store-connect-api-4.4.1-subscription-group-versions.md 为核心系统讲解 App-Store-Connect-CLI 对 App Store Connect API 4.4.1 新增的订阅组版本Subscription Group Version与 v2 版订阅组本地化资源的完整支持从命令树布局、十个新增 OpenAPI 操作到可空字段的更新语义、集合选项校验、退出码行为与测试验证计划。读完你将能直接使用asc subscriptions groups versions ...完成订阅组版本的创建、查询、本地化维护与关系链接读取并理解其与已废弃 v1 命令路径的兼容边界。命令布局在既有subscriptions groups分类下扩展订阅组版本并没有另起一个新的顶级命令而是作为既有asc subscriptions groups分类的一个子分支存在完整命令树如下来自设计文档的 Placement and command shape 一节asc subscriptions groups versions create --group-id GROUP_ID asc subscriptions groups versions list --group-id GROUP_ID asc subscriptions groups versions view --version-id VERSION_ID asc subscriptions groups versions localizations list --version-id VERSION_ID asc subscriptions groups versions localizations create --version-id VERSION_ID --locale en-US --name Premium asc subscriptions groups versions localizations view --id LOCALIZATION_ID asc subscriptions groups versions localizations update --id LOCALIZATION_ID --name Premium Plus asc subscriptions groups versions localizations delete --id LOCALIZATION_ID --confirm asc subscriptions groups versions links versions --group-id GROUP_ID asc subscriptions groups versions links localizations --version-id VERSION_IDversions create/list/view管理订阅组的评审版本review version版本拥有version整数序号与state评审状态两个属性对应源码中的SubscriptionGroupVersionAttributesinternal/asc/subscription_group_versions.go。versions localizations ...管理「版本作用域」下的 v2 本地化资源name、customAppName、locale不再暴露 v1 模式才有的state字段。versions links ...直接读取原始关系链接linkage分别面向组→版本、版本→本地化两种关系。与 v1 兼容路径的关系一个被废弃、一个被保留设计文档明确指出最初的增量切片保留了asc subscriptions groups localizations ...这一套 v1 组作用域命令树但该树现已废弃应改用asc subscriptions groups versions localizations ...使用组版本 ID。迁移说明见 migrate-to-5-0.mdxasc subscriptions groups localizations subcommand ...对应迁移到asc subscriptions groups versions localizations ...sync子命令则改为逐语言地用版本作用域命令做 list/create/update/delete 对账。关键的兼容原则是过渡期内兼容命令的 flags、payload、输出与退出码全部保留不做移除或重定向。也就是说迁移期间旧脚本不会因命令消失而直接崩溃只是官方不再推荐使用。另外既有分组list/view命令新增了取回版本所需的选择器控制--include、--fields、--version-fields、--versions-limit且未传入这些参数时既有调用的请求形态完全不变保证向后兼容。OpenAPI 契约4.4.1 新增的十个操作实现覆盖的范围精确对应 4.4.1 新增的十个端点设计文档给出了完整对照表MethodPathRequest / responsePOST/v1/subscriptionGroupVersionsSubscriptionGroupVersionCreateRequest/SubscriptionGroupVersionResponseGET/v1/subscriptionGroupVersions/{id}SubscriptionGroupVersionResponseGET/v1/subscriptionGroups/{id}/versionsSubscriptionGroupVersionsResponseGET/v1/subscriptionGroups/{id}/relationships/versionsSubscriptionGroupVersionsLinkagesResponseGET/v1/subscriptionGroupVersions/{id}/localizationsSubscriptionGroupLocalizationsV2ResponseGET/v1/subscriptionGroupVersions/{id}/relationships/localizationsSubscriptionGroupVersionLocalizationsLinkagesResponsePOST/v2/subscriptionGroupLocalizationsSubscriptionGroupLocalizationV2CreateRequest/SubscriptionGroupLocalizationV2ResponseGET/v2/subscriptionGroupLocalizations/{id}SubscriptionGroupLocalizationV2ResponsePATCH/v2/subscriptionGroupLocalizations/{id}SubscriptionGroupLocalizationV2UpdateRequest/SubscriptionGroupLocalizationV2ResponseDELETE/v2/subscriptionGroupLocalizations/{id}no response body创建与更新请求的最小载荷语义创建版本只需要一个subscriptionGroup关系即--group-id。源码中CreateSubscriptionGroupVersion构造的请求体仅包含type: subscriptionGroupVersions与relationships.subscriptionGroupinternal/asc/client_subscription_group_versions.go。创建 v2 本地化要求name、locale以及一个资源类型为subscriptionGroupVersions的version关系customAppName可选且可为 null。CLI 侧通过--name、--locale、--custom-app-name提供internal/cli/subscriptions/group_version_localizations.go。更新 v2 本地化接受可空nullable的name与customAppName。显式的--clear-name与--clear-custom-app-name标志映射为 JSONnull未传入的标志则从 payload 中整体省略不会发送无意义的空值字段。可空语义在类型层由NullableString实现SubscriptionGroupLocalizationV2UpdateAttributes中Name与CustomAppName均为*NullableStringinternal/asc/subscription_group_versions.go。在命令层update 子命令会区分「设置标志已传入」与「清除标志已传入」两种状态并禁止二者同时出现见下文退出码一节。查询能力矩阵版本列表groups versions list支持filter[state]、稀疏字段sparse fields、includes、limit、limit[localizations]、links.next以及 CLI 端的聚合参数--paginate自动翻页拉取全部页。源码中的查询构造见 internal/asc/client_subscription_group_versions.go。版本本地化列表groups versions localizations list支持其端点专属字段、includeversion、limit、links.next与--paginate。关系命令links versions/links localizations返回原始资源链接raw linkages支持端点limit、links.next与--paginate。版本状态合法值来自命令源码状态过滤器--state的合法取值由命令层白名单约束internal/cli/subscriptions/group_versions.go共九个且命令解析时统一转大写后校验PREPARE_FOR_SUBMISSION, READY_FOR_REVIEW, WAITING_FOR_REVIEW, IN_REVIEW, ACCEPTED, APPROVED, REPLACED_WITH_NEW_VERSION, REJECTED, DEVELOPER_REJECTED非法值会在发起任何网络请求前报错--state must be one of: ...。数值范围的硬校验--limit必须落在 1–200 之间--localizations-limit必须落在 1–50 之间localizations-limit同时出现在版本 list 与 view 命令上用于限制 include 进来的本地化数量越界即报 usage errorinternal/cli/subscriptions/group_versions.go。--next的互斥规则分页续传参数--next有严格的互斥约束它不能与所属者 ID 标志--group-id/--version-id同时出现也不能与任何查询标志--state、--include、--fields、--group-fields、--localization-fields、--limit、--localizations-limit等组合。这些规则均有命令级测试覆盖internal/cli/cmdtest/subscription_group_versions_test.go。稀疏字段与 include 白名单版本端点--include仅允许subscriptionGroup,localizations--fields仅允许version,state,subscriptionGroup,localizations--group-fields允许referenceName,subscriptions,subscriptionGroupLocalizations,versions--localization-fields允许name,customAppName,locale,versioninternal/cli/subscriptions/group_versions.go。版本本地化端点--include仅允许version--fields为本地化字段--version-fields复用版本字段白名单internal/cli/subscriptions/group_version_localizations.go。选择器值都经过NormalizeSelection校验非法值在请求发出前即被拒绝。分组 list/detail 的扩展与集合选项的拒绝规则修改后的分组list与详情操作支持新的includeversions、fields[subscriptionGroupVersions]、versions分组稀疏字段以及limit[versions]取值但这一改动不会改变任一操作默认生成的查询。同时设计文档明确了三条「集合选项只属于列表端点」的规则分组详情操作在发出 HTTP 请求之前就拒绝集合专用的顶层limit与links.next选项版本详情客户端GetSubscriptionGroupVersion对集合专用的limit、分页与版本状态过滤器filter[state]应用同样的拒绝规则——源码中在构造请求路径之前就返回limit is only supported when listing subscription group versions等错误internal/asc/client_subscription_group_versions.gov2 本地化详情客户端GetSubscriptionGroupLocalizationV2同样拒绝limit与next URL同文件 L304-L318。这保证了「详情查询」与「列表查询」的边界清晰用户在view命令上传入分页参数会立刻得到明确的 usage 错误而不是被静默忽略。共享SubscriptionGroupSchema 的五种解码形态由于SubscriptionGroup是共享 schema类型化的versions关系在以下五种响应形态中都被保留结构化解码测试逐一覆盖直接返回的分组group detail / list分组 create 响应分组 update 响应v1 分组本地化响应中的 include 数据app 响应中的 include 数据。这意味着无论版本是通过旧的分组 create/update 调用带回、还是由 v1 本地化或 app 响应 include 进来CLI 的表格渲染都能正确展示其versions关系不会因 schema 复用而丢失字段。v2 本地化的state字段被有意排除设计文档特别强调v2 本地化的稀疏字段白名单有意排除state——4.4.1 只在遗留的 v1 本地化 schema 上定义该属性。因此 v2 的响应类型与表格渲染器与 v1 完全分离SubscriptionGroupLocalizationV2Attributes只含Name、CustomAppName、Localeinternal/asc/subscription_group_versions.go避免在表格中渲染一列永远为空的误导性 state 列。行为与失败语义stdout、stderr 与退出码设计文档对成功与失败路径做了严格约定与项目整体的错误处理哲学一致可进一步参考 concepts/error-handling.mdx所有成功命令将选定的 JSON、表格或 Markdown 数据写入stdout校验与 API 诊断信息写入stderr命令特有的非法选择、冲突的 set/clear 标志、以及没有实际变更的更新请求都是usage error状态码 2且在认证与网络访问之前就失败缺少必需标志同样在认证与网络访问之前失败——这一点有测试专门验证校验类用例断言「client factory 不会被调用」internal/cli/cmdtest/subscription_group_versions_test.go既有命令路径保留既定的退出码行为不因本次增量而改变。冲突与空更新校验update 子命令update 命令明确拒绝以下场景internal/cli/subscriptions/group_version_localizations.go--name与--clear-name同时出现--name cannot be used with --clear-name--custom-app-name与--clear-custom-app-name同时出现--custom-app-name cannot be used with --clear-custom-app-name四个更新标志一个都没传at least one update flag is required。关系命令只暴露真实的所属者 ID每个关系命令只暴露其真实所属者的 ID 标志links versions只接受--group-idlinks localizations只接受--version-id。这样与所属者无关的 ID 标志会在解析阶段直接失败而不会被静默忽略——避免用户传错 ID 类型却不自知。删除必须显式确认delete子命令强制要求--confirm缺失时报--confirm is required且从不进行交互式提示适合脚本化调用。删除成功后命令输出一个AssetDeleteResult{ID, Deleted: true}结果对象internal/cli/subscriptions/group_version_localizations.go。底层基础设施保证每一次出站的 App Store Connect 调用都使用shared.ContextWithTimeout包装上下文防止脚本在异常网络下无限挂起CLI 层统一调用例如 internal/cli/subscriptions/group_versions.go分页续传时对links.nextURL 执行共享的 ASC URL 策略校验validateNextURL见 internal/asc/client_subscription_group_versions.go--next传入的 URL 也会在 CLI 层先经ValidateNextURL检查杜绝把任意 URL 交给客户端。测试与验证计划设计文档给出了六步验证策略已在仓库测试中落地RED 命令测试覆盖命令注册、必需标志、非法取值、可空更新标志、确认机制以及 v1 命令路径的保留——对应 internal/cli/cmdtest/subscription_group_versions_test.go其中包含 30 条校验用例全部断言「校验失败发生在认证客户端创建之前」REDhttptest覆盖十个方法与路径的完整请求/响应、精确的 create 与 update 请求体、端点专属查询参数、分页以及 API 错误最小实现实现最小的类型化 resource、query、client、output 与 command 层让测试转绿文档与真实二进制检查重新生成命令文档然后对构建出的/tmp/asc二进制做聚焦的包级测试与真实场景检查包括 stdout、stderr 与退出码只读优先偏好对一次性 app 资源做只读的真实调用未经明确批准不得对线上资源做 create/update/delete 验证提交前门禁依次运行make format、make check-docs、make lint、ASC_BYPASS_KEYCHAIN1 make test。这套流程与项目文档生成体系scripts/generate-command-docs.py衔接新增命令后需要重新生成命令文档并通过make check-docs校验文档与命令注册的一致性。设计取舍为什么嵌套而不是复用或新建设计文档记录了三个被考虑过的替代方案及否决理由在已废弃的asc subscriptions groups localizations树里加一个版本标志会让同一命令静默地在 v1 与 v2 之间二选一并使必需关系的校验复杂化。专用的versions localizations子树让 API 代际与所属关系都变得显式。新建顶层subscription-group-versions命令虽然能镜像原始 API 资源但会把紧密相关的分组工作流拆散到不同的顶层分类中。嵌套在既有groups命令下发现性与兼容性都更清晰。评审提交review submission的 item 装配有意不包含在本改动内——它是一个与 IAP、订阅版本共享的跨切面请求契约由独立的评审集成改动负责。这也是migrate-to-5-0.mdx中asc review items add --item-type subscriptionGroupVersions ...属于独立演进路径的原因。源码落点速查层次位置类型定义版本属性、v2 本地化属性、create/update 请求结构、响应类型internal/asc/subscription_group_versions.go客户端方法十个端点对应的 10 个方法 查询构造 集合选项拒绝internal/asc/client_subscription_group_versions.go版本命令组create/list/view/links、状态白名单、参数校验internal/cli/subscriptions/group_versions.go版本本地化命令组v2 list/create/view/update/delete、可空清除标志internal/cli/subscriptions/group_version_localizations.go命令级校验与 httptest 覆盖internal/cli/cmdtest/subscription_group_versions_test.gov1→v2 命令迁移对照migrate-to-5-0.mdx从 docs/API_NOTES.md 与 app-store-connect-api-4.4.1-coverage.md 中还可以看到本次改动在整体 4.4.1 API 覆盖与发布说明中的位置。若要为订阅组版本接入评审提交流程请留意后续独立的 review integration 改动而不是在本命令树上自行扩展。赞分享【免费下载链接】App-Store-Connect-CLIFast, scriptable CLI for the App Store Connect API. Automate TestFlight, builds, submissions, signing, analytics, screenshots, subscriptions, and more项目地址https://gitcode.com/gh_mirrors/ap/App-Store-Connect-CLI点击查看免费下载相关推荐App Store Connect CLI 订阅版本Subscription VersionsAPI 4.4.1 支持实战指南App Store Connect CLI 订阅版本Subscription VersionsAPI 4.4.1 支持实战指南 本文基于 App StoreApp-Store-Connect-CLI 本地构建发布 macOS PKG设计契约与源码实现解析App Store Connect CLI 本地构建发布 macOS PKG设计契约与源码实现解析 本篇文章围绕 docs/design/publish loApp Store Connect API 4.4.1 订阅稀疏字段ASC CLI 的 17 端点能力扩展与实现剖析App Store Connect API 4.4.1 订阅稀疏字段ASC CLI 的 17 端点能力扩展与实现剖析 本文以 App Store Connec上一篇git-bug bridge rm 命令详解删除已配置的桥接器Bridge下一篇PyMC 数据接口完全指南Data、get_data 与 Minibatch 的底层原理与实战用法创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表