用途:将已创建且处于“Ready to Submit”状态的内购项目或订阅附加到当前应用版本,以便随版本一起提交 App Store 审核。适用于用户准备提交版本、需要包含内购或订阅,或 ASC 版本页面出现“In-App Purchases and Subscriptions”待选列表时。
背景:Apple 官方 App Store Connect API(POST /v1/subscriptionSubmissions、POST /v1/inAppPurchaseSubmissions)在首次提交时会返回 FIRST_SUBSCRIPTION_MUST_BE_SUBMITTED_ON_VERSION,且 reviewSubmissionItems API 不支持订阅或内购关系类型。本技能改用 Apple 内部 iris API(/iris/v1/subscriptionSubmissions),通过缓存的网页会话 Cookie 调用,支持公开 API 缺少的 submitWithNextAppStoreVersion 属性,与 ASC 网页 UI 勾选弹窗的机制一致。
前置条件:macOS Keychain 中已缓存网页会话(无会话或过期返回 401 时,先调用 asc_web_auth MCP 工具,在 Blitz 中打开 Apple ID 登录窗口自动捕获会话);已知应用 ID;内购或订阅已存在且处于 Ready to Submit 状态;已上传构建并附加到当前应用版本。
工作流:1)检查会话,命令为 security find-generic-password -s "asc-web-session" -a "asc:web-session:store" -w > /dev/null 2>&1 && echo "SESSION_EXISTS" || echo "NO_SESSION";2)用 iris API 列出订阅组(含订阅)和内购,找出 state=READY_TO_SUBMIT 且 attached=False 的条目并记录 ID;3)分别调用 subscriptionSubmissions 或 inAppPurchaseSubmissions 接口附加,请求体含 submitWithNextAppStoreVersion: True 及对应关系;4)附加后调用 get_tab_state 刷新 ascOverview 的提交就绪清单。
常见错误:返回“Subscription is already set to submit with next AppStoreVersion”(HTTP 409)表示已附加,可忽略;401 表示会话过期,需调用 asc_web_auth 重新登录(含 2FA)后重试。
代理行为:始终先列出内购与订阅;用户指定条目时按引用名或产品 ID 匹配,说“all”时附加所有 READY_TO_SUBMIT 条目;绝不打印、记录或回显会话 Cookie,使用自包含 Python 脚本处理;409 视为成功;401 先重新认证再重试;附加后刷新 ascOverview。
限制:本技能仅处理“附加到版本”这一步;iris API 为内部接口,有速率限制,请求间隔至少 350ms;会话 Cookie 含敏感令牌,需妥善保护。