Change the Bundle Identifier and Application ID
Change the iOS bundle identifier and Android application id, and re-register everything the change silently breaks.
This guide covers changing a React Native app's iOS bundle identifier and Android application ID, and everything downstream that breaks silently when you do.
Quick Answer
Set a unique, reverse-DNS identifier (e.g. com.yourcompany.yourapp) in app.json under ios.bundleIdentifier and android.package for Expo, or in the Xcode target and android/app/build.gradle for bare React Native; then re-register that identifier everywhere else it's referenced, since it's the primary key for most third-party integrations.
1. This Identifier Is Permanent Once Published
Once an app is live on the App Store or Play Store under a given bundle identifier / application ID, you cannot change it for that store listing; changing it means shipping what the stores treat as a brand new app, with reviews, install counts, and history starting from zero. Get this right before your first release, not after.
2. Where to Set It
Expo, in app.json:
{
"expo": {
"ios": { "bundleIdentifier": "com.yourcompany.yourapp" },
"android": { "package": "com.yourcompany.yourapp" }
}
}
Bare React Native: the iOS value lives in the Xcode target's Signing & Capabilities (Bundle Identifier field); the Android value is applicationId in android/app/build.gradle.
3. Everything That Breaks When You Change It
This identifier is how most third-party services recognize your app. Changing it invalidates or disconnects, silently, until you redo each of these:
- Firebase: your
GoogleService-Info.plist/google-services.jsonwere issued for the old identifier; re-register the app in Firebase and download new config files (see Link Firebase Account to Your App). - Google Sign-In: the OAuth client's registered package name/bundle ID no longer matches; update it in Google Cloud Console (see Add Google Sign-In).
- Apple provisioning: your existing provisioning profile was issued for the old bundle ID; Xcode will need to generate a new one.
- Push credentials: APNs keys and FCM/Expo push registrations are tied to the identifier and app signing; they need to be reconfigured.
Common Issues
Firebase "silently" stops authenticating or writing data after the change the config files still reference the old bundle ID/package; regenerate and replace them.
Xcode build fails with a provisioning profile error after the change expected; let Xcode automatically manage signing, or manually generate a new profile for the new bundle ID.
Google Sign-In starts failing with DEVELOPER_ERROR the OAuth client in Google Cloud still points at the old package name/fingerprint pairing.
Realized after the first store release that the identifier needs to change there's no clean fix; you'd be publishing what the stores treat as a new app. Double-check this value carefully before your first submission.
Verification Checklist
- the identifier is set consistently in both the iOS and Android configuration;
- it follows reverse-DNS format and is unique to you;
- Firebase config files are regenerated for the new identifier, if used;
- Google Sign-In (and any other OAuth provider) is re-registered with the new identifier;
- a clean rebuild succeeds on both platforms with valid signing.