React Native 发布/生产崩溃未处理的 JS 异常:TypeError:未定义不是对象(评估“o.default.Item”)

问题描述 投票:0回答:2

我尝试了 StackOverflow 社区提供的多种解决方案。但此错误仅发生在 iOS Release 模式 中。该应用程序在调试模式下运行良好。此外,由于 ViewPropTypes 错误,这种情况也不会发生。

这是崩溃日志:

    *** 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
'

包.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"
  }
}
ios react-native release
2个回答
0
投票

该异常过于模糊,因此您需要启用源映射来诊断问题。在项目根文件夹中打开

ios/.xcode.env
文件并将 SOURCEMAP_FILE 环境变量添加到其末尾:

export SOURCEMAP_FILE="$(pwd)/../main.jsbundle.map"

构建您的发布项目并验证根文件夹中是否有

main.jsbundle.map
文件。运行应用程序并获取崩溃日志并对其运行符号化:

npx metro-symbolicate main.jsbundle.map < crashlog.txt

通过这种方式,您可以识别崩溃的确切文件和行。然后你就可以开始调试文件来了解为什么在发布模式下对象为空。


0
投票

感谢@Mark Tolmacs 引导我走上正确的道路。赏金奖励给他。我终于通过生成 SourceMaps 找到了解决方案。对于在 iOS 或 Android 版本构建中遇到问题的任何人。请执行以下步骤:

这些步骤适用于 iOS。 Android的命令可以修改

第1步:

生成地图文件

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

第2步:

安装 Stack Beautifier 库

npm install -g stack-beautifier

第3步

运行终端命令

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

确保将错误复制到路线的

stacktrace.txt
文件中。就我而言,我复制了以下错误

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

该命令以人类可读的文本返回给我错误

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>

编辑

您还可以尝试使用此处给出的官方方法来生成 SourceMaps

© www.soinside.com 2019 - 2024. All rights reserved.