Skip to content

Revopush 2.0 User guide

This 5-minute guide will help you to set up your first Revopush 2.0 integration

Create an account

First, you need to create an account at the following service: https://app.revopush.org/register

Create an application

  1. Go to Applications and add an application

Add new application

  1. Enter application name and save it

Add new application modal

  1. As a result, you will see your application in the list with two deployments available out of the box

Application list

Setup mobile client SDK

  • For React Native >=0.76, or you need support for New Architecture, you should use Revopush client SDK.
React Native version(s)Supporting CodePush version(s)
0.76, 0.77, 0.78, 0.79, 0.80, 0.81@revopush/[email protected]

For this guide we will use Revopush SDK

Install Revopush client:

bash
npm install --save @revopush/[email protected]

Setup iOS

Go to the ios/[ProjectName]/AppDelegate.swift and replace:

swift
import CodePush

override func bundleURL() -> URL? {
#if DEBUG
    RCTBundleURLProvider.sharedSettings().jsBundleURL(forBundleRoot: "index")
#else
    Bundle.main.url(forResource: "main", withExtension: "jsbundle") 
    CodePush.bundleURL() 
#endif
}

Go to the ios/[ProjectName]/AppDelegate.mm and replace:

Objc
#import <CodePush/CodePush.h>

- (NSURL *)bundleURL
{
    #if DEBUG
      return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index"];
    #else
      return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"]; 
      return [CodePush bundleURL];  
    #endif
}

WARNING

Put this line to ios/.xcode.env.local and ios/.xcode.env

shell
export SOURCEMAP_FILE="$DERIVED_FILE_DIR/main.jsbundle.map"

Setup Android

Go to the android/app/build.gradle and add:

kotlin
apply plugin: "com.android.application"
apply plugin: "org.jetbrains.kotlin.android"
apply plugin: "com.facebook.react"

apply from: "../../node_modules/@revopush/react-native-code-push/android/codepush.gradle"

Then apply changes to MainApplication.kt in the android/app/src/main/../MainApplication.kt

kotlin
import com.facebook.react.soloader.OpenSourceMergedSoMapping
import com.facebook.soloader.SoLoader

import com.microsoft.codepush.react.CodePush 

class MainApplication : Application(), ReactApplication {

  override val reactNativeHost: ReactNativeHost =
      object : DefaultReactNativeHost(this) {
        override fun getPackages(): List<ReactPackage> =
            PackageList(this).packages.apply {}

        override fun getJSBundleFile(): String { 
            return CodePush.getJSBundleFile()
        }

        override fun getJSMainModuleName(): String = "index"
      }
}

After you configure your React Native application go to app settings to get Deployment keys:

Application deployments

Setup deployment key for iOS

Add the CodePushServerURL and CodePushDeploymentKey to the file ios/[ProjectName]/Info.plist

xml
<key>CodePushServerURL</key>
<string>https://api.revopush.org</string>
<key>CodePushDeploymentKey</key>
<string>YOUR_DEPLOYMENT_KEY</string>

Setup deployment key for Android

Add the CodePushServerUrl and CodePushDeploymentKey to the file android/app/src/main/res/values/strings.xml

xml
<resources>
    <string moduleConfig="true" name="CodePushServerUrl">https://api.revopush.org</string>
    <string moduleConfig="true" name="CodePushDeploymentKey">YOUR_DEPLOYMENT_KEY</string>
</resources>

JS configuration

Configure the SDK in the JavaScript layer of your app (minimal setup):

js
import codePush from "@revopush/react-native-code-push";

class MyApp extends Component {}

MyApp = codePush(MyApp);

More details: JS SDK API

Configure CLI

After registration, install the Revopush CLI.

Uninstall existing version of Revopush CLI:

shell
npm uninstall -g @revopush/code-push-cli

Install RC version:

shell
npm i -g @revopush/[email protected]

Login to Revopush CLI using the following command:

shell
revopush login

This will launch a browser, asking you to authenticate with either your GitHub or Google account. This will generate an access key that you need to copy/paste into the CLI (it will prompt you for it). You are now successfully authenticated and can safely close your browser window.

shell
Opening your browser...
Visit https://app.revopush.org/cli-login?hostname=<YOUR_HOST_NAME> and enter the code

Enter your access key:

Read more about Revopush CLI

Make a release

To use Diff updates together with Revopush SDK 2.0, you must first create a base release for the specific binary version of the app you are targeting.

What is a base release?

A base release is a snapshot of your assets and JavaScript bundle exactly as they were shipped to the app stores together with your IPA/APK.

This snapshot is then used as a baseline to generate diffs only for assets and the JS bundle that already exist in the store build and on users’ devices.

As a result, update payload sizes are reduced by 10–20×, and update delivery to users becomes significantly faster.

To create a base release, run the command on the exact same build version that was used for the store release. Ideally, this command should be executed as part of the same release pipeline used to build the app for the stores, in order to avoid even minor library version differences.

In the root folder of a React Native project, run these commands

shell
revopush release-react <APPLICATION_NAME> ios -d <DEPLOYMENT_NAME> -i
shell
revopush release-react <APPLICATION_NAME> android -d <DEPLOYMENT_NAME> -i

Addional flag for initial release:

shell
-i, --initial   Specifies whether release is initial (base) for given targetBinaryVersion.  [boolean] [default: false]

Regular release

shell
revopush release-react <APPLICATION_NAME> ios -d <DEPLOYMENT_NAME>
shell
revopush release-react <APPLICATION_NAME> android -d <DEPLOYMENT_NAME>

Read more about Releases in Releasing updates guide

Run application in release mode

If you want to test integration locally run the app in Release mode on an emulator or real device:

shell
npx react-native run-ios --mode Release --no-packager
npx react-native run-android --mode Release --no-packager

This ensures the app doesn't rely on the local Metro bundler and uses the deployed update instead.