00 / 00

iOS 签名与 EAS 凭据

理解 iOS certificate、provisioning profile、Ad Hoc、TestFlight 和 EAS 自动签名

Bundle ID 只是说明 App 叫什么。iOS 设备还要确认,这个安装包来自哪个 Apple Developer 团队,它被允许装到哪些设备、使用哪些能力、走哪种分发方式。

这就是签名、证书和 provisioning profile 的作用。

三个核心概念

Certificate

团队的签字笔,证明这个包由哪个开发团队签出。

Private Key

签字笔的笔芯。丢了它,这张证书就没法继续签包。

Provisioning Profile

Apple 的批准书,写明哪个 App、哪些设备、哪些能力、哪种分发可用。

如果你用 EAS Build,很多签名细节可以交给 EAS 管理。但你仍然要知道 profile 为什么会失效、为什么 iOS preview 包不是任何手机都能装、为什么改 capability 后要重新构建。

profile 和分发方式

场景常见 profile用途
本机开发development profile自己调试和开发版 App
Preview 内测Ad Hoc profile只允许登记过 UDID 的设备安装
TestFlight / App StoreApp Store profile上传到 App Store Connect

Ad Hoc 是很多新手最容易踩坑的地方。你把 preview 链接发给朋友,如果他的 iPhone 没登记进设备列表,包就装不上。新增设备后通常要刷新 profile 并重新构建或重新签名。

EAS 会做什么

当你运行:

vpr @01mvp/mobile#eas:build:development
vpr @01mvp/mobile#eas:build:preview
vpr @01mvp/mobile#eas:build:production

EAS 会读取 products/01mvp/apps/mobile/app.jsoneas.json,再根据 profile 准备构建环境和签名凭据。

如果你选择让 EAS 管理凭据,它通常会处理:

  • 创建或复用 Apple Distribution Certificate。
  • 创建或复用 provisioning profile。
  • 读取和注册 Ad Hoc 测试设备。
  • 为 production build 准备 App Store 分发所需凭据。

正式项目建议先在 Apple Developer 里手动注册 App ID 和 capabilities,再让 EAS 处理证书和 profile。这样身份是你先定好的,EAS 只负责签名和构建。

什么时候需要重新签名或重建

改动需要什么
只改 JS 页面、文案、样式可以走本地开发或 EAS Update
新增原生依赖或 Expo plugin重新 development / preview / production build
修改 Bundle ID、scheme、图标、启动页重新 build
开启 Push、Associated Domains、App Groups更新 capabilities 和 profile,再重新 build
iOS preview 新增测试设备刷新 Ad Hoc profile,再重新 build 或 resign
证书过期或被撤销更新证书,再重新 build

EAS 凭据要怎么管

小团队可以先用 EAS 自动管理。等产品稳定、团队变大,再考虑更严格的证书流程。

适合 EAS 自动管理:

  • 你用 Expo / EAS Build 构建 iOS。
  • 团队愿意让 EAS 托管 signing credentials。
  • 没有单独的企业证书管理要求。

适合手动管理:

  • 公司安全策略不允许第三方托管私钥。
  • 多个构建系统要共用同一套证书。
  • 需要精细控制证书创建、吊销和权限。

无论哪种方式,都要记录证书由谁管理、EAS project 属于哪个 Expo 账号、Apple team 是哪个团队。

常见错误

错误可能原因
iOS preview 安装失败设备 UDID 没登记,或 profile 没刷新
EAS 构建时找不到 Bundle IDApple Developer 没注册 App ID,或账号权限不足
开启能力后 App 仍然不可用capabilities 改了但没有重新 build
TestFlight 上传失败App Store Connect app record、Bundle ID 或签名 profile 不匹配
换人构建后签名异常证书私钥、EAS credentials 或 Apple team 权限不一致

官方参考

这篇文档有问题?