A Bundle ID is the reverse-DNS string that uniquely identifies a single app (or extension, or watch companion app) on Apple's platforms. It lives in CFBundleIdentifier inside the .app bundle's Info.plist. Once a Bundle ID is taken on the App Store, it cannot be reused by anyone else, which is why Xcode reports Failed to register bundle identifier when you pick one that somebody already owns.
How to find an app's bundle ID
- In Xcode: the target's General tab, Bundle Identifier field, or the
PRODUCT_BUNDLE_IDENTIFIERbuild setting. - In a built app: the
CFBundleIdentifierkey in the .app bundle's Info.plist. - In App Store Connect: General > App Information, under Bundle ID.
- For someone else's published app: Apple's public lookup endpoint, keyed on the App Store ID from the store URL.
# From a built app on disk /usr/libexec/PlistBuddy -c 'Print :CFBundleIdentifier' MyApp.app/Info.plist # From an .ipa, without unzipping the whole thing unzip -p MyApp.ipa 'Payload/*.app/Info.plist' \ | plutil -extract CFBundleIdentifier raw - # From a published App Store listing (id123456789 in the store URL) curl -s 'https://itunes.apple.com/lookup?id=123456789' | jq -r '.results[0].bundleId'
How it relates to App ID and Team ID
- Your Bundle ID is
com.example.app. - Your registered App ID is
TEAMID.com.example.app. - Your provisioning profile binds the App ID to one or more signing certificates and (for Development and Ad Hoc) a device list.
- Your build is then signed against that profile, with the matching
CFBundleIdentifierbaked into the .app at compile time.
Subdomain conventions
App extensions, widgets, watch apps, and Notification Service Extensions use sub-bundles whose Bundle ID is the parent's plus a suffix:
- App:
com.example.app - Watch app:
com.example.app.watchkitapp - Today widget:
com.example.app.TodayExtension - Notification service:
com.example.app.NotificationService