Search code examples
react-nativeexporevenuecat

Invariant Violation: Native module cannot be null. Error when importing react-native-purchases in expo managed project on ios


I have followed this guide to install react-native-purchases in my expo managed project :

https://www.revenuecat.com/blog/in-app-puchase-expo-managed-workflow/

When I import the package with this line : import Purchases from 'react-native-purchases'; I get the following error on ios (Ipad,14.5) :

Invariant Violation: Native module cannot be null.
at node_modules\react-native\Libraries\LogBox\LogBox.js:149:8 in registerError
at node_modules\react-native\Libraries\LogBox\LogBox.js:60:8 in errorImpl
at node_modules\react-native\Libraries\LogBox\LogBox.js:34:4 in console.error
at node_modules\expo\build\environment\react-native-logs.fx.js:27:4 in error
at node_modules\react-native\Libraries\Core\ExceptionsManager.js:104:6 in reportException
at node_modules\react-native\Libraries\Core\ExceptionsManager.js:172:19 in handleException
at node_modules\react-native\Libraries\Core\setUpErrorHandling.js:24:6 in handleError
at node_modules\expo-error-recovery\build\ErrorRecovery.fx.js:12:21 in ErrorUtils.setGlobalHandler$argument_0
at node_modules\regenerator-runtime\runtime.js:63:36 in tryCatch
at node_modules\regenerator-runtime\runtime.js:294:29 in invoke
at node_modules\regenerator-runtime\runtime.js:63:36 in tryCatch
at node_modules\regenerator-runtime\runtime.js:155:27 in invoke
at node_modules\regenerator-runtime\runtime.js:165:18 in PromiseImpl.resolve.then$argument_0
at node_modules\react-native\node_modules\promise\setimmediate\core.js:37:13 in tryCallOne
at node_modules\react-native\node_modules\promise\setimmediate\core.js:123:24 in setImmediate$argument_0
at node_modules\react-native\Libraries\Core\Timers\JSTimers.js:123:14 in _callTimer
at node_modules\react-native\Libraries\Core\Timers\JSTimers.js:177:14 in _callImmediatesPass
at node_modules\react-native\Libraries\Core\Timers\JSTimers.js:437:30 in callImmediates
at node_modules\react-native\Libraries\BatchedBridge\MessageQueue.js:388:6 in __callImmediates
at node_modules\react-native\Libraries\BatchedBridge\MessageQueue.js:132:6 in __guard$argument_0
at node_modules\react-native\Libraries\BatchedBridge\MessageQueue.js:365:10 in __guard
at node_modules\react-native\Libraries\BatchedBridge\MessageQueue.js:131:4 in flushedQueue*

Here is my package.json :

{
  "name": "uma",
  "version": "1.2.0",
  "main": "node_modules/expo/AppEntry.js",
  "scripts": {
    "start": "expo start",
    "android": "expo start --android",
    "ios": "expo start --ios",
    "web": "expo start --web",
    "eject": "expo eject"
  },
  "dependencies": {
    "@react-native-async-storage/async-storage": "~1.15.0",
    "@react-native-community/slider": "4.1.12",
    "@react-navigation/bottom-tabs": "^6.3.1",
    "@react-navigation/native": "^6.0.10",
    "@react-navigation/native-stack": "^6.6.1",
    "@react-navigation/stack": "^6.2.1",
    "@reduxjs/toolkit": "^1.8.1",
    "axios": "^0.26.1",
    "base-64": "^1.0.0",
    "expo": "~44.0.0",
    "expo-app-loading": "~1.3.0",
    "expo-av": "~10.2.0",
    "expo-checkbox": "~2.0.0",
    "expo-file-system": "~13.1.4",
    "expo-font": "~10.0.4",
    "expo-linking": "~3.0.0",
    "expo-notifications": "~0.14.0",
    "expo-secure-store": "~11.1.0",
    "expo-status-bar": "~1.2.0",
    "expo-updates": "~0.11.7",
    "react": "17.0.1",
    "react-dom": "17.0.1",
    "react-native": "0.64.3",
    "react-native-gesture-handler": "~2.1.0",
    "react-native-purchases": "^4.6.1",
    "react-native-safe-area-context": "3.3.2",
    "react-native-screens": "~3.10.1",
    "react-native-sensitive-info": "^5.5.8",
    "react-native-vector-icons": "^9.1.0",
    "react-native-web": "0.17.1",
    "react-redux": "^7.2.8",
    "redux": "^4.1.2",
    "redux-persist": "^6.0.0",
    "redux-persist-sensitive-storage": "^1.0.0"
  },
  "devDependencies": {
    "@babel/core": "^7.12.9",
    "@redux-devtools/core": "^3.11.0"
  },
  "private": true
}

Any idea how to debug this ?

Thanks for your time !


Solution

  • I finally found the answer. I tried to use RevenueCat with Expo Go as I usually do. I needed to create a development build instead wich I was not familiar with before.

    https://docs.expo.dev/development/build/

    Now everything works just fine !