Apple 与 iOS 配置
Apple 开发者账号、Bundle ID、Capabilities 和 iOS 发布前的完整配置路径
你将学到
- iOS 发布链路中 5 层身份是怎么串联的
- Apple Developer 账号该选 Individual 还是 Organization
- Bundle ID 注册和 Capabilities 开启的完整步骤
- Widget、App Group、Deep Link 和 Universal Links 的区别与适用场景
iOS 发布链路概览
从代码到 App Store,有 5 层身份必须逐一对齐。
代码层 — app.json
写入 App name、scheme、bundleIdentifier。这里定义了「这个 App 叫什么」。
账号层 — Apple Developer
决定谁拥有这个 App 身份。Individual 显示个人姓名,Organization 显示公司法律实体。
能力层 — Capabilities
开启登录、推送、Universal Links、App Group 等系统能力。只开当前需要的。
签名层 — EAS Build
准备证书和 provisioning profile,生成可安装的 .ipa 包。
分发层 — App Store Connect
TestFlight 内测、审核、正式发布。
只记一个判断标准:app.json 里的 expo.ios.bundleIdentifier、Apple Developer 里的 App ID、App Store Connect 里的 Bundle ID,必须是同一个值。
{
"expo": {
"name": "Your App",
"slug": "your-app-mobile",
"scheme": "yourapp",
"ios": {
"bundleIdentifier": "com.yourcompany.yourapp"
},
"android": {
"package": "com.yourcompany.yourapp"
}
}
}scheme 要和 EXPO_PUBLIC_APP_SCHEME 一致。服务端还要配置 NATIVE_APP_SCHEME,让 Better Auth 知道移动端回跳地址是可信的。这部分在 登录与 API 里会讲到。
Apple Developer 账号
iOS 真机分发、TestFlight、App Store 上架都需要 Apple Developer Program。免费 Apple Account 只适合本机调试,不能正式发布。
Individual — 个人开发者。App Store 里显示个人姓名,适合还没有公司主体的独立开发者。注册流程相对简单。
Organization — 公司或工作室。App Store 里显示公司法律实体名称,需要 D-U-N-S Number 和组织验证。
普通产品上架 App Store,个人选 Individual,公司选 Organization。中文里经常把 Organization 叫「企业账号」,但它和 Apple Developer Enterprise Program(大型组织内部分发,不做 App Store 上架)不是一回事。
Organization 要准备什么
| 材料 | 用途 |
|---|---|
| 公司英文法律名称 | 和 D-U-N-S、营业执照主体对应 |
| 公司英文注册地址 | 用于组织验证 |
| D-U-N-S Number | D&B 提供的九位组织编号 |
| 企业邮箱 | 建议使用公司域名邮箱 |
| 公司官网 | 页面里能看出公司主体和产品关系 |
| 申请人身份和职位 | Apple 可能核验你是否能代表公司签约 |
| 营业执照、身份证明、在职证明 | Apple 要求补材料时使用 |
中国大陆公司可以先在 D&B 的企业信息入口核验资料,再在 Apple 的 D-U-N-S 流程里查编号。填写时尽量使用英文公司名和英文注册地址,避免同一公司出现多套拼写。
账号通过后记录这些信息
这些信息不要放进 App 包,也不要写到公开环境变量里。建议放在团队内部文档或密码管理工具中:
- Apple Developer Team ID
- Account Holder 是谁
- App Store Connect 里谁有 Admin / App Manager 权限
- App Store Connect API Key 的保存位置
- EAS project 使用哪个 Apple team
- 证书、profile 和设备管理由谁负责
app.json 里不需要写 Apple 账号密码。EAS 构建时会通过登录流程或 API Key 处理签名和上传。
权限分工
| 操作 | 需要谁能做 |
|---|---|
| 注册 App ID / App Group | Apple Developer 后台有权限的成员 |
| 管理证书和 profile | Account Holder、Admin 或具备证书权限的成员 |
| 创建 App Store Connect app record | App Store Connect Admin / App Manager |
| 上传 TestFlight build | EAS Submit 或 Transporter 所用账号 / API Key |
| 提交审核 | App Manager 或更高权限 |
如果你让 EAS 自动管理签名,第一次交互式构建最好由有足够 Apple Developer 权限的人来跑。
注册 Bundle ID
在 Apple Developer 后台注册 App ID 的步骤:
https://developer.apple.com/account/resources/identifiers/list- 点击
Identifiers旁的加号 - 选择
App IDs→App - 选择
Explicit App ID(比 Wildcard 更适合正式产品,因为登录、推送、内购都需要明确绑定到具体 App 身份) - 填入和
app.json一致的 Bundle ID,例如com.yourcompany.yourapp - 勾选当前需要的 Capabilities
- 点 Register
注册完成后回到 app.json 确认 expo.ios.bundleIdentifier 完全一致。
开启 Capabilities
每个 Capability 都意味着一组系统权限、额外的签名要求和审核关注点。只开当前真正需要的能力。
| 能力 | 什么时候接 | 文档提醒 |
|---|---|---|
| Sign in with Apple | App 内要支持 Apple 原生登录 | 还要在 Better Auth / OAuth 配置里接回调 |
| Push Notifications | 服务端要给 App 发远程推送 | Expo Go 无法完整验证,应该用 development build |
| Associated Domains | 要做 Universal Links,从网页自然打开 App | 还要配置网站端的 association 文件 |
| App Groups | 主 App 和 Widget / extension 要共享数据 | 主 App 和 Widget target 都要绑定同一个 group |
| In-App Purchase | App Store 内购和订阅 | RevenueCat、商店产品和服务端会员权益要对齐 |
每多开一个 capability,都会增加签名、测试、审核和隐私说明的工作量。
Widget 与 App Group
默认 mobile 模板不带 Widget。如果你要加 iOS 小组件,至少需要三类 identifier:
com.yourcompany.yourapp # 主 App
com.yourcompany.yourapp.widgets # Widget
group.com.yourcompany.yourapp # 共享容器配置顺序:
- 注册主 App ID,勾选 App Groups
- 注册 Widget App ID,也勾选 App Groups
- 注册
group.com.yourcompany.yourapp - 回到主 App ID 和 Widget App ID,把这个 App Group 都绑定上
- 在
app.json的相关 Expo plugin 里写入 Widget Bundle ID 和 group identifier
主 App 和 Widget 是两个 target,Bundle ID 不能共用。App Group 是它们之间的共享数据容器。
Deep Link 与 Universal Links
scheme 和 Universal Links 是两套不同的机制。
| 类型 | 示例 | 适合 |
|---|---|---|
| Custom scheme | yourapp://auth/callback | App 内跳转、OAuth 回跳、开发期更容易跑通 |
| Universal Link | https://yourapp.com/app/invite | 从网页、邮件、短信点击后自然打开 App |
01MVP mobile 默认先用 EXPO_PUBLIC_APP_SCHEME 处理移动端回跳。等你需要从网页自然打开 App 时,再接 Associated Domains 和 Universal Links。
检查清单
- Apple Developer Program 已开通,协议和付款状态正常
app.json的expo.ios.bundleIdentifier和 Apple Developer App ID 完全一致EXPO_PUBLIC_APP_SCHEME和app.json的expo.scheme一致- 服务端部署了对应的
NATIVE_APP_SCHEME - 只开启了当前需要的 Capabilities
- Widget 有独立 Bundle ID(如果有的话)
- App Group 已绑定到所有需要共享数据的 target(如果有的话)
- 改 Capabilities 后重新做了 development build 或 preview build
参考资料
- Apple Developer Account Help
- Apple Developer Program Enrollment
- Apple D-U-N-S Number
- Register an App ID
- Enable app capabilities
- Register an app group
- Expo app config
- App Store Connect Help
下一步
Bundle ID 和 Capabilities 就位后,下一步是 iOS 签名与 EAS 凭据 —— 理解 certificate、provisioning profile,让 EAS 生成可安装的包。
这篇文档有问题?