iOS 签名与 EAS 凭据
理解 iOS certificate、provisioning profile、Ad Hoc、TestFlight 和 EAS 自动签名
Bundle ID 只是说明 App 叫什么。iOS 设备还要确认,这个安装包来自哪个 Apple Developer 团队,它被允许装到哪些设备、使用哪些能力、走哪种分发方式。
这就是签名、证书和 provisioning profile 的作用。
你将学到
- Certificate、Private Key 和 Provisioning Profile 各自是什么
- Ad Hoc profile 的常见坑,以及为什么 preview 包不是所有手机都能装
- EAS Build 在签名过程中帮你做了什么
- 什么改动需要重新签名或重建
- 常见签名错误怎么排查
三个核心概念
把 iOS 签名想成三个东西:
- 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 Store | App 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:productionEAS 会读取 products/01mvp/apps/mobile/app.json 和 eas.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 自动管理:你用 Expo / EAS Build 构建 iOS,团队愿意让 EAS 托管 signing credentials,没有单独的企业证书管理要求。
适合手动管理:公司安全策略不允许第三方托管私钥,多个构建系统要共用同一套证书,需要精细控制证书创建、吊销和权限。
无论哪种方式,都要记录证书由谁管理、EAS project 属于哪个 Expo 账号、Apple team 是哪个团队。
常见错误
| 错误 | 可能原因 |
|---|---|
| iOS preview 安装失败 | 设备 UDID 没登记,或 profile 没刷新 |
| EAS 构建时找不到 Bundle ID | Apple Developer 没注册 App ID,或账号权限不足 |
| 开启能力后 App 仍然不可用 | capabilities 改了但没有重新 build |
| TestFlight 上传失败 | App Store Connect app record、Bundle ID 或签名 profile 不匹配 |
| 换人构建后签名异常 | 证书私钥、EAS credentials 或 Apple team 权限不一致 |
官方参考
- Apple certificates overview
- Apple provisioning profiles overview
- Expo iOS app signing
- EAS Build internal distribution
下一步
签名和凭据搞定了,接下来去 App Store Connect 与 TestFlight 创建商店记录并准备提交审核。
想和其他创造者交流?
这篇文档有问题?