Eas build iOS卡死在Fetched Apple distribution certificates
如果你现在卡在:
Fetched Apple distribution certificates
👉 这是 EAS local build 在“证书已拿到,但被 macOS Keychain 阻塞”的经典卡点
而且 只在本地构建会出现,云端不会。
下面我按Expo 官方实现 + macOS 行为给你拆清楚。
✅ 这一步到底发生了什么(不是字面意思)
当你看到:
Fetched Apple distribution certificates
实际上 EAS 已经做完了这几件事:
-
✅ 从 Expo 服务器成功取回
.p12/ cert metadata -
✅ 解密成功
-
⛔ 准备把证书导入 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 看不到弹窗,于是永远卡住