reactotron icon indicating copy to clipboard operation
reactotron copied to clipboard

Version 5.1.9 iOS release builds failing on old architecture

Open jerinjohnk opened this issue 1 year ago • 1 comments

Describe the bug

After upgrading the package from 5.1.8 to 5.1.9 and creating a release build on iOS, the build is created and installed on the simulator. But as soon as it opens, it crashes without any error logs. Xcode reports failed to load the app. Downgrading it fixes the issue.

"react-native": "0.75.4",

Even though reactotron has been added as a dev dependency with the following check before initialization.

if (__DEV__) {
  // eslint-disable-next-line global-require
  require('@redux/ReactotronConfig');
}

This shouldn't be causing any problems in the release build.

Earlier, I thought it might be as the following file DevMenu = require("react-native/Libraries/NativeModules/specs/NativeDevMenu") doesn't get bundled up in the release build.

Reactotron version

5.1.9

jerinjohnk avatar Oct 16 '24 20:10 jerinjohnk

No, it's not using expo. But has been upgraded to the latest version of react native.

On Fri, Oct 18, 2024 at 11:07 PM Frank Calise @.***> wrote:

@jerinjohnk https://github.com/jerinjohnk are you using Expo Go?

— Reply to this email directly, view it on GitHub https://github.com/infinitered/reactotron/issues/1513#issuecomment-2422943575, or unsubscribe https://github.com/notifications/unsubscribe-auth/ACV6TGEEI2JBFI46LHIDGOLZ4FBO3AVCNFSM6AAAAABQCID2MWVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDIMRSHE2DGNJXGU . You are receiving this because you were mentioned.Message ID: @.***>

jerinjohnk avatar Oct 19 '24 09:10 jerinjohnk

Yeah, same issue using the latest version, use the previous version works.

TrejoCode avatar Nov 01 '24 19:11 TrejoCode

@TrejoCode are you using new arch or old?

frankcalise avatar Nov 01 '24 21:11 frankcalise

same here, this link may help https://github.com/facebook/react-native/issues/47193#issuecomment-2457048441

khanhvohoangvib avatar Nov 14 '24 05:11 khanhvohoangvib

@jerinjohnk @TrejoCode @khanhvohoangvib does anyone have a repo reproducing this issue? I haven't been able to reproduce it in an Ignite app via yarn ios --configuration Release with react-native 0.74.5 or 0.76.1

frankcalise avatar Nov 14 '24 18:11 frankcalise

We're having the same issue on iOS. We reverted to 5.1.8 where it is working good.

daholino avatar Nov 18 '24 09:11 daholino

Happening to me on old arch as well and on v5.1.10.

"expo": "~50.0.19",
"react": "18.2.0",
"react-native": "0.73.6",
devDeps:
"reactotron-react-native": "5.1.10",
"reactotron-redux": "^3.1.10",
"redux-mock-store": "^1.5.4",

Used EAS: eas build -p ios --profile preview

expo run:ios works just fine, but running a internal distribution build on broswerstack fails (on iOS 18).

paulrinaldi avatar Nov 23 '24 02:11 paulrinaldi

Can someone post a reproducible repo link? With instructions on how to run into this? That would be helpful

frankcalise avatar Nov 23 '24 03:11 frankcalise

Downgrading to 5.1.8 also solved the issue for me. Adding DEV to that if statement did not work for me.

paul-rinaldi avatar Nov 23 '24 03:11 paul-rinaldi

Again, need more info if we can get it - such as RN version or a repository demonstrating the issue please.

frankcalise avatar Nov 23 '24 03:11 frankcalise

I have been trying to reproduce it in a minimal repo with reactotron added as a dev dependency but have been unable to reproduce the same error in that build successfully.

jerinjohnk avatar Nov 23 '24 06:11 jerinjohnk

@jerinjohnk Are you saying that you've added it as a dependency (not dev dependency) in the past and that is what failing?

Also, feel free to provide a formatted list of dependencies/dev dependencies from the project that is having troubles if unable to reproduce it - that is still helpful.

frankcalise avatar Nov 23 '24 13:11 frankcalise

No @frankcalise I didnt mean I had added it as dependency. It has always been added as a dev dependency only. Sorry about the confusion. Have tried to run the release build with upgraded version of 5.1.10 but still the same error occurs. The downgrade to 5.1.8 works fine.

Here's my package list

"dependencies": {
    "@gorhom/bottom-sheet": "5.0.6",
    "@lottie-animation-community/lottie-types": "1.2.0",
    "@react-native-async-storage/async-storage": "2.1.0",
    "@react-native-clipboard/clipboard": "1.15.0",
    "@react-native-community/datetimepicker": "8.2.0",
    "@react-native-community/netinfo": "11.4.1",
    "@react-native-community/push-notification-ios": "1.11.0",
    "@react-native-community/slider": "4.5.5",
    "@react-native-cookies/cookies": "6.2.1",
    "@react-native-firebase/analytics": "21.6.0",
    "@react-native-firebase/app": "21.6.0",
    "@react-native-firebase/crashlytics": "21.6.0",
    "@react-native-firebase/database": "21.6.0",
    "@react-native-firebase/in-app-messaging": "21.6.0",
    "@react-native-firebase/messaging": "21.6.0",
    "@react-native-firebase/remote-config": "21.6.0",
    "@react-native-masked-view/masked-view": "0.3.2",
    "@react-navigation/bottom-tabs": "7.0.7",
    "@react-navigation/native": "7.0.4",
    "@react-navigation/stack": "7.0.6",
    "@reduxjs/toolkit": "2.3.0",
    "@shopify/flash-list": "1.7.2",
    "@shopify/react-native-skia": "1.5.8",
    "@types/d3-scale": "4.0.8",
    "axios": "1.7.7",
    "d3-scale": "4.0.2",
    "dayjs": "1.11.13",
    "deprecated-react-native-prop-types": "5.0.0",
    "hoist-non-react-statics": "3.3.2",
    "i18next": "24.0.0",
    "jssip": "3.10.1",
    "lodash": "4.17.21",
    "lottie-react-native": "7.1.0",
    "mitt": "3.0.1",
    "moment": "2.30.1",
    "moment-timezone": "0.5.46",
    "moti": "0.29.0",
    "prop-types": "15.8.1",
    "react": "18.3.1",
    "react-content-loader": "7.0.2",
    "react-i18next": "15.1.1",
    "react-native": "0.75.4",
    "react-native-appsflyer": "6.15.1",
    "react-native-blob-util": "0.19.11",
    "react-native-calendars": "1.1307.0",
    "react-native-camera": "4.2.1",
    "react-native-code-push": "9.0.0",
    "react-native-default-preference": "1.4.4",
    "react-native-device-info": "14.0.1",
    "react-native-document-picker": "9.3.1",
    "react-native-fast-image": "8.6.3",
    "react-native-geolocation-service": "5.3.1",
    "react-native-gesture-handler": "2.21.2",
    "react-native-haptic-feedback": "2.3.3",
    "react-native-idle-timer": "2.2.3",
    "react-native-image-marker": "1.2.6",
    "react-native-image-picker": "7.1.2",
    "react-native-incall-manager": "4.2.0",
    "react-native-keyboard-aware-scroll-view": "0.9.5",
    "react-native-linear-gradient": "2.8.3",
    "react-native-material-dialog": "0.7.7",
    "react-native-mmkv": "2.12.2",
    "react-native-modal": "13.0.1",
    "react-native-modal-datetime-picker": "18.0.0",
    "react-native-moengage": "9.1.0",
    "react-native-moengage-inbox": "3.1.0",
    "react-native-orientation-locker": "1.7.0",
    "react-native-permissions": "5.2.0",
    "react-native-progress-bar-animated": "1.0.6",
    "react-native-push-notification": "8.1.1",
    "react-native-radio-buttons-group": "3.1.0",
    "react-native-reanimated": "3.16.2",
    "react-native-reanimated-carousel": "3.5.1",
    "react-native-record-screen": "0.6.2",
    "react-native-redash": "18.1.3",
    "react-native-render-html": "6.3.4",
    "react-native-safe-area-context": "4.14.0",
    "react-native-screens": "4.3.0",
    "react-native-simple-toast": "1.1.4",
    "react-native-snap-carousel": "3.9.1",
    "react-native-svg": "15.9.0",
    "react-native-vector-icons": "10.2.0",
    "react-native-video": "6.8.0",
    "react-native-vision-camera": "4.6.1",
    "react-native-webrtc": "124.0.4",
    "react-native-webview": "13.12.4",
    "react-redux": "9.1.2",
    "redux-persist": "6.0.0",
    "redux-saga": "1.3.0",
    "rn-sms-retriever": "1.2.1",
    "zod": "3.23.8"
  },
  "devDependencies": {
    "@babel/core": "7.26.0",
    "@babel/plugin-proposal-nullish-coalescing-operator": "7.18.6",
    "@babel/plugin-proposal-optional-chaining": "7.21.0",
    "@babel/plugin-transform-arrow-functions": "7.25.9",
    "@babel/plugin-transform-react-jsx": "7.25.9",
    "@babel/plugin-transform-shorthand-properties": "7.25.9",
    "@babel/plugin-transform-template-literals": "7.25.9",
    "@babel/preset-env": "7.26.0",
    "@babel/runtime": "7.26.0",
    "@react-native/babel-preset": "0.75.4",
    "@react-native/eslint-config": "0.75.4",
    "@react-native/metro-config": "0.75.4",
    "@react-native/typescript-config": "0.75.4",
    "@storybook/addon-ondevice-actions": "8.4.2",
    "@storybook/addon-ondevice-backgrounds": "8.4.2",
    "@storybook/addon-ondevice-controls": "8.4.2",
    "@storybook/addon-ondevice-notes": "8.4.2",
    "@storybook/react-native": "8.4.2",
    "@types/react": "18.3.12",
    "@types/react-native-vector-icons": "6.4.18",
    "@types/react-test-renderer": "18.3.0",
    "@typescript-eslint/eslint-plugin": "8.15.0",
    "@typescript-eslint/parser": "8.15.0",
    "babel-jest": "29.7.0",
    "babel-loader": "9.2.1",
    "babel-plugin-module-resolver": "5.0.2",
    "crypto-es": "2.1.0",
    "enzyme": "3.11.0",
    "enzyme-adapter-react-16": "1.15.8",
    "eslint": "8.57.1",
    "eslint-config-prettier": "9.1.0",
    "eslint-import-resolver-typescript": "3.6.3",
    "eslint-plugin-ft-flow": "3.0.11",
    "eslint-plugin-import": "2.31.0",
    "eslint-plugin-import-order-autofix": "0.8.3",
    "eslint-plugin-jest": "28.9.0",
    "eslint-plugin-jsx-a11y": "6.10.2",
    "eslint-plugin-no-inline-styles": "1.0.5",
    "eslint-plugin-prettier": "5.2.1",
    "eslint-plugin-react": "7.37.2",
    "eslint-plugin-react-hooks": "5.0.0",
    "eslint-plugin-reactotron": "0.1.5",
    "husky": "9.1.7",
    "jest": "29.7.0",
    "lint-staged": "15.2.10",
    "patch-package": "8.0.0",
    "pod-install": "0.3.2",
    "prettier": "3.3.3",
    "prettier-eslint": "16.3.0",
    "react-dom": "18.3.1",
    "react-test-renderer": "18.3.1",
    "reactotron-react-native": "5.1.10",
    "reactotron-react-native-mmkv": "^0.2.7",
    "reactotron-redux": "3.1.10",
    "reactotron-redux-saga": "4.2.3",
    "typescript": "5.0.4"
  },
  "engines": {
    "node": ">=18"
  },
  "lint-staged": {
    "*.{js,jsx,ts,tsx}": [
      "prettier --write",
      "eslint --fix"
    ]
  },
  "packageManager": "[email protected]"

The error thrown in Xcode log is

Invariant Violation: TurboModuleRegistry.getEnforcing(...): 'DevMenu' could not be found. Verify that a module by this name is registered in the native binary. Bridgeless mode: false. TurboModule interop: false. Modules loaded: {"NativeModules":["UIManager","PlatformConstants","DeviceInfo","RNGestureHandlerModule","I18nManager","NativeAnimatedModule","RNCAsyncStorage","KeyboardObserver","Timing","SourceCode","ImageLoader","ReactNativeBlobUtil","RNHapticFeedback","BlobModule","ModalManager","ReanimatedModule"],"TurboModules":[],"NotFound":["NativePerformanceObserverCxx","NativePerformanceCxx","NativeReactNativeFeatureFlagsCxx","RedBox","BugReporting","HeadlessJsTaskSupport","SoundManager","RNVectorIcons","PlatformLocalStorage","RNC_AsyncSQLiteDBStorage","FrameRateLogger","DevMenu"]}, js engine: hermes
Unhandled JS Exception: Invariant Violation: TurboModuleRegistry.getEnforcing(...): 'DevMenu' could not be found. Verify that a module by this name is registered in the native binary. Bridgeless mode: false. TurboModule interop: false. Modules loaded: {"NativeModules":["UIManager","PlatformConstants","DeviceInfo","RNGestureHandlerModule","I18nManager","NativeAnimatedModule","RNCAsyncStorage","KeyboardObserver","Timing","SourceCode","ImageLoader","ReactNativeBlobUtil","RNHapticFeedback","BlobModule","ModalManager","ReanimatedModule"],"TurboModules":[],"NotFound":["NativePerformanceObserverCxx","NativePerformanceCxx","NativeReactNativeFeatureFlagsCxx","RedBox","BugReporting","HeadlessJsTaskSupport","SoundManager","RNVectorIcons","PlatformLocalStorage","RNC_AsyncSQLiteDBStorage","FrameRateLogger","DevMenu"]}, js engine: hermes
*** Terminating app due to uncaught exception 'RCTFatalException: Unhandled JS Exception: Invariant Violation: TurboModuleRegistry.getEnforcing(...): 'DevMenu' could not be found. Verify that a module by this name is registered in the native binary. Bridgeless mode: false. TurboModule interop: false. Modules loaded: {"NativeModules":["UIManager","PlatformConstants","DeviceInfo","RNGestureHandlerModule","I18nManager","NativeAnimatedModule","RNCAsyncStorage","KeyboardObserver","Timing","SourceCode","ImageLoader","ReactNativeBlobUtil","RNHapticFeedback","BlobModule","ModalManager","ReanimatedModule"],"TurboModules":[],"NotFound":["NativePerformanceObserverCxx","NativePerformanceCxx","NativeReactNativeFeatureFlagsCxx","RedBox","BugReporting","HeadlessJsTaskSupport","SoundManager","RNVectorIcons","PlatformLocalStorage","RNC_AsyncSQLiteDBStorage","FrameRateLogger","DevMenu"]}, js engine: hermes', reason: 'Unhandled JS Exception: Invariant Violation: TurboModuleRegistry.getEnforcing(...): 'DevMenu' could not be found. Verify that a module by this name is registered in the native..., stack:
invariant@2741:25
getEnforcing@3496:27
anonymous@163619:67
loadModuleImplementation@158:13
guardedLoadModule@96:37
metroRequire@38:91
anonymous@163577:58
loadModuleImplementation@158:13
guardedLoadModule@96:37
metroRequire@38:91
anonymous@163552:25
loadModuleImplementation@158:13
guardedLoadModule@96:37
metroRequire@38:91
anonymous@161173:52
loadModuleImplementation@158:13
guardedLoadModule@96:37
metroRequire@38:91
anonymous@161091:66
loadModuleImplementation@158:13
guardedLoadModule@96:37
metroRequire@38:91
anonymous@161063:65
loadModuleImplementation@158:13
guardedLoadModule@96:37
metroRequire@38:91
anonymous@161051:60
loadModuleImplementation@158:13
guardedLoadModule@89:46
metroRequire@38:91
?anon_0_@165228:21
asyncGeneratorStep@813:18
_next@827:28
anonymous@832:13
anonymous@824:24
_migrateFromAsyncStorage@165251:41
migrateFromAsyncStorage@165224:41
?anon_0_@104624:78
asyncGeneratorStep@813:18
_next@827:28
anonymous@832:13
anonymous@824:24
processNext@38744:18
_processUpdate@38612:30
anonymous@13122:25
_callTimer@13011:16
_callReactNativeMicrotasksPass@13049:16
callReactNativeMicrotasks@13252:43
__callReactNativeMicrotasks@2342:47
anonymous@2206:44
__guard@2314:14
flushedQueue@2205:20
'
*** First throw call stack:
(
	0   CoreFoundation                      0x000000010ef33531 __exceptionPreprocess + 242
	1   libobjc.A.dylib                     0x000000010ecef7e8 objc_exception_throw + 48

jerinjohnk avatar Nov 23 '24 17:11 jerinjohnk

Hey I have the same problem and downgrading to 5.1.8 didn't work (I was in 5.1.9 I didn't tried 5.1.10 yet tho). I do not get any error on metro only this in XCode:

10.3.0 - [FirebasePerformance][I-PRF300005] URL length exceeds limits, truncating recorded URL - http://localhost:8081/config/ReactotronConfig.bundle.
libc++abi: terminating due to uncaught exception of type std::__1::bad_function_call: std::exception

this is my metro logs:

 BUNDLE  ./index.js 

 BUNDLE  config/ReactotronConfig.js 

that's it I don't get anything else. No logs, no issues nothing the app crashed after a successful build.

my package.json:

"react-native": "^0.76.2",
"react": "^18.3.1",

my ReactototronConfig.js:

import Reactotron, { trackGlobalErrors, asyncStorage, networking } from 'reactotron-react-native';
import AsyncStorage from '@react-native-async-storage/async-storage';
import { reactotronRedux } from 'reactotron-redux';

const reactotron = Reactotron.setAsyncStorageHandler(AsyncStorage) // AsyncStorage would either come from `react-native` or `@react-native-community/async-storage` depending on where you get it from
    .configure() // controls connection to the default ip address & communication settings
    .useReactNative({
        // add all built-in react native plugins
        asyncStorage: true, // there are more options to the async storage.
        networking: {
            // optionally, you can turn it off with false.
            ignoreUrls: /symbolicate/,
        },
        editor: false, // there are more options to editor
        errors: { veto: (stackFrame) => false }, // or turn it off with false
        overlay: false, // just turning off overlay
    })
    .use(
        asyncStorage({
            ignore: ['secret'],
        }),
    ) // allows you to track AsyncStorage on React Native
    .use(networking())
    .use(
        trackGlobalErrors({
            veto: (frame) => frame.fileName.indexOf('/node_modules/react-native/') >= 0,
            offline: true,
        }),
    )
    .use(
        reactotronRedux({
            except: ['@@network-connectivity/CONNECTION_CHANGE'],
        }),
    )
    .connect();

console.tron = Reactotron.log;
console.display = Reactotron.log;

export default reactotron;

MarlonAEC avatar Nov 27 '24 16:11 MarlonAEC

@MarlonAEC and you're saying if you remove the dep the build succeeds?

Can you show me how you import the config in the other source file?

frankcalise avatar Nov 27 '24 17:11 frankcalise

For me, the build always succeeds just when it tries to run the app it crashes. This is how I import the config in my App.js:

async componentDidMount() {
      if (__DEV__) {
        import('./config/ReactotronConfig').then(() => console.log('Reactotron Configured'));
      }
      //Rest of my code here
}

MarlonAEC avatar Nov 27 '24 17:11 MarlonAEC

Oh, my bad I thought about your questions and even commented out the if(__DEV__) thing and the whole ReactotronConfig.js file, and still the app crashes. Sorry I misunderstood your question when I first replied

MarlonAEC avatar Nov 27 '24 17:11 MarlonAEC

@MarlonAEC ok let me know if 5.1.10 changes things for you if you could

frankcalise avatar Nov 27 '24 18:11 frankcalise

Got the same problem on 5.1.10, unfortunately 😔. Is there anything else I could try?

MarlonAEC avatar Nov 27 '24 19:11 MarlonAEC

@MarlonAEC could you try that Reactotron import higher? It should be one of the first things loaded in your app entry point.

joshuayoes avatar Nov 27 '24 20:11 joshuayoes

@MarlonAEC the import should be moved to one of the first lines in the entry point of your application. It seems like you have it further down, which is too late. Notice where it is in Ignite: https://github.com/infinitered/ignite/blob/master/boilerplate/app/app.tsx#L13-L18

This is documented here: https://docs.infinite.red/reactotron/quick-start/react-native/#step-3---add-reactotron-to-your-app

frankcalise avatar Nov 27 '24 20:11 frankcalise

OK I moved the import to the first line of my App.js and still the app crashed also changed the import to required to match the link you shared just in case but still it's crashing with the same log as before on XCode Screenshot 2024-11-27 at 5 10 48 PM

MarlonAEC avatar Nov 27 '24 22:11 MarlonAEC

I wonder if this other issue is related: https://github.com/facebook/react-native/issues/47935 I'm kinda in the same scenario, what I'm trying to do is update my app to the latest react native version 0.76. I had to change a lot of things in my code to make this work but so far everything else got resolved, only this issue is blocking me from running my app.

MarlonAEC avatar Nov 27 '24 22:11 MarlonAEC

Ok a quick update I completely removed reactotron from my project and the app is still crashing. I guess that makes clear the problem is not with this library but with react native 0.76. I will keep searching for a solution if I find something I will update this thread

MarlonAEC avatar Nov 27 '24 22:11 MarlonAEC

I'm getting this same issue on my jest tests. Any thoughts?

  ● Test suite failed to run

    Invariant Violation: TurboModuleRegistry.getEnforcing(...): 'DevMenu' could not be found. Verify that a module by this name is registered in the native binary.

       7 | import { NativeModules } from "react-native"
       8 | import { mst } from "reactotron-mst"
    >  9 | import Tron from "reactotron-react-native"
"reactotron-mst": "^3.1.10",
"reactotron-react-js": "^3.3.15",
"reactotron-react-native": "^5.1.10",

Note: Downgrading to

"reactotron-mst": "3.1.3",
"reactotron-react-js": "^3.3.15",
"reactotron-react-native": "5.0.0",

Does fix the errors but wondering whats going wrong with the new updates that is causing this

CaptainJeff avatar Dec 03 '24 15:12 CaptainJeff

This solution https://github.com/facebook/react-native/issues/47935#issuecomment-2508978315 fixed the bad_function_call error but I got the same issue as you are getting but with a different package tho:

TurboModuleRegistry.getEnforcing(...): 'PkceChallenge' could not be found. Verify that a module by this name is registered in the native binary.

so I think that solutions kinda just mask the problem but all other packages that are expecting the architecture to be ON start to crash as soon you disable it because they probably are expecting the architecture to be on by default on the latest versions of those packages. I'm still exploring some other options but so far no luck. I opened this bug on the package: https://github.com/dcangulo/react-native-pkce-challenge/issues/511 to see if they know about it but I haven't get a response yet

MarlonAEC avatar Dec 03 '24 16:12 MarlonAEC

@MarlonAEC yeah i was thinking the same thing. I'm not sure why this would be getting invoked for my jest tests though. Makes sense for the runtime error

CaptainJeff avatar Dec 03 '24 16:12 CaptainJeff

same here, this link may help facebook/react-native#47193 (comment)

The patch resolved the issue for me with RN 0.76.5 and reactotron-react-native 5.1.10.

bradstiff avatar Dec 19 '24 18:12 bradstiff