How to set a bundle ID for your iOS app
What a bundle ID is and why it matters
The bundle ID is how Apple, iOS, and your provisioning identify your specific app. It shows up in three places that all have to agree:
- The App ID registered in your Apple Developer account, which lists the capabilities the app is allowed to use.
- The bundle identifier set in your project, which is compiled into the build.
- The app record in App Store Connect, which is bound to that bundle ID.
If these do not match, signing fails and uploads are rejected. The bundle ID also ties together your provisioning profile and entitlements, which is why it appears in the provisioning profile too.
Choosing the format
Apple uses reverse-DNS for bundle IDs. The convention is your registered domain reversed, then the app name:
- com.yourcompany.yourapp
- io.example.habittracker
It may contain letters, numbers, hyphens, and periods, and it is case sensitive. Pick something stable that reflects a domain you control, because this string is effectively permanent. Avoid placeholder values like com.example or a default Xcode identifier, since those will collide with other apps and cannot be registered.
There are two kinds of App ID:
- Explicit. Matches one exact bundle ID, such as com.yourcompany.yourapp. Required for capabilities like push notifications, in-app purchase, App Groups, and Sign in with Apple.
- Wildcard. Uses an asterisk to match a family of bundle IDs, such as com.yourcompany.*. Convenient for simple apps with no special capabilities, but it cannot use the capabilities above.
Most apps that plan to monetize or send notifications need an explicit App ID, so it is usually the safer choice from the start.
Setting it and why it is permanent
The practical steps are:
- Decide on the reverse-DNS string from a domain you control.
- Register it as an explicit App ID in your developer account, enabling any capabilities the app needs.
- Set the identical bundle identifier in your project's target settings.
- Create the app record in App Store Connect and select that bundle ID.
After step four, the bundle ID is locked to that app for its lifetime. There is no rename. If you truly need a different bundle ID later, you create a new app record, which is a brand new app on the store with its own reviews, ratings, and history. That is why it is worth getting the value right before the first submission.
Where AppFlight fits
AppFlight sets the bundle ID when it scaffolds your project and registers the app, using a valid reverse-DNS identifier and keeping it consistent across the build, the signing, and the App Store Connect record. You choose the value so it matches a domain you own, and AppFlight carries it through the rest of the flow so the three places that have to agree always do. Since the ID is permanent once the app record exists, it is worth settling on before that first submission.
FAQ
What format does a bundle ID use?
Reverse-DNS, like com.yourcompany.yourapp. It can contain letters, numbers, hyphens, and periods, and it is case sensitive. A common convention is your domain reversed followed by the app name, which keeps it unique and readable.
Can I change a bundle ID after launch?
No. Once you create an app record in App Store Connect with a bundle ID, that ID is locked to that app for its lifetime. Changing it means creating a new app record, which is a different app on the store with no shared reviews or history.
Does AppFlight set the bundle ID?
Yes. AppFlight sets the bundle ID when it scaffolds the project and registers the app, using a valid reverse-DNS identifier. You can choose the value to match your domain, and it stays consistent across the build, signing, and the App Store Connect record.