App runs fine locally but crashes on start when opening from an eas update

Hi, I am running a managed app with SDK 46.
eas-cli/2.6.0 darwin-arm64 node-v16.15.0

I will add my app.config.js file & package.json file at the bottom of the post.

I published my app with eas update to a preview branch on Nov 2, and loaded it successfully in Expo Go.
Then I made a very minor change and published again on Nov 6, publishing ended successfully, but when I load it in Expo Go the app crashes before it is even started, right after pressing the update name I want to open.

Every new eas update I publish now crashes when opened.
I even took the exact same commit that was in my last working update and tried to publish that again, and that update crashes as well.

Iā€™ve worked for days now trying to figure it out and I just canā€™t get it to work.

Symptoms:

  • Running the app locally with Expo Go on an iPhone 13 running iOS 16 works. Same for a Galaxy S8 running Android 9.0, But both canā€™t be opened from an eas update published release.

  • When loading a published version from a branch in Expo Go, on iOS: the app immediately crashes and closes without any errors showing. not even in the iOS log files (they are created but blank).
    on Android: the ā€˜New update available, downloadingā€¦ā€™ stage lasts forever and its just stuck there.

Actions I tried to take:

  • Tried to download the exact same commit I had on my last non-crashing update and run eas update with it again, but it also crashed.

  • Opened a blank expo project and tried to upload it, that one worked as expected, which means there probably nothing wrong with my eas-cli or something.

  • Ran my app locally with the ā€œnpx expo start --no-dev --minifyā€ command, it ran perfectly fine.

  • Created an apk using eas build, installed it on my Android device, and it crashes on start too.

app.config.js file:

import "dotenv/config";

export default {
	name: "<my_app_name>",
	slug: "<my_app_slug>",
	version: "1.0.0",
	owner: "<my_username>",
	orientation: "portrait",
	scheme: "myapp",
	userInterfaceStyle: "automatic",
	icon: "./assets/icon.png",
	updates: {
		fallbackToCacheTimeout: 0,
		url: "https://u.expo.dev/<my_project_id>",
	},
	splash: {
		image: "./assets/splash_screen.png",
		resizeMode: "contain",
		backgroundColor: "#ffffff",
	},
	assetBundlePatterns: ["**/*"],
	ios: {
		supportsTablet: true,
	},
	android: {
		package: "com.<my_username>.<my_app_name>",
		googleServicesFile: "./google-services.json",
	},
	plugins: [
		[
			"expo-notifications",
			{
				icon: "./assets/logo.png",
				color: "#ffffff",
				// sounds: [
				// 	"./local/assets/notification-sound.wav",
				// 	"./local/assets/notification-sound-other.wav",
				// ],
			},
		],
	],
	runtimeVersion: {
		policy: "sdkVersion",
	},
	web: {
		favicon: "./assets/icon.png",
	},
	extra: {
		eas: {
			projectId: "<my_project_id>",
		},
		SERVER_URL: process.env.SERVER_URL,
		TIMEOUT: process.env.TIMEOUT,
		AUTH_SERVER_URL: process.env.AUTH_SERVER_URL,
		PAYMENT_FORM_BASE_URL: process.env.PAYMENT_FORM_BASE_URL,
	},
};

my package.json file:

{
  "name": "<my_app_name>",
  "version": "1.0.0",
  "main": "node_modules/expo/AppEntry.js",
  "scripts": {
    "start": "expo start",
    "start-fresh": "expo start -c",
    "android": "expo start --android",
    "ios": "expo start --ios",
    "web": "expo start --web",
    "eject": "expo eject",
    "test": "jest --watchAll"
  },
  "jest": {
    "preset": "jest-expo"
  },
  "dependencies": {
    "@expo-google-fonts/fredoka-one": "^0.2.2",
    "@expo/vector-icons": "^13.0.0",
    "@gorhom/bottom-sheet": "^4.1.5",
    "@react-native-community/hooks": "^2.8.1",
    "@react-native-picker/picker": "2.4.2",
    "@react-navigation/bottom-tabs": "^6.0.5",
    "@react-navigation/native": "^6.0.2",
    "@react-navigation/native-stack": "^6.1.0",
    "@reduxjs/toolkit": "^1.8.0",
    "async-mutex": "^0.3.2",
    "async-retry": "^1.3.3",
    "axios": "^0.26.0",
    "date-fns": "^2.28.0",
    "dotenv": "^16.0.1",
    "expo": "~46.0.16",
    "expo-app-loading": "~2.1.0",
    "expo-asset": "~8.6.1",
    "expo-blur": "~11.2.0",
    "expo-constants": "~13.2.4",
    "expo-device": "~4.3.0",
    "expo-font": "~10.2.0",
    "expo-linking": "~3.2.2",
    "expo-localization": "~13.1.0",
    "expo-notifications": "~0.16.1",
    "expo-secure-store": "~11.3.0",
    "expo-splash-screen": "~0.16.2",
    "expo-status-bar": "~1.4.0",
    "expo-updates": "~0.14.7",
    "expo-web-browser": "~11.0.0",
    "http-status-codes": "^2.2.0",
    "i18next": "^21.6.12",
    "jwt-decode": "^3.1.2",
    "lodash.clonedeep": "^4.5.0",
    "lodash.isequal": "^4.5.0",
    "lodash.pick": "^4.4.0",
    "lottie-react-native": "5.1.3",
    "react": "18.0.0",
    "react-dom": "18.0.0",
    "react-i18next": "^11.18.4",
    "react-native": "0.69.6",
    "react-native-confirmation-code-field": "^7.3.0",
    "react-native-gesture-handler": "~2.5.0",
    "react-native-keyboard-aware-scroll-view": "^0.9.5",
    "react-native-paper": "^4.11.2",
    "react-native-ratings": "^8.1.0",
    "react-native-reanimated": "~2.9.1",
    "react-native-safe-area-context": "4.3.1",
    "react-native-screens": "~3.15.0",
    "react-native-status-bar-height": "^2.6.0",
    "react-native-step-indicator": "^1.0.3",
    "react-native-web": "~0.18.7",
    "react-native-webview": "11.23.0",
    "react-redux": "^7.2.6",
    "redux": "^4.1.2"
  },
  "devDependencies": {
    "@babel/core": "^7.18.6",
    "@types/async-retry": "^1.4.5",
    "@types/lodash.clonedeep": "^4.5.7",
    "@types/lodash.isequal": "^4.5.5",
    "@types/lodash.pick": "^4.4.6",
    "@types/react": "~18.0.0",
    "@types/react-dom": "~18.0.0",
    "@types/react-native": "~0.69.1",
    "jest": "^26.6.3",
    "jest-expo": "^46.0.0",
    "react-test-renderer": "18.0.0",
    "typescript": "^4.6.3"
  },
  "private": true
}

P.S: I used to have a custom metro config to allow me to load svg assets and I removed it now, but the version including it fails just like the new ones which donā€™t, so I assume itā€™s not related.
If you want me to include it please mention it

Thanks in advance to anyone who will try and help, Iā€™m so frustrated by nowā€¦
Hoping for the best :crossed_fingers:

Thought I should mention that I just upgraded to SDK 47 in hopes that this or some related packages upgrades would fix the problem and it doesnā€™t.

Would really appreciate your help with this guys

have you tried following these instructions yet? Debugging - Expo Documentation

I have yeah, unfortunately my app works fine running on Xcode, and I even tried to install Sentry to get some error logs what so ever but it seems that the app crashes at such an early stage (right away when I try to load it) that Sentry isnā€™t even loaded yet and so Iā€™m left with no logs at allā€¦

Any idea on some other steps I can take? I think this may be related to some update in the eas update servers because I could load builds from it just fine on Nov 2 but ever since that day every eas update I publish just crashes on start even that exact last working update from Nov 2 crashes if I publish it nowā€¦

Iā€™ve seen on Expo status that youā€™ve had some issue with eas update on Nov 2 related to an assets thing, maybe its connected somehow?

I really donā€™t know where to look for the problem anymoreā€¦
Would appreciate your help so much brents

Do you get the same symptoms if you create a new app?

Hey wodin thanks for your help.
No I wrote in the post that a new app works as expected.

I tried to avoid it until now because I have many dependencies but I will try adding my dependencies one by one until it doesnā€™t work anymore.

Iā€™m just scared Iā€™d do all this and it will turn out not to be the problem at all.

If you have other ideas for me Iā€™d appreciate it. Thanks!

Ah, sorry, I missed that.

Start by adding all of your deps. If that fails then you can start narrowing down which one or which combination fails.

If it works it might still be because of dependency versions, so you could e.g. replace the lock file in your real app with the one from the working app and reinstall your dependencies to see if that gets the real app working too.

Hey thanks for the idea.
Unfortunately I did it and the new app works after installing all the dependencies on it,
but when I replaced the package-lock of the original app and reinstalled everything it still crashes.

BTW, I spent the last 4 hours commenting out parts of my code trying to narrow down the root cause.
I thought I had a breakthrough when this one line pointing to a function I wrote which uses expo-secure-store functions made the difference when the app worked on eas update with this line commented out and crashed with it not commented.

The thing is I started playing around with it and couldnā€™t narrow the problem down further, then went back to the original line and commented it out again and it still crashed.

Iā€™m really losing it hereā€¦ Any chance taking my whole code and putting it into a fresh expo project would do the difference? maybe some sort of cache thing in the eas servers about my app or IDKā€¦

Any additional thoughts? :pray:

I canā€™t achieve consistency when trying to comment out chunks of code to see if it works.
If I rule out entire navigators it does work but I canā€™t really seem to succeed in digging deeper than that.

I got to a point where I only left a specific screen uncommented and found specific lines that make the difference when I comment them out, but those lines are in a callback function that is not even called when the app starts so IDK if that even makes sense.

Also if I uncomment navigators back in when those lines I talked about are commented the app crashes again.
Iā€™m really losing faith here :frowning:

I checked iOS log files again and now they are not blank which is weird but also might save me so IDK

Hereā€™s its content

{"app_name":"Expo Go","timestamp":"2022-11-10 09:11:51.00 +0200","app_version":"2.26.4","slice_uuid":"6e8d1ef7-f3bc-3573-9d57-7b8b00a56565","adam_id":"982107779","build_version":"2.26.4.1016582","platform":2,"bundleID":"host.exp.Exponent","share_with_app_devs":0,"is_first_party":0,"bug_type":"309","os_version":"iPhone OS 16.0.3 (20A392)","roots_installed":0,"name":"Expo Go","incident_id":"3AD4E137-386F-4DFE-A499-A5DAD305AAE0"}
{
  "uptime" : 110000,
  "procRole" : "Foreground",
  "version" : 2,
  "userID" : 501,
  "deployVersion" : 210,
  "modelCode" : "iPhone14,5",
  "coalitionID" : 1346,
  "osVersion" : {
    "isEmbedded" : true,
    "train" : "iPhone OS 16.0.3",
    "releaseType" : "User",
    "build" : "20A392"
  },
  "captureTime" : "2022-11-10 09:11:50.7989 +0200",
  "incident" : "3AD4E137-386F-4DFE-A499-A5DAD305AAE0",
  "pid" : 5059,
  "cpuType" : "ARM-64",
  "roots_installed" : 0,
  "bug_type" : "309",
  "procLaunch" : "2022-11-10 09:09:41.7228 +0200",
  "procStartAbsTime" : 2739517970472,
  "procExitAbsTime" : 2741940216710,
  "procName" : "Expo Go",
  "procPath" : "\/private\/var\/containers\/Bundle\/Application\/3E83F450-BF86-41E7-94ED-5E5ACA87E22F\/Expo Go.app\/Expo Go",
  "bundleInfo" : {"CFBundleShortVersionString":"2.26.4","CFBundleVersion":"2.26.4.1016582","CFBundleIdentifier":"host.exp.Exponent","DTAppStoreToolsBuild":"14B44"},
  "storeInfo" : {"storeCohortMetadata":"10|date=1667838600000&sf=143491&pgtp=Search&pgid=f9769b3d-f745-4dec-a7ce-e52f4974790e&prpg=Genre_179183&ctxt=Search&issrch=1&imptyp=card&kind=iosSoftware&lngid=2","itemID":"982107779","deviceIdentifierForVendor":"202354A4-B10B-4FAF-9B27-401E673A1E51","softwareVersionExternalIdentifier":"852981059","thirdParty":true,"applicationVariant":"1:iPhone14,5:15"},
  "parentProc" : "launchd",
  "parentPid" : 1,
  "coalitionName" : "host.exp.Exponent",
  "crashReporterKey" : "d865bd6616e36332371702aca6a65bced1a1f5c2",
  "basebandVersion" : "2.09.01",
  "exception" : {"codes":"0x0000000000000000, 0x0000000000000000","rawCodes":[0,0],"type":"EXC_CRASH","signal":"SIGABRT"},
  "asi" : {"libsystem_c.dylib":["abort() called"]},
  "lastExceptionBacktrace" : [{"imageOffset":41544,"symbol":"__exceptionPreprocess","symbolLocation":164,"imageIndex":1},{"imageOffset":96872,"symbol":"objc_exception_throw","symbolLocation":60,"imageIndex":14},{"imageOffset":1565680,"symbol":"+[NSObject(NSObject) _copyDescription]","symbolLocation":0,"imageIndex":1},{"imageOffset":131320,"symbol":"___forwarding___","symbolLocation":976,"imageIndex":1},{"imageOffset":558688,"symbol":"_CF_forwarding_prep_0","symbolLocation":96,"imageIndex":1},{"imageOffset":11216704,"imageIndex":4},{"imageOffset":11218760,"imageIndex":4},{"imageOffset":477716,"symbol":"__invoking___","symbolLocation":148,"imageIndex":1},{"imageOffset":134956,"symbol":"-[NSInvocation invoke]","symbolLocation":428,"imageIndex":1},{"imageOffset":133444,"symbol":"-[NSInvocation invokeWithTarget:]","symbolLocation":64,"imageIndex":1},{"imageOffset":10888132,"imageIndex":4},{"imageOffset":10896964,"imageIndex":4},{"imageOffset":10896076,"imageIndex":4},{"imageOffset":9396,"symbol":"_dispatch_call_block_and_release","symbolLocation":32,"imageIndex":15},{"imageOffset":16348,"symbol":"_dispatch_client_callout","symbolLocation":20,"imageIndex":15},{"imageOffset":46740,"symbol":"_dispatch_lane_serial_drain","symbolLocation":672,"imageIndex":15},{"imageOffset":49632,"symbol":"_dispatch_lane_invoke","symbolLocation":384,"imageIndex":15},{"imageOffset":93712,"symbol":"_dispatch_workloop_worker_thread","symbolLocation":652,"imageIndex":15},{"imageOffset":3576,"symbol":"_pthread_wqthread","symbolLocation":288,"imageIndex":7},{"imageOffset":2968,"symbol":"start_wqthread","symbolLocation":8,"imageIndex":7}],
  "faultingThread" : 7,
  "threads" : [{"id":1569356,"queue":"com.apple.main-thread","frames":[{"imageOffset":2888,"symbol":"mach_msg2_trap","symbolLocation":8,"imageIndex":0},{"imageOffset":77832,"symbol":"mach_msg2_internal","symbolLocation":80,"imageIndex":0},{"imageOffset":78408,"symbol":"mach_msg_overwrite","symbolLocation":388,"imageIndex":0},{"imageOffset":4236,"symbol":"mach_msg","symbolLocation":24,"imageIndex":0},{"imageOffset":503296,"symbol":"__CFRunLoopServiceMachPort","symbolLocation":160,"imageIndex":1},{"imageOffset":507972,"symbol":"__CFRunLoopRun","symbolLocation":1232,"imageIndex":1},{"imageOffset":528868,"symbol":"CFRunLoopRunSpecific","symbolLocation":612,"imageIndex":1},{"imageOffset":4968,"symbol":"GSEventRunModal","symbolLocation":164,"imageIndex":2},{"imageOffset":3812744,"symbol":"-[UIApplication _run]","symbolLocation":888,"imageIndex":3},{"imageOffset":3811820,"symbol":"UIApplicationMain","symbolLocation":340,"imageIndex":3},{"imageOffset":542788,"symbol":"main","symbolLocation":64,"imageIndex":4},{"imageOffset":88392,"symbol":"start","symbolLocation":2504,"imageIndex":5}]},{"id":1569386,"name":"com.apple.uikit.eventfetch-thread","frames":[{"imageOffset":2888,"symbol":"mach_msg2_trap","symbolLocation":8,"imageIndex":0},{"imageOffset":77832,"symbol":"mach_msg2_internal","symbolLocation":80,"imageIndex":0},{"imageOffset":78408,"symbol":"mach_msg_overwrite","symbolLocation":388,"imageIndex":0},{"imageOffset":4236,"symbol":"mach_msg","symbolLocation":24,"imageIndex":0},{"imageOffset":503296,"symbol":"__CFRunLoopServiceMachPort","symbolLocation":160,"imageIndex":1},{"imageOffset":507972,"symbol":"__CFRunLoopRun","symbolLocation":1232,"imageIndex":1},{"imageOffset":528868,"symbol":"CFRunLoopRunSpecific","symbolLocation":612,"imageIndex":1},{"imageOffset":268312,"symbol":"-[NSRunLoop(NSRunLoop) runMode:beforeDate:]","symbolLocation":212,"imageIndex":6},{"imageOffset":268032,"symbol":"-[NSRunLoop(NSRunLoop) runUntilDate:]","symbolLocation":64,"imageIndex":6},{"imageOffset":5077132,"symbol":"-[UIEventFetcher threadMain]","symbolLocation":436,"imageIndex":3},{"imageOffset":371944,"symbol":"__NSThread__start__","symbolLocation":716,"imageIndex":6},{"imageOffset":5836,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":7},{"imageOffset":2980,"symbol":"thread_start","symbolLocation":8,"imageIndex":7}]},{"id":1569405,"name":"com.facebook.react.JavaScript","frames":[{"imageOffset":2888,"symbol":"mach_msg2_trap","symbolLocation":8,"imageIndex":0},{"imageOffset":77832,"symbol":"mach_msg2_internal","symbolLocation":80,"imageIndex":0},{"imageOffset":78408,"symbol":"mach_msg_overwrite","symbolLocation":388,"imageIndex":0},{"imageOffset":4236,"symbol":"mach_msg","symbolLocation":24,"imageIndex":0},{"imageOffset":503296,"symbol":"__CFRunLoopServiceMachPort","symbolLocation":160,"imageIndex":1},{"imageOffset":507972,"symbol":"__CFRunLoopRun","symbolLocation":1232,"imageIndex":1},{"imageOffset":528868,"symbol":"CFRunLoopRunSpecific","symbolLocation":612,"imageIndex":1},{"imageOffset":16929572,"imageIndex":4},{"imageOffset":371944,"symbol":"__NSThread__start__","symbolLocation":716,"imageIndex":6},{"imageOffset":5836,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":7},{"imageOffset":2980,"symbol":"thread_start","symbolLocation":8,"imageIndex":7}]},{"id":1569406,"name":"com.apple.CoreMotion.MotionThread","frames":[{"imageOffset":2888,"symbol":"mach_msg2_trap","symbolLocation":8,"imageIndex":0},{"imageOffset":77832,"symbol":"mach_msg2_internal","symbolLocation":80,"imageIndex":0},{"imageOffset":78408,"symbol":"mach_msg_overwrite","symbolLocation":388,"imageIndex":0},{"imageOffset":4236,"symbol":"mach_msg","symbolLocation":24,"imageIndex":0},{"imageOffset":503296,"symbol":"__CFRunLoopServiceMachPort","symbolLocation":160,"imageIndex":1},{"imageOffset":507972,"symbol":"__CFRunLoopRun","symbolLocation":1232,"imageIndex":1},{"imageOffset":528868,"symbol":"CFRunLoopRunSpecific","symbolLocation":612,"imageIndex":1},{"imageOffset":806932,"symbol":"CFRunLoopRun","symbolLocation":64,"imageIndex":1},{"imageOffset":80644,"imageIndex":8},{"imageOffset":5836,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":7},{"imageOffset":2980,"symbol":"thread_start","symbolLocation":8,"imageIndex":7}]},{"id":1569408,"name":"hades","frames":[{"imageOffset":5148,"symbol":"__psynch_cvwait","symbolLocation":8,"imageIndex":0},{"imageOffset":32876,"symbol":"_pthread_cond_wait","symbolLocation":1232,"imageIndex":7},{"imageOffset":51916,"symbol":"std::__1::condition_variable::wait(std::__1::unique_lock<std::__1::mutex>&)","symbolLocation":28,"imageIndex":9},{"imageOffset":1168812,"imageIndex":10},{"imageOffset":1168224,"imageIndex":10},{"imageOffset":5836,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":7},{"imageOffset":2980,"symbol":"thread_start","symbolLocation":8,"imageIndex":7}]},{"id":1569414,"name":"com.apple.NSURLConnectionLoader","frames":[{"imageOffset":2888,"symbol":"mach_msg2_trap","symbolLocation":8,"imageIndex":0},{"imageOffset":77832,"symbol":"mach_msg2_internal","symbolLocation":80,"imageIndex":0},{"imageOffset":78408,"symbol":"mach_msg_overwrite","symbolLocation":388,"imageIndex":0},{"imageOffset":4236,"symbol":"mach_msg","symbolLocation":24,"imageIndex":0},{"imageOffset":503296,"symbol":"__CFRunLoopServiceMachPort","symbolLocation":160,"imageIndex":1},{"imageOffset":507972,"symbol":"__CFRunLoopRun","symbolLocation":1232,"imageIndex":1},{"imageOffset":528868,"symbol":"CFRunLoopRunSpecific","symbolLocation":612,"imageIndex":1},{"imageOffset":2444204,"imageIndex":11},{"imageOffset":371944,"symbol":"__NSThread__start__","symbolLocation":716,"imageIndex":6},{"imageOffset":5836,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":7},{"imageOffset":2980,"symbol":"thread_start","symbolLocation":8,"imageIndex":7}]},{"id":1569680,"frames":[{"imageOffset":2960,"symbol":"start_wqthread","symbolLocation":0,"imageIndex":7}]},{"triggered":true,"id":1569723,"threadState":{"x":[{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":10000000},{"value":110},{"value":0},{"value":11180071872341370183},{"value":11180071877365880135},{"value":1000},{"value":11},{"value":11},{"value":0},{"value":0},{"value":0},{"value":328},{"value":6165901312},{"value":0},{"value":6},{"value":27155},{"value":6165901536},{"value":0},{"value":6165901536},{"value":0},{"value":10760464232},{"value":276},{"value":10786601792},{"value":10786601792}],"flavor":"ARM_THREAD_STATE64","lr":{"value":8722510252},"cpsr":{"value":1073745920},"fp":{"value":6165898080},"sp":{"value":6165898048},"esr":{"value":1442840704,"description":" Address size fault"},"pc":{"value":8451727872,"matchesCrashFrame":1},"far":{"value":4726652928}},"queue":"com.facebook.ABI47_0_0React.ExceptionsManagerQueue","frames":[{"imageOffset":29184,"symbol":"__pthread_kill","symbolLocation":8,"imageIndex":0},{"imageOffset":29100,"symbol":"pthread_kill","symbolLocation":268,"imageIndex":7},{"imageOffset":492532,"symbol":"__abort","symbolLocation":128,"imageIndex":12},{"imageOffset":134316,"symbol":"abort","symbolLocation":192,"imageIndex":12},{"imageOffset":72588,"symbol":"abort_message","symbolLocation":132,"imageIndex":13},{"imageOffset":6784,"symbol":"demangling_terminate_handler()","symbolLocation":336,"imageIndex":13},{"imageOffset":122604,"symbol":"_objc_terminate()","symbolLocation":144,"imageIndex":14},{"imageOffset":69416,"symbol":"std::__terminate(void (*)())","symbolLocation":20,"imageIndex":13},{"imageOffset":69316,"symbol":"std::terminate()","symbolLocation":56,"imageIndex":13},{"imageOffset":16368,"symbol":"_dispatch_client_callout","symbolLocation":40,"imageIndex":15},{"imageOffset":46740,"symbol":"_dispatch_lane_serial_drain","symbolLocation":672,"imageIndex":15},{"imageOffset":49632,"symbol":"_dispatch_lane_invoke","symbolLocation":384,"imageIndex":15},{"imageOffset":93712,"symbol":"_dispatch_workloop_worker_thread","symbolLocation":652,"imageIndex":15},{"imageOffset":3576,"symbol":"_pthread_wqthread","symbolLocation":288,"imageIndex":7},{"imageOffset":2968,"symbol":"start_wqthread","symbolLocation":8,"imageIndex":7}]},{"id":1570483,"frames":[{"imageOffset":2960,"symbol":"start_wqthread","symbolLocation":0,"imageIndex":7}]},{"id":1570486,"frames":[{"imageOffset":2960,"symbol":"start_wqthread","symbolLocation":0,"imageIndex":7}]},{"id":1570488,"name":"JavaScriptCore libpas scavenger","frames":[{"imageOffset":5148,"symbol":"__psynch_cvwait","symbolLocation":8,"imageIndex":0},{"imageOffset":32876,"symbol":"_pthread_cond_wait","symbolLocation":1232,"imageIndex":7},{"imageOffset":998312,"symbol":"scavenger_thread_main","symbolLocation":1164,"imageIndex":16},{"imageOffset":5836,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":7},{"imageOffset":2980,"symbol":"thread_start","symbolLocation":8,"imageIndex":7}]},{"id":1570607,"name":"JSC Heap Collector Thread","frames":[{"imageOffset":5148,"symbol":"__psynch_cvwait","symbolLocation":8,"imageIndex":0},{"imageOffset":32876,"symbol":"_pthread_cond_wait","symbolLocation":1232,"imageIndex":7},{"imageOffset":304580,"symbol":"WTF::ParkingLot::parkConditionallyImpl(void const*, WTF::ScopedLambda<bool ()> const&, WTF::ScopedLambda<void ()> const&, WTF::TimeWithDynamicClockType const&)","symbolLocation":1808,"imageIndex":16},{"imageOffset":56680,"symbol":"bool WTF::Condition::waitUntilUnchecked<WTF::Lock>(WTF::Lock&, WTF::TimeWithDynamicClockType const&)","symbolLocation":304,"imageIndex":16},{"imageOffset":57828,"symbol":"WTF::Detail::CallableWrapper<WTF::AutomaticThread::start(WTF::AbstractLocker const&)::$_0, void>::call()","symbolLocation":248,"imageIndex":16},{"imageOffset":446328,"symbol":"WTF::Thread::entryPoint(WTF::Thread::NewThreadContext*)","symbolLocation":352,"imageIndex":16},{"imageOffset":455164,"symbol":"WTF::wtfThreadEntryPoint(void*)","symbolLocation":16,"imageIndex":16},{"imageOffset":5836,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":7},{"imageOffset":2980,"symbol":"thread_start","symbolLocation":8,"imageIndex":7}]},{"id":1570608,"name":"Heap Helper Thread","frames":[{"imageOffset":5148,"symbol":"__psynch_cvwait","symbolLocation":8,"imageIndex":0},{"imageOffset":32876,"symbol":"_pthread_cond_wait","symbolLocation":1232,"imageIndex":7},{"imageOffset":304580,"symbol":"WTF::ParkingLot::parkConditionallyImpl(void const*, WTF::ScopedLambda<bool ()> const&, WTF::ScopedLambda<void ()> const&, WTF::TimeWithDynamicClockType const&)","symbolLocation":1808,"imageIndex":16},{"imageOffset":56680,"symbol":"bool WTF::Condition::waitUntilUnchecked<WTF::Lock>(WTF::Lock&, WTF::TimeWithDynamicClockType const&)","symbolLocation":304,"imageIndex":16},{"imageOffset":57828,"symbol":"WTF::Detail::CallableWrapper<WTF::AutomaticThread::start(WTF::AbstractLocker const&)::$_0, void>::call()","symbolLocation":248,"imageIndex":16},{"imageOffset":446328,"symbol":"WTF::Thread::entryPoint(WTF::Thread::NewThreadContext*)","symbolLocation":352,"imageIndex":16},{"imageOffset":455164,"symbol":"WTF::wtfThreadEntryPoint(void*)","symbolLocation":16,"imageIndex":16},{"imageOffset":5836,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":7},{"imageOffset":2980,"symbol":"thread_start","symbolLocation":8,"imageIndex":7}]},{"id":1570609,"name":"Heap Helper Thread","frames":[{"imageOffset":5148,"symbol":"__psynch_cvwait","symbolLocation":8,"imageIndex":0},{"imageOffset":32876,"symbol":"_pthread_cond_wait","symbolLocation":1232,"imageIndex":7},{"imageOffset":304580,"symbol":"WTF::ParkingLot::parkConditionallyImpl(void const*, WTF::ScopedLambda<bool ()> const&, WTF::ScopedLambda<void ()> const&, WTF::TimeWithDynamicClockType const&)","symbolLocation":1808,"imageIndex":16},{"imageOffset":56680,"symbol":"bool WTF::Condition::waitUntilUnchecked<WTF::Lock>(WTF::Lock&, WTF::TimeWithDynamicClockType const&)","symbolLocation":304,"imageIndex":16},{"imageOffset":57828,"symbol":"WTF::Detail::CallableWrapper<WTF::AutomaticThread::start(WTF::AbstractLocker const&)::$_0, void>::call()","symbolLocation":248,"imageIndex":16},{"imageOffset":446328,"symbol":"WTF::Thread::entryPoint(WTF::Thread::NewThreadContext*)","symbolLocation":352,"imageIndex":16},{"imageOffset":455164,"symbol":"WTF::wtfThreadEntryPoint(void*)","symbolLocation":16,"imageIndex":16},{"imageOffset":5836,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":7},{"imageOffset":2980,"symbol":"thread_start","symbolLocation":8,"imageIndex":7}]},{"id":1570610,"name":"Heap Helper Thread","frames":[{"imageOffset":5148,"symbol":"__psynch_cvwait","symbolLocation":8,"imageIndex":0},{"imageOffset":32876,"symbol":"_pthread_cond_wait","symbolLocation":1232,"imageIndex":7},{"imageOffset":304580,"symbol":"WTF::ParkingLot::parkConditionallyImpl(void const*, WTF::ScopedLambda<bool ()> const&, WTF::ScopedLambda<void ()> const&, WTF::TimeWithDynamicClockType const&)","symbolLocation":1808,"imageIndex":16},{"imageOffset":56680,"symbol":"bool WTF::Condition::waitUntilUnchecked<WTF::Lock>(WTF::Lock&, WTF::TimeWithDynamicClockType const&)","symbolLocation":304,"imageIndex":16},{"imageOffset":57828,"symbol":"WTF::Detail::CallableWrapper<WTF::AutomaticThread::start(WTF::AbstractLocker const&)::$_0, void>::call()","symbolLocation":248,"imageIndex":16},{"imageOffset":446328,"symbol":"WTF::Thread::entryPoint(WTF::Thread::NewThreadContext*)","symbolLocation":352,"imageIndex":16},{"imageOffset":455164,"symbol":"WTF::wtfThreadEntryPoint(void*)","symbolLocation":16,"imageIndex":16},{"imageOffset":5836,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":7},{"imageOffset":2980,"symbol":"thread_start","symbolLocation":8,"imageIndex":7}]},{"id":1570611,"name":"Heap Helper Thread","frames":[{"imageOffset":5148,"symbol":"__psynch_cvwait","symbolLocation":8,"imageIndex":0},{"imageOffset":32876,"symbol":"_pthread_cond_wait","symbolLocation":1232,"imageIndex":7},{"imageOffset":304580,"symbol":"WTF::ParkingLot::parkConditionallyImpl(void const*, WTF::ScopedLambda<bool ()> const&, WTF::ScopedLambda<void ()> const&, WTF::TimeWithDynamicClockType const&)","symbolLocation":1808,"imageIndex":16},{"imageOffset":56680,"symbol":"bool WTF::Condition::waitUntilUnchecked<WTF::Lock>(WTF::Lock&, WTF::TimeWithDynamicClockType const&)","symbolLocation":304,"imageIndex":16},{"imageOffset":57828,"symbol":"WTF::Detail::CallableWrapper<WTF::AutomaticThread::start(WTF::AbstractLocker const&)::$_0, void>::call()","symbolLocation":248,"imageIndex":16},{"imageOffset":446328,"symbol":"WTF::Thread::entryPoint(WTF::Thread::NewThreadContext*)","symbolLocation":352,"imageIndex":16},{"imageOffset":455164,"symbol":"WTF::wtfThreadEntryPoint(void*)","symbolLocation":16,"imageIndex":16},{"imageOffset":5836,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":7},{"imageOffset":2980,"symbol":"thread_start","symbolLocation":8,"imageIndex":7}]},{"id":1570612,"name":"Heap Helper Thread","frames":[{"imageOffset":5148,"symbol":"__psynch_cvwait","symbolLocation":8,"imageIndex":0},{"imageOffset":32876,"symbol":"_pthread_cond_wait","symbolLocation":1232,"imageIndex":7},{"imageOffset":304580,"symbol":"WTF::ParkingLot::parkConditionallyImpl(void const*, WTF::ScopedLambda<bool ()> const&, WTF::ScopedLambda<void ()> const&, WTF::TimeWithDynamicClockType const&)","symbolLocation":1808,"imageIndex":16},{"imageOffset":56680,"symbol":"bool WTF::Condition::waitUntilUnchecked<WTF::Lock>(WTF::Lock&, WTF::TimeWithDynamicClockType const&)","symbolLocation":304,"imageIndex":16},{"imageOffset":57828,"symbol":"WTF::Detail::CallableWrapper<WTF::AutomaticThread::start(WTF::AbstractLocker const&)::$_0, void>::call()","symbolLocation":248,"imageIndex":16},{"imageOffset":446328,"symbol":"WTF::Thread::entryPoint(WTF::Thread::NewThreadContext*)","symbolLocation":352,"imageIndex":16},{"imageOffset":455164,"symbol":"WTF::wtfThreadEntryPoint(void*)","symbolLocation":16,"imageIndex":16},{"imageOffset":5836,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":7},{"imageOffset":2980,"symbol":"thread_start","symbolLocation":8,"imageIndex":7}]},{"id":1570658,"frames":[{"imageOffset":2960,"symbol":"start_wqthread","symbolLocation":0,"imageIndex":7}]},{"id":1570659,"frames":[{"imageOffset":2960,"symbol":"start_wqthread","symbolLocation":0,"imageIndex":7}]},{"id":1570672,"frames":[{"imageOffset":2960,"symbol":"start_wqthread","symbolLocation":0,"imageIndex":7}]},{"id":1570673,"name":"com.facebook.ABI47_0_0React.JavaScript","frames":[{"imageOffset":2888,"symbol":"mach_msg2_trap","symbolLocation":8,"imageIndex":0},{"imageOffset":77832,"symbol":"mach_msg2_internal","symbolLocation":80,"imageIndex":0},{"imageOffset":78408,"symbol":"mach_msg_overwrite","symbolLocation":388,"imageIndex":0},{"imageOffset":4236,"symbol":"mach_msg","symbolLocation":24,"imageIndex":0},{"imageOffset":503296,"symbol":"__CFRunLoopServiceMachPort","symbolLocation":160,"imageIndex":1},{"imageOffset":507972,"symbol":"__CFRunLoopRun","symbolLocation":1232,"imageIndex":1},{"imageOffset":528868,"symbol":"CFRunLoopRunSpecific","symbolLocation":612,"imageIndex":1},{"imageOffset":10757084,"imageIndex":4},{"imageOffset":371944,"symbol":"__NSThread__start__","symbolLocation":716,"imageIndex":6},{"imageOffset":5836,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":7},{"imageOffset":2980,"symbol":"thread_start","symbolLocation":8,"imageIndex":7}]},{"id":1570674,"name":"hades","frames":[{"imageOffset":5148,"symbol":"__psynch_cvwait","symbolLocation":8,"imageIndex":0},{"imageOffset":32876,"symbol":"_pthread_cond_wait","symbolLocation":1232,"imageIndex":7},{"imageOffset":51916,"symbol":"std::__1::condition_variable::wait(std::__1::unique_lock<std::__1::mutex>&)","symbolLocation":28,"imageIndex":9},{"imageOffset":1174404,"imageIndex":17},{"imageOffset":1173816,"imageIndex":17},{"imageOffset":5836,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":7},{"imageOffset":2980,"symbol":"thread_start","symbolLocation":8,"imageIndex":7}]}],
  "usedImages" : [
  {
    "source" : "P",
    "arch" : "arm64e",
    "base" : 8451698688,
    "size" : 225276,
    "uuid" : "d3eb8b56-7c22-3265-a985-a436bc8caf15",
    "path" : "\/usr\/lib\/system\/libsystem_kernel.dylib",
    "name" : "libsystem_kernel.dylib"
  },
  {
    "source" : "P",
    "arch" : "arm64e",
    "base" : 7437811712,
    "size" : 4083712,
    "uuid" : "42c5c917-0447-3995-b50f-de4d132c2435",
    "path" : "\/System\/Library\/Frameworks\/CoreFoundation.framework\/CoreFoundation",
    "name" : "CoreFoundation"
  },
  {
    "source" : "P",
    "arch" : "arm64e",
    "base" : 8392671232,
    "size" : 36864,
    "uuid" : "03732ba5-1132-35b4-b09d-8dd49807d246",
    "path" : "\/System\/Library\/PrivateFrameworks\/GraphicsServices.framework\/GraphicsServices",
    "name" : "GraphicsServices"
  },
  {
    "source" : "P",
    "arch" : "arm64e",
    "base" : 7472996352,
    "size" : 24932352,
    "uuid" : "7b942fa4-cb76-3375-9972-f58c14492fb4",
    "path" : "\/System\/Library\/PrivateFrameworks\/UIKitCore.framework\/UIKitCore",
    "name" : "UIKitCore"
  },
  {
    "source" : "P",
    "arch" : "arm64",
    "base" : 4302684160,
    "size" : 59817984,
    "uuid" : "6e8d1ef7-f3bc-3573-9d57-7b8b00a56565",
    "path" : "\/private\/var\/containers\/Bundle\/Application\/3E83F450-BF86-41E7-94ED-5E5ACA87E22F\/Expo Go.app\/Expo Go",
    "name" : "Expo Go"
  },
  {
    "source" : "P",
    "arch" : "arm64e",
    "base" : 7944863744,
    "size" : 536144,
    "uuid" : "7aa46eb1-80b2-342b-9e99-be07dbd5696c",
    "path" : "\/usr\/lib\/dyld",
    "name" : "dyld"
  },
  {
    "source" : "P",
    "arch" : "arm64e",
    "base" : 7341670400,
    "size" : 9744384,
    "uuid" : "aa92cd58-561a-3414-92f4-b4120298b39a",
    "path" : "\/System\/Library\/Frameworks\/Foundation.framework\/Foundation",
    "name" : "Foundation"
  },
  {
    "source" : "P",
    "arch" : "arm64e",
    "base" : 8722481152,
    "size" : 49152,
    "uuid" : "e0674d94-1a29-36b9-a1f9-ca129f0cfc7e",
    "path" : "\/usr\/lib\/system\/libsystem_pthread.dylib",
    "name" : "libsystem_pthread.dylib"
  },
  {
    "source" : "P",
    "arch" : "arm64e",
    "base" : 7626461184,
    "size" : 4063232,
    "uuid" : "1c7c3d6c-33e3-3cf7-9fdf-ffdd45d7d3f0",
    "path" : "\/System\/Library\/Frameworks\/CoreMotion.framework\/CoreMotion",
    "name" : "CoreMotion"
  },
  {
    "source" : "P",
    "arch" : "arm64e",
    "base" : 7676485632,
    "size" : 421876,
    "uuid" : "36bf5e0c-2d40-36fa-a075-2476613f6d3f",
    "path" : "\/usr\/lib\/libc++.1.dylib",
    "name" : "libc++.1.dylib"
  },
  {
    "source" : "P",
    "arch" : "arm64",
    "base" : 4389224448,
    "size" : 2949120,
    "uuid" : "19755ab4-5123-341f-ba66-86b160f758a1",
    "path" : "\/private\/var\/containers\/Bundle\/Application\/3E83F450-BF86-41E7-94ED-5E5ACA87E22F\/Expo Go.app\/Frameworks\/hermes.framework\/hermes",
    "name" : "hermes"
  },
  {
    "source" : "P",
    "arch" : "arm64e",
    "base" : 7456141312,
    "size" : 3956736,
    "uuid" : "35605de3-3723-335a-83d9-6f35f2989935",
    "path" : "\/System\/Library\/Frameworks\/CFNetwork.framework\/CFNetwork",
    "name" : "CFNetwork"
  },
  {
    "source" : "P",
    "arch" : "arm64e",
    "base" : 7560269824,
    "size" : 524288,
    "uuid" : "82c0f938-e277-3165-a614-70151c651798",
    "path" : "\/usr\/lib\/system\/libsystem_c.dylib",
    "name" : "libsystem_c.dylib"
  },
  {
    "source" : "P",
    "arch" : "arm64e",
    "base" : 8721661952,
    "size" : 98300,
    "uuid" : "e0dbf945-9cc5-305d-b096-abc1cda9c8ca",
    "path" : "\/usr\/lib\/libc++abi.dylib",
    "name" : "libc++abi.dylib"
  },
  {
    "source" : "P",
    "arch" : "arm64e",
    "base" : 7324303360,
    "size" : 277568,
    "uuid" : "b3a78098-c0fb-3dcd-b1ac-0712762510db",
    "path" : "\/usr\/lib\/libobjc.A.dylib",
    "name" : "libobjc.A.dylib"
  },
  {
    "source" : "P",
    "arch" : "arm64e",
    "base" : 7559979008,
    "size" : 290816,
    "uuid" : "c663d847-b94f-3fb0-9254-32edbc55315e",
    "path" : "\/usr\/lib\/system\/libdispatch.dylib",
    "name" : "libdispatch.dylib"
  },
  {
    "source" : "P",
    "arch" : "arm64e",
    "base" : 7759724544,
    "size" : 21856256,
    "uuid" : "9f4a8d89-8447-3fa5-a2e3-88d3c7ba1684",
    "path" : "\/System\/Library\/Frameworks\/JavaScriptCore.framework\/JavaScriptCore",
    "name" : "JavaScriptCore"
  },
  {
    "source" : "P",
    "arch" : "arm64",
    "base" : 4386013184,
    "size" : 2965504,
    "uuid" : "679ff6d8-811c-3afc-914d-ba7cdbad1587",
    "path" : "\/private\/var\/containers\/Bundle\/Application\/3E83F450-BF86-41E7-94ED-5E5ACA87E22F\/Expo Go.app\/Frameworks\/ABI47_0_0hermes.framework\/ABI47_0_0hermes",
    "name" : "ABI47_0_0hermes"
  }
],
  "sharedCache" : {
  "base" : 7323549696,
  "size" : 2875097088,
  "uuid" : "a993cd50-dd87-32c9-b287-536a5289bccb"
},
  "vmSummary" : "ReadOnly portion of Libraries: Total=1.2G resident=0K(0%) swapped_out_or_unallocated=1.2G(100%)\nWritable regions: Total=1.0G written=0K(0%) resident=0K(0%) swapped_out=0K(0%) unallocated=1.0G(100%)\n\n                                VIRTUAL   REGION \nREGION TYPE                        SIZE    COUNT (non-coalesced) \n===========                     =======  ======= \nActivity Tracing                   256K        1 \nCG raster data                    1056K       17 \nColorSync                           64K        4 \nCoreAnimation                     1264K       63 \nFoundation                          16K        1 \nImage IO                            48K        3 \nKernel Alloc Once                   32K        1 \nMALLOC                           615.3M      226 \nMALLOC guard page                  192K       12 \nSQLite page cache                  960K       15 \nSTACK GUARD                        352K       22 \nStack                             12.1M       22 \nVM_ALLOCATE                       17.1M       18 \nWebKit Malloc                    352.1M       10 \n__AUTH                            4704K      633 \n__AUTH_CONST                      32.3M      843 \n__CTF                               756        1 \n__DATA                            23.7M      834 \n__DATA_CONST                      45.3M      846 \n__DATA_DIRTY                      3646K      689 \n__FONT_DATA                          4K        1 \n__LINKEDIT                       309.0M        5 \n__OBJC_CONST                      8614K      599 \n__OBJC_RO                         78.1M        1 \n__OBJC_RW                         2415K        1 \n__TEXT                           877.2M      864 \ndyld private memory                256K        1 \nlibnetwork                        5760K       32 \nmapped file                       47.6M       25 \nshared memory                       48K        3 \n===========                     =======  ======= \nTOTAL                              2.4G     5793 \n",
  "legacyInfo" : {
  "threadTriggered" : {
    "queue" : "com.facebook.ABI47_0_0React.ExceptionsManagerQueue"
  }
},
  "trialInfo" : {
  "rollouts" : [
    {
      "rolloutId" : "6112d17137f5d11121dcd4e2",
      "factorPackIds" : {
        "SIRI_UNDERSTANDING_ASR_HAMMER" : "635d3130c8a2104545a56db1"
      },
      "deploymentId" : 240000147
    },
    {
      "rolloutId" : "5ffde50ce2aacd000d47a95f",
      "factorPackIds" : {

      },
      "deploymentId" : 240000215
    }
  ],
  "experiments" : [
    {
      "treatmentId" : "6538b6b6-47b5-4554-af25-e82025d535d4",
      "experimentId" : "62cf21389a1c885618978432",
      "deploymentId" : 400000006
    },
    {
      "treatmentId" : "660d93c8-d14c-49f9-ba7b-fc5b714585ca",
      "experimentId" : "6148ab04480ea0575d7a537c",
      "deploymentId" : 400000025
    }
  ]
}
}

Mentioning that after updating to Expo Go 2.26.4 (on my Android device, on iOS I was already updated) the app is closing on start on Android as well (no crash pop up window is displayed but as soon as you try and load up the eas update, the app exists)

Same behavior as in iOS, I have got to figure this one out would appreciate help so much !

Sorry, Iā€™m a bit short on ideas to figure this out at the moment.

I do have one, though. Try switching the JavaScript engine from JSC to hermes (or vice versa) to see if it makes a difference. Even if you get a different type of crash it might still be more informative.

Also, does adb logcat give you any useful info? Search for ā€œfatalā€.

Another thought: If you build the app around the 4th or 5th of November, rebuild it. There was an upstream React Native issue that might be what youā€™re seeing. Not sure, but worth a try, I think.

Thanks for that! Using Logcat with my .apk build pointed out a problem which led me to believe my environment variables are not loaded properly in eas, but do load when running locally, which could explain this issue.

Looking at it now I do think my way of loading the env vars from my .env file was a bit hacky (can be seen in the app.config.js I shared in the post) and Iā€™m going to replace this with expo secrets to solve the issue.

Will update here once I verify this. Thanks again!

This could possibly be related to this bug:

Well, I guess these things always come down to minor stupid mistakes.
Seems like the loading of the environment variables was what made the difference for me.
Instead of

import "dotenv/config"; 

It should be

import * as dotenv from 'dotenv'; 
dotenv.config(); 

(But also make sure you use Constants.expoConfig and not Constants.manifest)

And obviously I would have caught it way faster if I wasnā€™t using uncaught exceptions when dealing with undefined env vars.

I had an env.ts file which verified all expected env vars are defined, and thrown an error if they didnā€™t,
I now changed it to an alert and omitted the throw, which would make a whole lot more sense.

Still canā€™t figure out why the previous way of loading dotenv worked for a long time until it suddenly didnā€™t,
But I did take a lesson here.

@wodin Thanks so much for helping, I appreciate it :heart_hands:

1 Like

On another note: if you are using a dotenv file when running eas updateā€¦ make sure to add your environment variables there because they will not be read from .env and obviously not from your EAS Secrets! This lost a day of my time.

So make sure to:

API_URL=ā€¦ eas updateā€¦

Not that I recommend it as a practice or anything,
but I wanted to have my app.config.js file in my source control but keep my env vars out of it. Loading the .env file using dotenv as seen in my post + marked solution combined does work for me when using eas update.

Im not sure how recommended it is to do, but it does work.

Btw, if anyone has a better suggestion for achieving this separation between app.config.js and the env vars Iā€™d love to hear it

Strange - .env variables didnā€™t work for me in eas update. In any case, if it worked for you, then good for you. Another way to do it would be to code them into your eas.json file and Iā€™m sure youā€™ve read this already: Environment variables in Expo - Expo Documentation of course if you have secrets, you donā€™t want to hard-code and commit them into git. Thatā€™s why I still use .env.

This topic was automatically closed 20 days after the last reply. New replies are no longer allowed.