该技能用于在 App Store Connect 商店侧收尾一次性内购(IAP):设置价格计划与本地化显示名称/描述,这两项是 asc-metadata MCP 无法设置的(MCP 仅暴露引用名称、审核备注、家庭共享)。它把 IAP 从 MISSING_METADATA 推进到 READY_TO_SUBMIT,以便随构建一起提交。只做收尾,不定义产品:product id、档位和价格决策来自第 4 阶段(变现/StoreKit),ASC 中的 IAP 记录必须已存在(通过 MCP create_iap 或 ASC UI 创建),本技能只在该既有记录上写元数据。
适用边界:不属于第 4 阶段,第 4 阶段负责把 IAP 集成进应用(StoreKit 2、付费墙)并决定价格;价格以 .planning/(如 MONETIZATION.md / PLAN.md)中的变现决策为唯一来源,不要重新询问价格,只确认,以免与付费墙/StoreKit 价格出现偏差。不处理 promoted-iap(后者用于在应用内展示推广的 IAP)。仅限一次性 IAP,订阅是另一套 ASC 流程(分组/优惠),不在此范围。
前提条件:已配置 _shared/asc-api/(见其 README,密钥与 ~/.appstoreconnect/);设置 ASC="python3 <asc.py 路径>",asc.py 位于与本技能同一 skills 根目录下的 _shared/asc-api/asc.py,应相对本 SKILL.md 位置解析(从本技能目录为 ../../_shared/asc-api/asc.py),不要相对项目 cwd。已知安装位置:SwiftShip 符号链接安装 ~/.claude/swiftship-skills/_shared/asc-api/asc.py;复制安装 .claude/skills/_shared/asc-api/asc.py(项目)或 ~/.claude/skills/_shared/asc-api/asc.py(全局);插件安装随插件附带 _shared/ 树。IAP 必须已在 ASC 中存在,可用 MCP list_iap 获取其 id;价格已在第 4 阶段确定,从 .planning/ 读取并确认,不要自行编造。
流程为 dry-run → 确认 → apply:先确认状态(MCP get_iap 获取当前状态与 productId,从 .planning/ 读取目标价格及显示名称(≤30)和描述(≤45),缺失项用 AskUserQuestion 与用户确认);再查找价格点:$ASC GET "/v1/inAppPurchases/<IAP_ID>/pricePoints?filter[territory]=USA",选择 customerPrice 与目标档位(如 6.99)匹配的 inAppPurchasePricePoint id;设置价格(一次性 IAP 用价格计划):$ASC POST /v1/inAppPurchasePriceSchedules @price.json(dry-run 供审阅请求体),确认后加 --apply;请求体关系为 inAppPurchase→{IAP_ID}、baseTerritory→USA、manualPrices→[新的 inAppPurchasePrices],其中 inAppPurchasePrices 引用该价格点且 startDate: null(即现在)。设置本地化:$ASC POST /v1/inAppPurchaseLocalizations '{"data":{"type":"inAppPurchaseLocalizations","attributes":{"locale":"en-US","name":"<=30","description":"<=45"},"relationships":{"inAppPurchase":{"data":{"type":"inAppPurchases","id":"<IAP_ID>"}}}}}' --apply;若本地化已存在则改为 PATCH 其 id。可选审核截图:POST /v1/inAppPurchaseAppStoreReviewScreenshots,采用 ASC 三步上传(预留→上传字节→提交)。最后用 MCP get_iap 验证状态不再是 MISSING_METADATA。
注意事项:每次写入都先 dry-run,展示请求体并确认后再 --apply,绝不未经用户确认就 apply 价格;仅限一次性 IAP,订阅请使用 MCP 的 create_subscription* 工具及单独流程;--apply 前应依据当前 ASC API 参考核对各端点与字段(资料记录于 2026-07)。