Migrating your codebase to a new React Native project while still publishing updates to the same app on both the Play Store (Android) and App Store (iOS) can be a tricky process. It's crucial that your new project matches the identity of the old app to ensure that the stores recognize your new builds as updates and not as entirely new apps. Here’s a breakdown of what needs to be updated to keep your app's identity intact across both platforms.
1. Bundle Identifier (iOS) & Application ID (Android)
-
iOS:
Ensure the
bundleIdentifier
inios/YourApp/Info.plist
and Xcode project settings match the old app’s bundle ID. For example:
<key>CFBundleIdentifier</key>
<string>com.yourcompany.yourapp</string>
-
Android:
Similarly, update the
applicationId
inandroid/app/build.gradle
to match the old app’s application ID.
defaultConfig {
applicationId "com.yourcompany.yourapp"
}
Additionally, make sure the package name in android/app/src/main/AndroidManifest.xml
matches.
2. Versioning
-
iOS:
Update
CFBundleShortVersionString
(version) andCFBundleVersion
(build number) inInfo.plist
. Ensure these are greater than the version you previously uploaded to the App Store.
<key>CFBundleShortVersionString</key>
<string>2.0.0</string>
<key>CFBundleVersion</key>
<string>100</string>
-
Android:
Similarly, update
versionCode
(must increment) andversionName
(string) inandroid/app/build.gradle
to reflect a higher version than the previous one.
versionCode 101
versionName "2.0.0"
3. App Name and Display Name
iOS:
Update theCFBundleDisplayName
inInfo.plist
to ensure the app name is the same on the App Store.Android:
Updateandroid:label
inandroid/app/src/main/AndroidManifest.xml
to reflect your app's name as it appears on the Play Store.
4. App Icons and Launch Screens
Replace the default app icons and splash screens with your app’s branding assets for both platforms. Ensure the icons meet the required specifications for the App Store and Play Store.
5. Signing Keys
iOS:
Use the same Apple Developer account, provisioning profiles, and certificates that were used for the previous app version.Android:
Ensure you are using the same keystore file for signing your APK. The keystore file (android/app/my-release-key.keystore
) should be identical to the one used previously. Make sureandroid/gradle.properties
andandroid/app/build.gradle
reflect the correct signing config.
6. Permissions and Capabilities
Ensure that all permissions in AndroidManifest.xml
and capabilities in Xcode match the previous app version, as these could affect the app’s functionality or approval process.
7. Other Identifiers
For services like Firebase or OneSignal, make sure their configuration files (e.g., google-services.json
for Android, GoogleService-Info.plist
for iOS) are carried over correctly to maintain seamless integration.
8. App Store/Play Store Metadata
While you manage your app's metadata (description, screenshots, etc.) directly through the App Store Connect or Play Console, make sure the app’s name, icon, and identifiers match across both platforms. This ensures that users see it as an update, not a new app.
Summary Table
Platform | File/Setting | What to Match With Old App |
---|---|---|
iOS |
bundleIdentifier (Xcode, Info.plist) |
Old app’s bundle ID |
iOS |
CFBundleShortVersionString , CFBundleVersion
|
Higher than last version |
iOS | Signing (certs, provisioning) | Same Apple Developer account |
Android |
applicationId (build.gradle) |
Old app’s application ID |
Android |
versionCode , versionName (build.gradle) |
Higher than last version |
Android | Signing (keystore) | Same keystore as before |
Both | App icons, splash screens | Your app’s branding |
Both | Permissions, services config | Match previous settings |
Final Thoughts:
Migrating your codebase while ensuring the identity of your app is preserved across both the App Store and Play Store can be challenging, but by following the above steps, you can ensure that your new React Native project gets recognized as an update rather than a new app. If you need any help finding or updating these values in your codebase, just let me know which platform you'd like to start with!
Top comments (0)