Highlight
App Store Connect 今年新增 Webhook、Build Upload、Feedback 三套 API,把”上传 build → 分发 → 收反馈”循环里的轮询和手工操作全部替换成事件驱动的自动化。
核心内容
App 开发是一个反复迭代的过程:写新功能或修 bug,上传 build 到 App Store Connect,分发给 beta tester,收到反馈,再开始下一轮。Dajinsol Jeon 在开场(01:04)点出问题:这个循环跑得越快越好,比如用户报 crash,应该尽快修复。但以前要做这件事,CI 系统得不停轮询 ASC,问”build 处理完了没”,“有新反馈了没”,要么就只能依赖 Xcode 或 Transporter 手工上传 build,效率低且难以接入自动化流水线。
今年 App Store Connect 把这一整圈打通了。Webhook 让 ASC 主动推送事件,Build Upload API 让任何语言、任何 CI 平台都能上传 build,Feedback API 让 TestFlight 的截图反馈和 crash 反馈直接进开发工具。三件事配合起来,CI 收到 webhook 就能继续下一步,不用再 sleep 30 秒后再调一次 GET。
详细内容
注册 webhook listener。 既可以在 ASC 网站 Users and Access → Integrations → Webhooks 点加号配置,也可以走 API(06:04)。API 注册的好处是当你管很多 app、需要给新 app 自动注册时一次搞定。
POST /v1/webhooks
{
"data": {
"type": "webhooks",
"attributes": {
"name": "My CI Webhook",
"url": "https://ci.example.com/asc-hook",
"secret": "<your-shared-secret>",
"eventTypes": [
"buildUploads.stateChanged",
"buildBetaDetails.stateChanged",
"betaFeedbackScreenshotSubmissions.created"
]
},
"relationships": {
"scope": { "data": { "type": "apps", "id": "<app-id>" } }
}
}
}
关键点:
url是你的 webhook listener 地址,ASC 会向它 POST 事件载荷。secret是你和 ASC 共享的密钥,可以是任意字符串,但只有你和 ASC 知道;它用于 HMAC-SHA256 签名校验。eventTypes选 5 类事件中的若干个:Build Upload State、Build Beta State、TestFlight Feedback、App Version State、Apple-Hosted Background Asset State(04:07)。- 成功返回 201 CREATED,body 里有 webhook ID,后续管理这个 webhook 要用。
上传 build 走四步。 创建 BuildUpload → 创建 BuildUploadFile → 按 upload operations 上传二进制 → PATCH 标记完成(07:42)。
POST /v1/buildUploads
{
"data": {
"type": "buildUploads",
"attributes": {
"cfBundleVersion": "42",
"platform": "IOS"
}
}
}
关键点:
- 第一步只声明这个 build 的元数据:bundle version 和目标平台。
- 返回 201 CREATED,body 里给你一个 BuildUpload 的 ID。
- 接下来用这个 ID 去创建 BuildUploadFile,告诉 ASC 文件名、字节数、asset type;ASC 就会回一组 upload operations,里面有目标 URL、要用 PUT 方法、要带哪些 header(09:01)。
- 文件大时 operations 数组可能有多条,意味着你要按 byte range 拆成多个 chunk 分别 PUT,不能假设只有一段。
- 全部 chunk 上传完后,PATCH 这个 BuildUpload,把
uploaded设为 true,ASC 才开始处理 build;成功返回 200 OK,state = COMPLETE。
Webhook 校验签名。 ASC 推送过来的请求会带 X-Apple-SIGNATURE header,算法是 HMAC-SHA256(10:51)。
signature = HMAC_SHA256(secret, raw_request_body)
verify : signature == X-Apple-SIGNATURE
关键点:
- 用注册时设的 secret 和原始 body 算 HMAC-SHA256。
- 算出的值和 header 比对,相等才认这个请求来自 Apple。
- 必须用 raw body,反序列化后再序列化的字符串顺序可能不一致,签名会对不上。
Webhook payload 是最小化的,详情得回调 API 取。 比如新截图反馈到了,payload 里只有 feedback 类型和 instance ID(13:46);拿到 ID 后调 GET /v1/betaFeedbackScreenshotSubmissions/{id},才能拿到设备信息、截图 URL;截图本身要用返回的 URL 单独下载。Crash 反馈同理,多一个 crashLog endpoint 用来下载 crash log(14:32)。
Build beta state 事件特别有用(12:12)。以前外部测试需要 Beta App Review,过完 review 没法立刻知道;现在 review 一过 ASC 就推 webhook,CI 可以立即触发后续的 notify testers 流程。
核心启发
-
做什么:搭一个最小可用的 ASC webhook 网关
- 为什么值得做:5 种事件覆盖了 build 上传、beta review、版本状态、反馈、Apple-Hosted Asset;接一次,整条流水线就拿到了实时信号源。
- 怎么开始:起一个 HTTP 服务暴露
/asc-hook,先实现 HMAC-SHA256 校验,验证失败 401;验证通过把 raw payload 落库或丢进队列,立刻返回 200。先不要在请求线程里干重活,避免 ASC 超时重试。
-
做什么:把 build 上传从 Xcode 搬到 CI
- 为什么值得做:Build Upload API 是标准 REST,任何语言、任何 CI 都能调;不再依赖 Mac runner 上的 Xcode altool 或 Transporter,错误信息也是结构化的,方便重试。
- 怎么开始:写一个上传脚本,按四步顺序调 API;遇到 upload operations 数组要遍历,按 byte range 切 ipa 文件分段 PUT;最后 PATCH
uploaded=true,然后等 webhook 推 COMPLETE 再继续后续步骤。
-
做什么:把 TestFlight 反馈灌进自家 issue 系统
- 为什么值得做:截图反馈和 crash 反馈是用户最直接的声音,但散落在 ASC 后台容易漏;接进 Jira/Linear/GitHub Issues 后,每条反馈都自带设备信息和截图,不会被错过。
- 怎么开始:监听
betaFeedbackScreenshotSubmissions.created和 crash 对应事件;收到后用 ID 调 Feedback API 拿详情,下载截图或 crash log,再调你的 issue tracker API 自动建单,自带 reporter、设备、版本等字段。
-
做什么:做一条”build review 通过即通知”的自动化
- 为什么值得做:build beta state webhook 是今年新增的事件,外部 tester 的发布延迟主要卡在等审核,能即时感知到 review 完成意味着可以零延迟通知用户。
- 怎么开始:订阅
buildBetaDetails.stateChanged,payload 里包含 build ID 和最新状态;状态进入可外部测试时,调 TestFlight API 派发到外部 group,再发邮件或 IM 通知 tester。
关联 Session
- What’s new in App Store Connect — App Store Connect 今年的整体更新,包含 build 管理新 Web UI 与 feedback digest。
- Discover Apple-Hosted Background Assets — Apple-Hosted Background Asset 上传与版本管理,本 session 提到的第 4 套 webhook 事件来自这里。
- Optimize your monetization with App Analytics — App Analytics 新增的订阅与变现指标,可与 ASC API 一起接入数据看板。
- What’s new in StoreKit and In-App Purchase — StoreKit 与内购 API 更新,与 ASC API 共同覆盖 app 全生命周期自动化。
评论
GitHub Issues · utterances