Complete demos configured with "multi-deployment testing" feature are [here]:
Xcode allows you to define custom build settings for each "configuration" (like debug, release), which can then be referenced as the value of keys within the
Info.plist file (like the
CodePushDeploymentKey setting). This mechanism allows you to easily configure your builds to produce binaries, which are configured to synchronize with different CodePush deployments.
To set this up, perform the following steps:
Open up your Xcode project and select your project in the
Ensure the project node is selected, as opposed to one of your targets
+button within the
Configurationssection and select
Duplicate "Release" Configuration
Name the new configuration
Staging(or whatever you prefer)
Build Location -> Per-configuration Build Products Path -> Stagingand change
NOTE: Due to https://github.com/facebook/react-native/issues/11813, we have to do this step to make it possible to use other configurations than Debug or Release on RN 0.40.0 or higher.
+button on the toolbar and select
Add User-Defined Setting
Name this new setting something like
CODEPUSH_KEY, expand it, and specify your
Stagingdeployment key for the
Stagingconfig and your
Productiondeployment key for the
NOTE: As a reminder, you can retrieve these keys by running
code-push deployment ls <APP_NAME> -kfrom your terminal.
Open your project's
Info.plistfile and change the value of your
And that's it! Now when you run or build your app, your staging builds will automatically be configured to sync with your
Staging deployment, and your release builds will be configured to sync with your
NOTE: CocoaPods users may need to run
pod install before building with their new release configuration.
Note: If you encounter the error message
ld: library not found for ..., please consult this issue for a possible solution.
Additionally, if you want to give them seperate names and/or icons, you can modify the
Product Bundle Identifier,
Product Name and
Asset Catalog App Icon Set Name build settings, which will allow your staging builds to be distinguishable from release builds when installed on the same device.