Mobile SDKs launch by WidgetID — you design the flow in EasyOnboard and its WidgetID identifies it. See Choosing an SDK.
Pick your package
Requirements are the same either way: iOS 14+ and Android SDK 21+.
React Native CLI
Install
Terminal
iOS setup
Add the Dojah pods to your app target inios/Podfile, then install them:
ios/Podfile
Terminal
Info.plist: NSCameraUsageDescription, NSMicrophoneUsageDescription (video), and NSLocationWhenInUseUsageDescription (address/location checks).
Android setup
Add JitPack to your repositories — inandroid/build.gradle or android/settings.gradle:
android/build.gradle
Launch the flow
App.js
null for the reference ID and email if you aren’t using them.
Expo
Install
Terminal
Configure app.json
Add the Dojah config plugin, the iOS usage descriptions, and the extra pods the native SDK needs:app.json
The Dojah config plugin already raises
compileSdkVersion, targetSdkVersion, buildToolsVersion, the Android Gradle Plugin (8.9.1+) and the Gradle wrapper during prebuild — it never lowers values you set higher. The expo-build-properties Android block above just pins them explicitly.Terminal
ios/ and android/ in your repo — EAS runs prebuild on the build worker for you.
Launch the flow
DojahKycSdk.launch() returns a promise that resolves to the flow’s exit status:
App.js
govId, location, businessData, and address.
Build with EAS (no Xcode required)
EAS Build compiles your app on Expo’s hosted macOS and Linux workers. That means you can produce an installable — and store-ready — iOS build from Windows or Linux without a Mac or a local Xcode install. It’s the recommended path for Expo projects using the Dojah SDK, since the SDK’s native code rules out Expo Go.1
Install the tooling
Terminal
expo-dev-client is what makes a custom build usable as a development client — you keep fast refresh and the dev menu while running your own native code.2
Create your build profiles
Generate Use
eas.json, then define the profiles you need:Terminal
eas.json
ios-simulator when you just want to run the flow on an iOS Simulator — those builds need no Apple Developer account. The development profile produces a device build, which does. resourceClass: "large" is optional; it speeds up the long CocoaPods step (Realm plus the Dojah pod) and isn’t available on the free plan.3
Register test devices (iOS device builds only)
Terminal
4
Check what EAS will build from
EAS runs
npx expo prebuild on the worker, so everything in the app.json plugin block above is applied there — you don’t need to commit native folders.If you have committed ios/ and android/, EAS uses them as-is and skips prebuild. In that case run npx expo prebuild --clean locally and commit the result whenever you change your Dojah or build-properties config.5
Run the build
Terminal
6
Install it and start developing
When the build finishes, the CLI prompts to install it on a connected device or a running simulator. Then start the bundler:Your app now launches the real Dojah flow. JavaScript changes reload instantly — you only rebuild when native dependencies change.
Terminal
7
Ship to the stores
Terminal
eas submit uploads the binary to App Store Connect (or Google Play with --platform android) from the same machine — again, no Xcode or Transporter needed.ProGuard / R8 rules for Android release builds
EAS production builds run R8 minification. If you’ve enabled shrinking, add keep rules or the SDK will fail at runtime withClassNotFoundException, NoSuchMethodError, or a blank WebView. In Expo, set them through expo-build-properties — no proguard-rules.pro file needed:
app.config.ts
android/app/proguard-rules.pro instead.
Troubleshooting EAS builds
CocoaPods can't find DojahWidget, or picks up a stale version
CocoaPods can't find DojahWidget, or picks up a stale version
The
DojahWidget pod is fetched from a Git branch, and EAS caches it between builds. Force a fresh checkout:Terminal
Android build fails at :app:checkDebugAarMetadata
Android build fails at :app:checkDebugAarMetadata
The error mentions compiling against API 36 or needing AGP 8.9.1+. Make sure
"dojah-kyc-sdk-react-expo" is listed in your plugins array — the plugin raises those versions during prebuild. If you keep native folders in the repo, re-run npx expo prebuild --clean and commit.iOS build fails on the deployment target
iOS build fails on the deployment target
The native SDK requires iOS 14 or later. Set
ios.deploymentTarget in the expo-build-properties plugin config ("15.1" is a safe value for recent Expo SDKs) and rebuild.The camera or microphone screen crashes on iOS
The camera or microphone screen crashes on iOS
A usage description is missing. Every permission your flow touches needs an
infoPlist entry in app.json — iOS terminates the app when one is absent.The flow is blank in a release build but fine in development
The flow is blank in a release build but fine in development
Almost always R8 stripping the SDK. Add the ProGuard rules above. To confirm the cause quickly, temporarily disable shrinking and rebuild.
WebView fallback
If you need a UI the native launcher doesn’t provide, render the hosted flow in a WebView:Verify.jsx
user_data[first_name], user_data[email], user_data[dob], and metadata[user_id].
Resources
React Native CLI Expo- npm — dojah-kyc-sdk-react-expo
- GitHub — dojah-inc/dojah_kyc_sdk_rn_expo (example app)
- Expo — EAS Build documentation · eas.json reference