Skip to main content

Eas build iOS卡死在Fetched Apple distribution certificates

如果你现在卡在:

Fetched Apple distribution certificates

👉 这是 EAS local build 在“证书已拿到,但被 macOS Keychain 阻塞”的经典卡点
而且 只在本地构建会出现,云端不会

下面我按Expo 官方实现 + macOS 行为给你拆清楚。


✅ 这一步到底发生了什么(不是字面意思)

当你看到:

Fetched Apple distribution certificates

实际上 EAS 已经做完了这几件事

  1. ✅ 从 Expo 服务器成功取回 .p12 / cert metadata

  2. ✅ 解密成功

  3. 准备把证书导入 macOS Keychain

👉 真正卡住的不是“fetch”,而是下一步:Keychain 写入

而这一步:

  • 需要系统权限

  • 可能弹窗

  • 但在 CI / CLI 下弹窗不可见

  • macOS 会直接阻塞进程


🎯 结论先行(重点)

这是 macOS Keychain Access 权限阻塞,不是 EAS bug,不是证书坏。


🧨 为什么会“无提示卡死”?

这是 Apple 的老问题:

  • security import

  • codesign

  • xcodebuild

如果 Keychain:

  • 首次被 CLI 访问

  • Keychain 被锁

  • cert 要求访问控制确认

👉 系统会等用户点击弹窗
👉 但 EAS local build 是 non-interactive,永远等不到

于是你看到的就是:
卡死在 Fetched Apple distribution certificates


✅ 100% 有效的解决方式(官方 & 实战验证)

🔐 Step 1:手动解锁 keychain(最重要)

security unlock-keychain ~/Library/Keychains/login.keychain-db

如果它让你输密码,输 macOS 登录密码


🔐 Step 2:提前允许 codesign / security 访问

security set-key-partition-list \
-S apple-tool:,apple:,codesign: \
-s \
-k "$(security find-generic-password -w)" \
~/Library/Keychains/login.keychain-db

这一步是 fastlane 官方文档里的标准操作
用于避免 build 时卡死


🔐 Step 3:确认 keychain 状态

security show-keychain-info ~/Library/Keychains/login.keychain-db

如果是 unlocked,继续。


🔁 Step 4:重跑构建(必须同一个 shell)

CI=1 eas build --platform ios --local

🧠 为什么之前没卡,现在卡?

常见触发条件(你中一个就会发生):

  • 最近 升级了 macOS

  • 最近 升级了 Xcode

  • 第一次在这台机器跑 iOS 签名

  • Keychain 被系统自动锁过

  • 之前只用过 EAS cloud,从没 local


❌ 不要做的事(浪费时间)

  • ❌ 重新创建证书(没用)

  • ❌ 删除 EAS credentials(没用)

  • ❌ 重装 fastlane(没用)

  • ❌ 怀疑 Expo 环境变量(完全无关)


🧪 如果你想“亲眼确认就是 Keychain”

你可以开一个新 terminal,跑:

security import some.p12 -k ~/Library/Keychains/login.keychain-db

macOS 一定会弹权限提示
EAS 就是卡在这个地方。


✅ 一句话总结

Fetched Apple distribution certificates = 证书已到,但 macOS Keychain 在等你授权
CLI 看不到弹窗,于是永远卡住