icloud 登录卡在验证码输入之后最后一步&iphone镜像无法使用 💬 去评论

根因

/Library/Keychains/apsd.keychain 这个文件损坏了,导致 APNs 推送服务(apsd)无法生成密钥对,拿不到设备推送证书,推送通道彻底断开。时间点是 2025-11-23(该文件的最后修改日期),已经坏了 9 个月。

完整因果链

apsd.keychain 数据库损坏 (CSSMERR_DL_DATABASE_CORRUPT) → SecKeyCreatePair 失败 (-25295),无法生成密钥对 → 拿不到 APNs 客户端证书 (Failed to get client cert,重试 78 次) → 推送通道连不上 (Connected on 0 interfaces,连续失败 70 次) ├→ iCloud 登录:circle 握手拿不到对端响应,卡在 step 0 │ → 验证码被丢弃 (Code entered, but no handshake has been completed) │ → 反复弹回登录框 └→ IDS 注册:拿不到 registration certificate (Reg Cert: 0x0) → 所有服务 Unregistered、ServerRegistrationUnsupported → 配对设备数 = 0 → iPhone 镜像 / AirDrop 认自有设备 / 接力 全部失效

你最初反馈的"iPhone 镜像用不了",是这条链最末端的一个症状。

时间线佐证:apsd.keychain 2025-11-23 损坏 → ids-gossip.db 停在 11-06、iPhone 镜像最后成功 11-16、TetraDB 12-02、「查找」设备缓存 12-05。推送身份一死,上层依赖它的存储全部停止更新。

解决方案

sudo cp /Library/Keychains/apsd.keychain ~/Desktop/apsd.keychain.backup sudo mv /Library/Keychains/apsd.keychain /Library/Keychains/apsd.keychain.corrupt sudo killall apsd

三步都必要,缺一不可:备份 → 挪走损坏文件 → 重启 apsd。中间那次失败就是因为只挪了文件没重启——进程仍持有原 inode,照样读的是损坏数据库。apsd 由 launchd 托管,kill 后自动拉起,新进程发现文件不存在就重建了一个干净的(48KB,原损坏文件 203KB)。

之后重新登录 iCloud 即可,验证码这次能正常走完。

排查中排除的假设

这些都验证过、都不是原因,列出来免得以后重复走:

  • 配对记录过期 —— 清掉 onenessPairedDeviceID 后无改善
  • Apple 账户不一致 —— 两台设备都是 xxx.qq.com
  • MDM 策略禁用 —— 遍历 /Library/Managed Preferences/ 全部 plist,allowiPhoneMirroring 键不存在
  • macOS 27 beta 的 bug —— beta 是 2026-08 才装的,故障 2025-11 就开始了,时间对不上
  • 公司网络/代理拦截 —— albert.apple.com 和 static.ess.apple.com 都是 HTTP 200,courier.push.apple.com:5223 TLS 握手完整完成且证书验证通过,PAC 不代理 push 相关域名,XAgent 和 AnyConnect 的过滤器日志里没有 apsd 相关拦截
  • 蓝牙/Wi-Fi/AWDL 故障 —— awdl0 active、AirDrop Bonjour 正常广播、防火墙关闭、时钟同步正常
  • System.keychain 或登录钥匙串损坏 —— 这两个都正常(分别能读出 7 张和 38 张证书),损坏只在 apsd.keychain 一个文件

正文来自 GitHub issue,评论请前往原文。

前往 GitHub 评论 →