Search code examples
iosreact-nativerelease

React Native Release/Production crash Unhandled JS Exception: TypeError: undefined is not an object (evaluating 'o.default.Item')


I have tried multiple solutions provided here in the StackOverflow community. But this error is happening in iOS Release mode only. The app is working fine in Debug mode. Also, this is not happening because of the ViewPropTypes error.

Here is the Crash Log:

    *** Terminating app due to uncaught exception 'RCTFatalException: Unhandled JS Exception: TypeError: undefined is not an object (evaluating 'o.default.Item')', reason: 'Unhandled JS Exception: TypeError: undefined is not an object (evaluating 'o.default.Item'), stack:
<unknown>@1724:1312
h@2:1707
<unknown>@1635:192
h@2:1707
<unknown>@1634:97
h@2:1707
<unknown>@1614:821
h@2:1707
<unknown>@1613:137
h@2:1707
<unknown>@599:1665
h@2:1707
<unknown>@501:603
h@2:1707
<unknown>@385:743
h@2:1707
<unknown>@6:57
h@2:1707
d@2:1080
global code@1817:3
'

Package.json

{
  "name": "***",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "android": "react-native run-android",
    "ios": "react-native run-ios",
    "start": "react-native start",
    "test": "jest",
    "lint": "eslint .",
    "postinstall": "patch-package"
  },
  "dependencies": {
    "@react-native-async-storage/async-storage": "^1.17.11",
    "@react-native-community/cli-platform-android": "7.0.1",
    "@react-native-community/datetimepicker": "7.2.0",
    "@react-native-community/netinfo": "^9.3.7",
    "@react-native-firebase/analytics": "^16.4.6",
    "@react-native-firebase/app": "^16.4.6",
    "@react-native-firebase/auth": "^16.4.6",
    "@react-native-firebase/crashlytics": "^16.4.6",
    "@react-native-firebase/firestore": "^16.4.6",
    "@react-native-firebase/functions": "^16.4.6",
    "@react-native-firebase/messaging": "^16.4.6",
    "@react-native-firebase/perf": "^16.4.6",
    "@react-native-firebase/storage": "^16.4.6",
    "@react-native-picker/picker": "2.4.8",
    "@react-navigation/native": "6.0.16",
    "@react-navigation/stack": "6.3.7",
    "@reduxjs/toolkit": "^1.9.1",
    "axios": "^1.2.0",
    "crypto-js": "^4.1.1",
    "deprecated-react-native-prop-types": "^3.0.1",
    "moment": "^2.29.4",
    "patch-package": "^6.5.0",
    "postinstall-postinstall": "^2.1.0",
    "prop-types": "15.8.1",
    "react": "18.1.0",
    "react-native": "0.70.0",
    "react-native-a-beep": "^1.2.0",
    "react-native-autocomplete-input": "^5.2.0",
    "react-native-base64": "^0.2.1",
    "react-native-calendars": "^1.1292.0",
    "react-native-camera": "^4.2.1",
    "react-native-cardview": "^2.0.5",
    "react-native-device-info": "^10.3.0",
    "react-native-dialog": "^9.3.0",
    "react-native-dimension": "^1.0.6",
    "react-native-document-picker": "^8.1.3",
    "react-native-dropdown-autocomplete": "^1.0.18",
    "react-native-event-listeners": "^1.0.7",
    "react-native-exception-handler": "^2.10.10",
    "react-native-fs": "2.20.0",
    "react-native-gesture-handler": "2.9.0",
    "react-native-html-to-pdf": "^0.12.0",
    "react-native-image-picker": "4.8.5",
    "react-native-indicators": "^0.17.0",
    "react-native-keyboard-aware-scroll-view": "^0.9.5",
    "react-native-loading-spinner-overlay": "^3.0.1",
    "react-native-masked-text": "^1.13.0",
    "react-native-material-dropdown-v2": "^0.11.1",
    "react-native-material-menu": "^2.0.0",
    "react-native-material-textfield": "^0.16.1",
    "react-native-modal": "^13.0.1",
    "react-native-modal-dropdown": "^1.0.2",
    "react-native-paper": "4.12.5",
    "react-native-print": "0.10.0",
    "react-native-push-notification": "^8.1.1",
    "react-native-safe-area-context": "4.4.1",
    "react-native-screens": "^3.18.2",
    "react-native-signature-canvas": "^4.5.0",
    "react-native-simple-radio-button": "^2.7.4",
    "react-native-soap-request": "https://github.com/adamski/react-native-soap-request.git",
    "react-native-swipe-gestures": "^1.0.5",
    "react-native-table-component": "^1.2.2",
    "react-native-tiny-toast": "^1.0.7",
    "react-native-vector-icons": "^9.2.0",
    "react-native-version-check": "^3.4.3",
    "react-native-version-number": "^0.3.6",
    "react-native-webview": "^11.25.0",
    "react-native-xml2js": "^1.0.3",
    "react-redux": "^7.2.2",
    "redux-persist": "^6.0.0",
    "rmc-date-picker": "^6.0.10",
    "rn-fetch-blob": "^0.12.0",
    "timers": "^0.1.1",
    "xlsx": "^0.18.5",
    "xml2js": "^0.4.23",
    "xmldom": "^0.6.0"
  },
  "devDependencies": {
    "@babel/core": "^7.8.4",
    "@babel/runtime": "^7.8.4",
    "@react-native-community/eslint-config": "^1.1.0",
    "babel-jest": "^25.1.0",
    "eslint": "^6.5.1",
    "jest": "^25.1.0",
    "metro-react-native-babel-preset": "0.70.3",
    "react-test-renderer": "16.13.1"
  },
  "jest": {
    "preset": "react-native"
  },
  "resolutions": {
    "@react-native-community/cli-platform-android": "3.0.0-alpha.2"
  }
}

Solution

  • Kudos to @Mark Tolmacs for directing me to the right path. I have finally found the solution by generating the SourceMaps. For anyone who is facing issues in the iOS or Android release build. Please perform the following steps:

    These steps are for iOS. You can modify the command for Android

    Step 1:

    Generate the map file

    yarn react-native bundle --platform ios --entry-file index.js --dev false --reset-cache --bundle-output /tmp/bundle.ios.js --assets-dest /tmp/ --sourcemap-output index.ios.js.map

    Step 2:

    Install the Stack Beautifier library

    npm install -g stack-beautifier

    Step 3

    Run the terminal command

    stack-beautifier index.ios.js.map -t stacktrace.txt

    Make sure you copy the error in the stacktrace.txt file at the route. In my case I copied the following error

    RCTFatalException: Unhandled JS Exception: TypeError: undefined is not an object (evaluating 'o.default.Item')', reason: 'Unhandled JS Exception: TypeError: undefined is not an object (evaluating 'o.default.Item'), stack:
    <unknown>@1724:1312
    h@2:1707
    <unknown>@1635:192
    h@2:1707
    <unknown>@1634:97
    h@2:1707
    <unknown>@1614:821
    h@2:1707
    <unknown>@1613:137
    h@2:1707
    <unknown>@599:1665
    h@2:1707
    <unknown>@501:603
    h@2:1707
    <unknown>@385:743
    h@2:1707
    <unknown>@6:57
    h@2:1707
    d@2:1080
    global code@1817:3
    

    and the command returned me error in human-readable text

    JS Exception: TypeError: undefined is not an object (evaluating 'o.default.Item'), stack:
      at ./node_modules/rmc-picker/lib/Picker.native.js:32:34
      at factory (./node_modules/metro-runtime/src/polyfills/require.js:339:4)
      at require (./node_modules/rmc-date-picker/lib/DatePicker.js:35:14)
      at factory (./node_modules/metro-runtime/src/polyfills/require.js:339:4)
      at require (./node_modules/rmc-date-picker/lib/index.js:7:18)
      at factory (./node_modules/metro-runtime/src/polyfills/require.js:339:4)
      at _r (./app/routes/InboundConfirmation/InboundConfirmation.js:20:0)
      at factory (./node_modules/metro-runtime/src/polyfills/require.js:339:4)
      at r (./app/routes/InboundConfirmation/index.js:3:0)
      at factory (./node_modules/metro-runtime/src/polyfills/require.js:339:4)
      at _r (./app/config/routes.js:92:0)
      at factory (./node_modules/metro-runtime/src/polyfills/require.js:339:4)
      at _r (./app/config/Layout.js:12:0)
      at factory (./node_modules/metro-runtime/src/polyfills/require.js:339:4)
      at _r (./App.js:21:0)
      at factory (./node_modules/metro-runtime/src/polyfills/require.js:339:4)
      at r (./index.js:6:0)
      at factory (./node_modules/metro-runtime/src/polyfills/require.js:339:4)
      at loadModuleImplementation (./node_modules/metro-runtime/src/polyfills/require.js:200:20)
      at <unknown>
    

    EDIT

    You can also try the official way to generate the SourceMaps given here