BlackBerry Dynamics SDK for React Native version 15.0

The BlackBerry Dynamics SDK for React Native can be downloaded from BlackBerry Developer Downloads. Development guidance is contained in the README file of the download package.

New in this release

Feature

Description

Support for the Expo framework

This release adds support for the Expo framework, which React Native now recommends for app development. Expo support has been added to the updated base module, BlackBerry-Dynamics-for-React-Native-Base version 2.0.0. Expo support was validated with Expo SDK 57.

The updated base module works with both native bare projects and Expo projects. The base module detects the project type that it is installed into. For bare projects it installs hooks as it did previously. For Expo apps it functions as an Expo configuration plug-in; you register the base module in the plugins array of the Expo app configuration and all BlackBerry Dynamics native integrations are applied automatically whenever you run expo prebuild.

Expo Go is not supported. The BlackBerry Dynamics SDK for React Native requires native module integration, so you must switch from Expo Go to an Expo Development Build when integrating the SDK (expo prebuild followed by expo run:ios or expo run:android).

The recently released Expo SDK 58 is not currently supported; do not use Expo SDK 58 as it may cause conflicts with the BlackBerry Dynamics SDK for React Native version 15.0. Support for Expo SDK 58 is planned for an upcoming release.

For more implementation details, see the "Expo framework" row in the Features table below.

Supported React Native versions

This release supports React Native 0.84.x, 0.85.x, and 0.86.x.

Earlier versions of React Native are no longer supported.

Supported Node.js versions

Node.js version 22.13.0 or later.

Android development requirements

  • BlackBerry Dynamics SDK for Android version 15.1, 15.0, 14.x
  • Android OS 13 or later

iOS development requirements

  • BlackBerry Dynamics SDK for iOS version 15.3, 15.1, 15.0, 14.x
  • Xcode 16 to 26
  • iOS 18 or later
Note: Xcode 27 is not currently supported due to a React Native limitation. Apple requires UIScene for apps compiled with iOS SDK 27, but the React Native versions that are currently supported use the AppDelegate window lifecycle and do not use UIScene. BlackBerry Dynamics React Native apps built with Xcode 27 may fail at launch, or may build and install and then stop responding immediately.

Adding a SceneDelegate or UIApplicationSceneManifest is not a workaround and can cause additional issues. The current workaround is to build with a supported version of Xcode on a Mac, as apps built this way can be installed and run on devices and simulators running iOS 27. Do not rebuild those apps with Xcode 27 until a later version of the BlackBerry Dynamics SDK for React Native supports a React Native version that implements UIScene.

Enhancements to data leakage prevention (DLP) for Android

  • Previously, executing the yarn integrate-dlp-android command built the React Native Android library from source, requiring approximately 20 minutes of build time and 25 to 30 GB of free space on the system. In this release, using the same command no longer builds the React Native library from source, and instead uses a local copy of the React Native Android library for that app only. This change significantly reduces the build time and removes the heavy storage requirement. There are no changes to app code or node_modules.
  • Expo apps do not require the yarn integrate-dlp-android command. For Expo apps, enable DLP with the base plug-in option androidDlp: true, then run expo prebuild. For more information, see the README file for the BlackBerry-Dynamics-for-React-Native-Base module.
  • The DLP sample (SampleApplications/bare/DLP) has been updated with the change described above. A new Expo DLP sample is now available (SampleApplications/expo/DLP).

Updates to the BlackBerry-Dynamics-for-React-Native-Camera module

The BlackBerry-Dynamics-for-React-Native-Camera module has been updated to version 2.0.0. The new version supports react-native-vision-camera 5.2.3 (not version 4.x) and the React Native versions that are supported in this release (0.84.x, 0.85.x, and 0.86.x).

The camera sample (SampleApplications/bare/Camera) has been updated to use the 2.0.0 version of the module. An Expo camera sample is also available at SampleApplications/expo/Camera.

Update your custom BlackBerry Dynamics apps that use the BlackBerry-Dynamics-for-React-Native-Camera module to use the new version. See the README file for the BlackBerry-Dynamics-for-React-Native-Camera module for integration instructions and for details about some changes for how to use the module.

Support

Feature

Description

Development requirements

  • Windows 11 (Android only)
  • Windows 10 (Android only)
  • macOS

React Native supported versions

  • 0.86.x
  • 0.85.x
  • 0.84.x

Earlier versions of React Native are not supported.

BlackBerry Dynamics SDK supported versions

  • BlackBerry Dynamics SDK for Android version 15.1, 15.0, 14.x
  • BlackBerry Dynamics SDK for iOS version 15.3, 15.1, 15.0, 14.x
  • The BlackBerry Dynamics SDK for React Native supports the BlackBerry Dynamics SDK for iOS dynamic framework only. The iOS SDK static framework is no longer supported.

Node.js

Version 22.13.0 or later.

iOS requirements

  • Xcode 16 to 26
  • iOS 18 or later
Note: Xcode 27 is not currently supported due to a React Native limitation. Apple requires UIScene for apps compiled with iOS SDK 27, but the React Native versions that are currently supported use the AppDelegate window lifecycle and do not use UIScene. BlackBerry Dynamics React Native apps built with Xcode 27 may fail at launch, or may build and install and then stop responding immediately.

Adding a SceneDelegate or UIApplicationSceneManifest is not a workaround and can cause additional issues. The current workaround is to build with a supported version of Xcode on a Mac, as apps built this way can be installed and run on devices and simulators running iOS 27. Do not rebuild those apps with Xcode 27 until a later version of the BlackBerry Dynamics SDK for React Native supports a React Native version that implements UIScene.

Android requirements

  • Java 17
  • Android OS 13 or later

Features

Feature

Description

Integration with BlackBerry Dynamics

Integration of the BlackBerry Dynamics SDK for iOS and Android into the React Native application is supported by the addition of the BlackBerry-Dynamics-for-React-Native-Base module. You can also integrate a locally downloaded version of BlackBerry Dynamics SDK for iOS into your BlackBerry Dynamics React Native app.

Expo framework

The BlackBerry Dynamics SDK for React Native version 15.0 and later supports the Expo framework. Expo support was validated with Expo SDK 57. Version 2.0.0 or later of the base module, BlackBerry-Dynamics-for-React-Native-Base, works with native bare projects and Expo projects.

The base module detects the project type that it is installed into. For bare projects it installs hooks, as it did in version 1.x. For Expo apps, the base module functions as an Expo configuration plug-in; you register the base module in the plugins array of the Expo app configuration, and all BlackBerry Dynamics native integrations are applied automatically whenever you run expo prebuild.

Note the following implementation details:
  • The recently released Expo SDK 58 is not currently supported; do not use Expo SDK 58 as it may cause conflicts with the BlackBerry Dynamics SDK for React Native version 15.0. Support for Expo SDK 58 is planned for an upcoming release.
  • Expo Go is not supported. The BlackBerry Dynamics SDK for React Native requires native module integration, so you must switch from Expo Go to an Expo Development Build when integrating the SDK (expo prebuild followed by expo run:ios or expo run:android).
  • Register only the base plug-in (BlackBerry-Dynamics-for-React-Native-Base) in the plugins array. Do not register the other SDK modules. The other modules are installed as normal dependencies that are linked automatically in the prebuild process.
  • You must set app identifiers before the first prebuild. The iOS bundle identifier and the Android package name that you configure in the Expo app configuration become the GDApplicationID that is used to entitle and activate the app with BlackBerry UEM. If you change these values, you must regenerate native projects with expo prebuild --clean.
  • The command line tools for bare projects (set-bundle-id, set-dynamics-podspec, and integrate-dlp-android) are not compatible with Expo apps. The base module skips these commands for Expo apps. You configure these items with plug-in options in the Expo app configuration, then run the prebuild.
  • If you are using Node Package Manager (npm), install with --install-links. If you do not, the Expo prebuild process does not include the SDK modules, because npm installs local file paths as symlinks by default.
  • See the README file for the base module for more information about configurable plug-in options (for example, BlackBerry Dynamics iOS podspec, Android Maven repository, and how to enable Android text DLP).

Secure connectivity

  • On iOS, XMLHttpRequest, fetch, and WebSocket are secured by the BlackBerry Dynamics runtime when you add the BlackBerry-Dynamics-for-React-Native-Base module.
  • On Android, XMLHttpRequest, fetch, and WebSocket are secured by the BlackBerry-Dynamics-for-React-Native-Networking module.
  • The BlackBerry-Dynamics-for-React-Native-WebView UI component secures <WebView />.

Secure storage

  • AsyncStorage is secured in the BlackBerry-Dynamics-for-React-Native-Async-Storage module.
  • SQLite is secured in the BlackBerry-Dynamics-for-React-Native-SQLite-Storage module.

Data leakage prevention (DLP) for iOS

The <Text /> component, <TextInput /> component, and Clipboard API are secured by integrating BlackBerry Dynamics.

Data leakage prevention (DLP) for Android

After you add the base module, use the following command to secure <Text /> and <TextInput /> components; this should be the last command you run before you build the app (using yarn to add or remove a package afterwards will override the changes made by this command):

yarn integrate-dlp-android

This command uses a local copy of the React Native Android library. In previous versions of the BlackBerry Dynamics SDK for React Native, this command built the React Native Android library from source; as of SDK version 15.0, this is no longer required. This new method significantly reduces the build time and removes the heavy storage requirement of the previous method.

Expo apps do not require the yarn integrate-dlp-android command. For Expo apps, enable DLP with the base plug-in option androidDlp: true, then run expo prebuild. For more information, see the README file for the BlackBerry-Dynamics-for-React-Native-Base module.

The BlackBerry-Dynamics-for-React-Native-Clipboard module secures the Clipboard API.

For a sample implementation, see the DLP sample (SampleApplications/bare/DLP) or the Expo DLP sample (SampleApplications/expo/DLP).

Inter-Container Communication (ICC)

ICC (also known as AppKinetics) provides service discovery, service consumption, and service providing capabilities for BlackBerry Dynamics React Native apps and allows secure communication with other BlackBerry Dynamics apps. To implement some ICC capabilities in BlackBerry Dynamics React Native apps, use the BlackBerry-Dynamics-for-React-Native-AppKinetics module.

Support for Yarn package manager

  • To add a BlackBerry Dynamics React Native module, run following command: $ yarn add <path_to_module>
  • To remove a BlackBerry Dynamics React Native module, run following command: $ yarn remove <path_to_module>

For more information, see the README file for each module.

Importing a prepopulated SQLite database

You can use any of the methods detailed here to import a prepopulated SQLite database: Importing a prepopulated database. The third method is supported for Android only.

Integration of the BlackBerry Dynamics Launcher

As of SDK version 13.0, the BlackBerry Dynamics Launcher is integrated automatically with the BlackBerry Dynamics SDK for React Native and does not need to be integrated separately. When you add the BlackBerry-Dynamics-for-React-Native-Base module, the BlackBerry Dynamics Launcher is integrated automatically and shown in apps by default.

You can use the BlackBerry-Dynamics-for-React-Native-Launcher module to hide or show the BlackBerry Dynamics Launcher:
  • For iOS, add the following property in <app>/ios/<app-name>/Info.plist:
    • Hide the Launcher: GDDisableAutomaticLauncherManagement = YES
    • Show the Launcher: GDDisableAutomaticLauncherManagement = NO
  • For Android, add the following property in <app>/android/app/src/main/assets/com.blackberry.dynamics.settings.json:
    • Hide the Launcher: "AutomaticLauncherManagement": "false"
    • Show the Launcher: "AutomaticLauncherManagement": "true"

As of the BlackBerry Dynamics SDK for React Native 13.0, the BlackBerry-Dynamics-for-React-Native-Launcher module should be used only with BlackBerry Dynamics SDK for Android 13.0 or later and the BlackBerry Dynamics SDK for iOS 13.0 or later.

Package contents

Feature

Description

Modules

  • BlackBerry-Dynamics-for-React-Native-Base automatically integrates the BlackBerry Dynamics SDK for iOS and Android into the React Native application.
  • BlackBerry-Dynamics-for-React-Native-Networking secures XMLHttpRequest and fetch APIs on Android. For more information, see React Native: Networking.
  • BlackBerry-Dynamics-for-React-Native-SQLite-Storage secures SQLite database usage, based on the react-native-sqlite-storage third-party module.
  • BlackBerry-Dynamics-for-React-Native-Async-Storage secures built-in AsyncStorage.
  • BlackBerry-Dynamics-for-React-Native-Clipboard secures the built-in Clipboard API.
  • BlackBerry-Dynamics-for-React-Native-AppKinetics provides the ability to use BlackBerry Dynamics app-based services within a BlackBerry Dynamics React Native app to securely communicate with other BlackBerry Dynamics apps in a process called Inter-Container Communication (ICC) or AppKinetics; also provides service discovery, service consumption, and service providing capabilities.
  • BlackBerry-Dynamics-for-React-Native-FileSystem secures the API for the react-native-fs module; the JavaScript API of this module is the same, but files and directories are now stored and managed within the BlackBerry Dynamics secure container.
  • BlackBerry-Dynamics-for-React-Native-Launcher allows you to programmatically hide or show the BlackBerry Dynamics Launcher in your BlackBerry Dynamics React Native apps. The BlackBerry Dynamics Launcher is integrated automatically and displayed by default when you add the BlackBerry-Dynamics-for-React-Native-Base module.
  • BlackBerry-Dynamics-for-React-Native-Application allows you to access information that is globally available to any BlackBerry Dynamics app.
  • BlackBerry-Dynamics-for-React-Native-Camera secures the API for react-native-vision-camera version 5.2.3. The JavaScript API of this React Native module is the same, but captured media files (photos, recorded videos) are now stored in the BlackBerry Dynamics secure container.

UI components

BlackBerry-Dynamics-for-React-Native-WebView secures the built-in <WebView /> UI component to securely load public and enterprise resources within a WebView.

Sample apps

The SDK package includes the following sample apps. There are two versions of each sample app: a version for bare React Native projects, found in SampleApplications/bare, and a version for Expo projects, found in SampleApplications/expo. Every sample app includes setup and integration instructions in a dedicated README file.
  • BasicNetworking provides examples of using fetch and XMLHttpRequest in different scenarios. This app covers different HTTP request types (GET, POST, PUT, DELETE, and so on), authentication types (basic auth, Digest, NTLM), and includes the ability to send different data types to the server and receive responses for different data types.
  • ClipboardTestApp demonstrates how to use the Clipboard API for data leakage prevention (DLP). It is possible to change the DLP policy on UEM and see how it affects the clipboard within the app. If DLP is enabled, clipboard data cannot be copied from a BlackBerry Dynamics app to a non-BlackBerry Dynamics app, and vice-versa.
  • DLP demonstrates how to use the <Text /> and <TextInput /> UI components together with the UEM DLP policy option. If DLP is on, it is not possible to perform cut-copy-paste operations to transfer data from BlackBerry Dynamics to non-BlackBerry Dynamics applications, and vice-versa.
  • SQLite demonstrates how to use a secure SQLite DB instance in a React Native app.
  • UnitTest runs Jasmine unit tests for fetch, XMLHttpRequest, Clipboard, AsyncStorage, SQLite, and AppKinetics in a React Native app.
  • WebViewBrowser demonstrates how to use the <WebView /> component in a React Native app.
  • FileSystem demonstrates how to use a secure FileSystem instance in a React Native app, how to manage files and directories, and how to upload and download files.
  • WebSocketClient and WebSocketServer demonstrate how to establish a connection to a WebSocket server using "ws://" or "wss://" protocols, how to send or receive text or binary data over a WebSocket connection, and how to close a WebSocket connection.
  • AppKinetics demonstrates how to use AppKinetics, or secure Inter-Container Communication (ICC), including sending and receiving files using ICC and creating secure email with BlackBerry Work or the native email client (if permitted).
  • Policy demonstrates how to retrieve a collection of app-specific configuration and policy settings. The retrieval of these settings happens during the method call or whenever settings are changed.
  • Camera demonstrates the use of the BlackBerry-Dynamics-for-React-Native-Camera module to store photos and recorded videos in the BlackBerry Dynamics secure container, and demonstrates how to send media files to other BlackBerry Dynamics apps using Inter-Container Communication.

Known issues

Image content may not be visible on the iOS clipboard sample app. (GD-63121)

When both default and secure SQLite libraries are linked to an iOS project, it can cause conflicts and unpredictable behavior.

Workaround: Remove the sqlite3 dependency in */node_modules/react-native-webrtc/react-native-webrtc.podspec, and then run pod install again.