Pick your package
React Native CLI
Install
iOS setup
Add the Dojah pods to your app target inios/Podfile, then install them:
Info.plist: NSCameraUsageDescription, NSMicrophoneUsageDescription (video), and NSLocationWhenInUseUsageDescription (address/location checks).
Android setup
Add JitPack to your repositories — inandroid/build.gradle or android/settings.gradle:
Launch the flow
null for the reference ID and email if you aren’t using them.
Expo
Install
Configure app.json
Add the Dojah config plugin, the iOS usage descriptions, and the extra pods the native SDK needs: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.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:
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.Install the tooling
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.Create your build profiles
eas.json, then define the profiles you need: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.Register test devices (iOS device builds only)
Check what EAS will build from
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.Run the build
Install it and start developing
Ship to the stores
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:
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
DojahWidget pod is fetched from a Git branch, and EAS caches it between builds. Force a fresh checkout:Android build fails at :app:checkDebugAarMetadata
Android build fails at :app:checkDebugAarMetadata
"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
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
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
WebView fallback
If you need a UI the native launcher doesn’t provide, render the hosted flow in a WebView:user_data[first_name], user_data[email], user_data[dob], and metadata[user_id].
Grant camera, microphone, and location access
Grant camera, microphone, and location access
Android configuration
Add camera, audio, and location permissions toandroid/app/src/main/AndroidManifest.xml:iOS configuration
Add usage descriptions toios/YourAppName/Info.plist:WebView props
On Android,react-native-webview blocks camera and microphone prompts unless mediaCapturePermissionGrantType is set. Enable geolocation if the flow verifies address: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