App Bundle ID — 是什么、应用标识符与注册

作者: IT Sectr 发布日期: 2026-04-17 阅读时间: 8 分钟

App Bundle ID — 是 Apple 和 Google 生态系统中用于注册、签名和分发软件产品的唯一应用标识符。每个应用在创建项目时都会获得自己的 Bundle ID,并且该标识符在整个生命周期内保持不变。根据 Apple Developer Documentation,Bundle ID 用于绑定服务、证书和签名配置文件。

要点

  • App Bundle ID — 全局标识符,商店中每个应用唯一
  • 格式 基于反向域名表示法:com.company.appname
  • 注册 在 App Store Connect 和 Google Play Console 中完成
  • 更改 Bundle ID 在发布后无法实现,除非创建新应用
  • 绑定 服务(Push、CloudKit、Firebase)通过 Bundle ID 实现

什么是 App Bundle ID

Bundle Identifier — 是在操作系统和应用商店中唯一标识应用的字符串。在 iOS 和 macOS 中称为 Bundle ID,在 Android 中称为 Package Name,尽管功能上两者扮演相同的角色:确保应用在设备和商店中的唯一性。

Bundle ID 的用途

操作系统使用 Bundle ID 来区分设备上的应用。两个具有相同标识符的应用无法同时安装 — 系统将它们视为同一产品。应用商店在发布时也会检查 Bundle ID 的唯一性。

历史与命名标准

Apple 在 2008 年随着 iOS SDK 的发布引入了 Bundle ID。反向域名表示法格式借鉴自 Java(包命名约定),用于防止类名冲突。Google 为 Android 采纳了这一做法,确保了两种移动生态系统的一致性。

平台字段名称示例
iOS/macOSBundle Identifiercom.example.myapp
AndroidPackage Namecom.example.myapp
watchOSBundle Identifiercom.example.myapp.watchkit
tvOSBundle Identifiercom.example.myapp.tvos

Bundle ID 格式的结构

Bundle ID 由多个用点分隔的段组成。第一部分 — 开发者或公司的标识符(com、org、net)。第二部分 — 公司域名(example、google、apple)。后续段指定应用和平台的名称。

Bundle ID 的结构

典型的 Bundle ID 看起来像 com.company.appname。Apple 建议使用域名的反向表示法以确保全局唯一性。如果公司没有域名,允许使用电子邮件:com.example.myapp 或 org.example.myapp。

  • 段 1 — 反向顺序的 TLD:com、org、io、net
  • 段 2 — 公司或开发者的域名:google、apple、mycompany
  • 段 3 — 应用名称:maps、mail、notes
  • 附加 — 平台或扩展:watchkit、todaywidget

通配符 Bundle ID

Apple 支持 通配符 Bundle ID — 带星号的标识符模板:com.example.*。此类模板允许一家公司的多个应用使用一个 App ID。通配符 ID 在开发阶段很方便,但不建议用于生产环境,因为它限制了一些 Apple 服务的使用。

通配符限制:推送通知、CloudKit、应用内购买和 Game Center 需要精确(explicit)Bundle ID。使用 com.example.* 模板时,这些服务不可用。对于生产应用,请始终使用显式 Bundle ID 以确保所有 Apple 服务的完整功能。

除了通配符,Apple 还支持 前缀标识符,这些标识符在注册 Apple Developer Program 时分配给开发团队。前缀(Team ID)自动添加到所有 App ID 和签名配置文件中。两个不同的 Team ID 可以创建相同的 Bundle ID,但在设备上它们被视为不同的应用。

在控制台中注册 Bundle ID

注册 Bundle ID — 发布应用前的必经阶段。在 Apple 生态系统中,注册通过 Apple Developer Portal 的 Certificates, Identifiers & Profiles 部分完成。在 Google Play 中,Bundle ID 在开发者控制台创建应用时指定。

在 Apple Developer Portal 中注册

Apple Developer 门户上,选择 Identifiers 部分,单击 Register 按钮并指定 App ID 类型。输入 Bundle ID 的确切名称并选择所需的功能:推送通知、CloudKit、Sign in with Apple。注册后,标识符可用于创建签名配置文件。

swift
// 在应用代码中检查 Bundle ID
let bundleID = Bundle.main.bundleIdentifier
print("当前 Bundle ID:\(bundleID ?? "unknown")")

// 检查编译条件的 Bundle ID
if bundleID == "com.example.app.production" {
    // 生产配置
    Analytics.shared.configure(.production)
}

在 Google Play Console 中注册

Google Play Console 不要求事先注册 Bundle ID。标识符在应用模块的 build.gradle 文件中指定,并且在整个 Google Play 中必须是唯一的。创建应用后,Package Name 无法更改,因此请仔细选择标识符并通过在 Google Play 中搜索来检查其唯一性。Google 不会释放已删除应用的标识符,因此一旦被占用的 Bundle ID 对其他开发者将保持不可用。

App Store Connect 中注册时,必须从现有已注册标识符集中指定一个 Bundle ID。如果标识符尚未在 Apple Developer 门户上注册,系统将建议自动创建它。注册后,Bundle ID 绑定到团队,并且无法在未联系 Apple 支持的情况下转移到其他开发者帐户。每个 Bundle ID 可以有多个用于不同环境的签名配置文件:Development、Ad Hoc、App Store。

为带有扩展的 iOS 应用注册 Bundle ID 时,每个组件必须单独注册。小部件、键盘、Notification Service 和 Watch App 的扩展拥有自己从主要标识符派生的标识符。App Store Connect 在创建 App Record 时将它们组合到一组中,从而允许将所有组件作为一个应用发布。

在 Xcode 项目中配置 Bundle ID

配置 Bundle ID 在 Xcode 中在多个位置进行:Info.plist、Build Settings 和 Signing & Capabilities。中心字段 — 应用目标中的 Bundle Identifier。从推送通知到 CloudKit 的所有 Apple 服务都绑定到此标识符。错误指定的 Bundle ID 会导致签名错误和无法在 App Store 中发布。

在 Xcode 中更改 Bundle ID

xml
<!-- Info.plist — 项目的基本 Bundle ID -->
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>

<!-- Build Settings — PRODUCT_BUNDLE_IDENTIFIER 变量 -->
<!-- Debug: com.example.app.dev -->
<!-- Release: com.example.app -->

Xcode 在 Build Settings 中使用 PRODUCT_BUNDLE_IDENTIFIER 变量。对于不同的编译配置可以设置不同的值:Debug 为 com.example.app.dev,Release 为 com.example.app。这便于在同一设备上并行安装开发版本和生产版本进行测试。

多目标配置

如果应用有扩展(Notification Service、Widget、Watch App),每个扩展都会获得带有后缀的自己的 Bundle ID。主应用:com.example.app。小部件扩展:com.example.app.widget。Watch App:com.example.app.watchkit。每个标识符在 Apple Developer Portal 中单独注册并获取单独的签名配置文件。Xcode 在编译时自动管理这些依赖关系。

App Bundle ID 与 Package Name 的区别

App Bundle ID(Apple)和 Package Name(Google)— 是具有相同目的但不同使用规则的类似实体,分别用于 iOS 和 Android 生态系统。两个标识符都使用反向域名表示法,并且在官方应用商店发布后无法更改。

功能区别

在 Apple 生态系统中,Bundle ID 与签名配置文件和证书相关联。更换开发团队时,Bundle ID 可以通过 App Store Connect 在帐户之间转移。在 Android 中,Package Name 严格绑定到 Google Play 中的应用,无法在开发者帐户之间转移。

特性iOS Bundle IDAndroid Package Name
最大长度无限制150 个字符
段分隔符点 (.)点 (.)
允许的字符A-Z、a-z、0-9、点、连字符A-Z、a-z、0-9、点、下划线
通配符支持 (*)不支持
在代码中的使用Bundle.main.bundleIdentifierBuildConfig.APPLICATION_ID

尽管存在差异,这两个标识符都起着关键作用:没有它们,就无法在官方商店中发布应用。建议对于跨平台项目 — 在 iOS 和 Android 版本中使用相同的标识符,以简化与 Firebase、Analytics 和其他服务的集成。这也方便了开发团队的导航:两个项目使用一个标识符减少了在配置 CI/CD 和环境设置时的混乱。

在使用 Flutter 或 React Native 进行开发时,统一的标识符尤为重要,因为代码库是共享的,许多自动编译工具期望两个平台使用相同的包名。Firebase 项目也绑定到 iOS 和 Android 的一个标识符,这简化了分析和错误报告的配置。

常见问题

应用发布后能否更改 Bundle ID?

更改 Bundle ID 在 App Store 或 Google Play 发布后是不可能的。系统会将新标识符视为完全不同的应用。要更新现有产品,Bundle ID 必须在应用的整个生命周期内保持不变。

如果两个应用具有相同的 Bundle ID 会发生什么?

iOS 或 Android 设备不允许安装具有相同标识符的第二个应用覆盖第一个。系统将显示错误并建议删除现有应用。在商店中,使用重复 Bundle ID 的发布也将被阻止。

如何为新项目正确选择 Bundle ID?

使用您公司的 反向域名表示法:com.公司名.应用名。避免连字符和特殊字符。如果应用有扩展,通过点添加后缀。确保标识符唯一且未被其他开发者占用。

应用的每个扩展是否需要单独的 Bundle ID?

是的,每个扩展 — 小部件、Watch App、Notification Service — 都需要自己的 Bundle ID。标识符形成层次结构:com.example.app 为基础,com.example.app.widget 为小部件,com.example.app.watchkit 为 Watch。它们都在 Apple Developer Portal 中单独注册,并与父应用使用共同的 App ID。

Apple Developer 门户中 Bundle ID 和 App ID 有什么区别?

Bundle ID — 是应用代码中的标识符字符串。App ID — 是 Apple Developer Portal 中的对象,它将 Bundle ID 与一组已启用的服务(capabilities)组合在一起。App ID 基于 Bundle ID 创建,用于生成签名配置文件。

总结

  • App Bundle ID — iOS 和 Android 生态系统中应用的唯一标识符
  • 格式 基于反向域名表示法:com.company.appname
  • 更改 Bundle ID 在发布后无法实现,除非在商店中创建新应用
  • 通配符 Bundle ID com.example.* 便于开发,但与 Push、CloudKit 和应用内购买不兼容
  • 扩展 通过点获得带有后缀的自己的 Bundle ID
  • 注册 分别在 Apple Developer Portal 和 Google Play Console 中完成
  • 建议 — 明智地选择标识符,在发布前检查唯一性

我们将开发一款交钥匙移动应用程序

IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。

讨论项目

另请阅读