集成Apple 平台
00 / 00
Bundle ID、App ID 和 App Group
理解 Apple 应用身份、扩展身份、系统能力和共享容器的关系
Apple 体系里最容易混的几个名字是 Bundle ID、App ID、App Group 和 App Store Connect Apple ID。它们不是一回事。
Bundle ID
你给 App 定的固定身份,例如
com.01mvp.onesay。App ID
Apple Developer 里注册出来的记录,绑定 Bundle ID 和系统能力。
App Group
主 App 和 Widget、扩展共享数据的容器,例如
group.com.01mvp.onesay。App Store Connect Apple ID
商店后台生成的数字 ID,不写进代码里的 Bundle ID。
为什么要固定 Bundle ID
Bundle ID 是系统、商店、证书、推送、内购、权限记录共同识别应用的主键。发布后乱改,系统会把它当成另一个应用。
| 影响面 | Bundle ID 变了会怎样 |
|---|---|
| iOS / macOS 系统 | 可能被识别成另一个 App,权限、数据、Keychain 记录不再对应 |
| App Store Connect | 已创建的 app record 不能直接换成另一个 Bundle ID |
| 推送和内购 | APNs、IAP 等能力都绑定在对应 App ID 上 |
| Widget / Extension | 每个 target 都要有自己的 Bundle ID |
| macOS TCC 权限 | 麦克风、辅助功能、输入监听等权限可能要重新授权 |
一个 App 为什么会有多个 ID
iOS 主 App、Widget、Share Extension、App Clip 都是不同的 target。Apple 要分别识别它们,所以每个 target 都要有自己的 Bundle ID。
主 App
com.01mvp.onesay用户真正打开的应用。
Widget,小组件
com.01mvp.onesay.widgetsiOS 桌面或锁屏上的小组件,它是一个独立 target。
App Group,共享容器
group.com.01mvp.onesay主 App 和 Widget 都加入这个 group,才能共享少量数据。
macOS / Tauri 桌面端
com.01mvp.onesay.desktop桌面端是另一个应用,通常用独立 Bundle ID。
App ID 负责什么
在 Apple Developer 里注册 App ID 时,你会选择 explicit App ID,并填入 Bundle ID。之后勾选 capabilities。
常见 capabilities:
| 能力 | 什么时候开 |
|---|---|
| App Groups | 主 App 和 Widget、Share Extension 等扩展共享数据 |
| Push Notifications | 需要 APNs 推送 |
| Sign in with Apple | 接入苹果登录 |
| Associated Domains | Universal Links、网页到 App 的关联 |
| In-App Purchase | iOS 内购,explicit App ID 默认支持 |
改 capabilities 后,相关 provisioning profile 可能会失效。EAS 或 Xcode 自动签名时通常会帮你重新生成;手动管理证书时要自己更新 profile。
注册顺序
1
定 Bundle ID
先按品牌和域名确定长期不变的命名。
2
注册 App ID
在 Apple Developer 里创建 explicit App ID。
3
开 capabilities
只开当前真的需要的能力。
4
注册 App Group
有 Widget 或扩展共享数据时再做。
5
代码写同一个值
Expo、Xcode、Tauri 配置必须和后台一致。
官方资料
这篇文档有问题?