My expo app was working fine on SDK50.
The expo GO IOS app updated automatically to SDK51 so i followed the update documentation for updating my expo app. This seemed to have worked fine and when running expo-doctor i’m getting no issues found. But when i now run my app im getting: ERROR Error: Not a valid base64 encoded string length
`
This error is located at:
in ClerkProvider (created by RootLayoutNav)
in RootLayoutNav
in Try
in Unknown
in Unknown (created by Route())
in Suspense (created by Route())
in Route (created by Route())
in Route() (created by ContextNavigator)
in RNCSafeAreaProvider (created by SafeAreaProvider)
in SafeAreaProvider (created by wrapper)
in wrapper (created by ContextNavigator)
in EnsureSingleNavigator
in BaseNavigationContainer
in ThemeProvider
in NavigationContainerInner (created by ContextNavigator)
in ContextNavigator (created by ExpoRoot)
in ExpoRoot (created by App)
in App (created by ErrorOverlay)
in ErrorToastContainer (created by ErrorOverlay)
in ErrorOverlay (created by withDevTools(ErrorOverlay))
in withDevTools(ErrorOverlay)
in RCTView (created by View)
in View (created by AppContainer)
in RCTView (created by View)
in View (created by AppContainer)
in AppContainer
in main(RootComponent), js engine: hermes
Error: ENOENT: no such file or directory, open ‘C:UsersNickOneDriveDesktopRANassistantInternalBytecode.js’
at Object.readFileSync (node:fs:448:20)
at getCodeFrame (C:UsersNickOneDriveDesktopRANassistantnode_modulesmetrosrcServer.js:868:18)
at Server._symbolicate (C:UsersNickOneDriveDesktopRANassistantnode_modulesmetrosrcServer.js:945:22)
at processTicksAndRejections (node:internal/process/task_queues:95:5)
at runNextTicks (node:internal/process/task_queues:64:3)
at processImmediate (node:internal/timers:449:9)
at Server._processRequest (C:UsersNickOneDriveDesktopRANassistantnode_modulesmetrosrcServer.js:394:7) {
errno: -4058,
code: ‘ENOENT’,
syscall: ‘open’,
path: ‘C:UsersNickOneDriveDesktopRANassistantInternalBytecode.js’
}
Error: ENOENT: no such file or directory, open ‘C:UsersNickOneDriveDesktopRANassistantInternalBytecode.js’
at Object.readFileSync (node:fs:448:20)
at getCodeFrame (C:UsersNickOneDriveDesktopRANassistantnode_modulesmetrosrcServer.js:868:18)
at Server._symbolicate (C:UsersNickOneDriveDesktopRANassistantnode_modulesmetrosrcServer.js:945:22)
at processTicksAndRejections (node:internal/process/task_queues:95:5)
at runNextTicks (node:internal/process/task_queues:64:3)
at processImmediate (node:internal/timers:449:9)
at Server._processRequest (C:UsersNickOneDriveDesktopRANassistantnode_modulesmetrosrcServer.js:394:7) {
errno: -4058,
code: ‘ENOENT’,
syscall: ‘open’,
path: ‘C:UsersNickOneDriveDesktopRANassistantInternalBytecode.js’
`
my index.tsx:
` import { Redirect } from 'expo-router';
import 'react-native-reanimated';
const StartPage = () => {
return <Redirect href="/(public)/main" />;
};
my_layout.tsx
// _layout (app entry)
import React, { useEffect } from 'react';
import { useFonts } from 'expo-font';
import { Slot, useRouter, useSegments } from 'expo-router';
import { SafeAreaView } from 'react-native-safe-area-context';
import { ClerkProvider, useAuth } from "@clerk/clerk-expo";
import * as SecureStore from 'expo-secure-store';
import initializeFirebase from '@/FirebaseInit'; // Import Firebase initializer
import 'react-native-reanimated';
// Define your font paths here
const fontPaths = {
LatoThin: require('../assets/fonts/Lato-Thin.ttf'),
LatoLight: require('../assets/fonts/Lato-Light.ttf'),
LatoRegular: require('../assets/fonts/Lato-Regular.ttf'),
LatoBold: require('../assets/fonts/Lato-Bold.ttf'),
LatoBlack: require('../assets/fonts/Lato-Black.ttf'),
};
const ClerkApiKey = process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY;
const tokenCache = {
async getToken(key: string) {
try {
return await SecureStore.getItemAsync(key); // Added await keyword
} catch (err) {
return null;
}
},
async saveToken(key: string, value: string) {
try {
return await SecureStore.setItemAsync(key, value); // Added await keyword
} catch (err){
return;
}
},
};
export {
// Catch any errors thrown by the Layout component.
ErrorBoundary,
} from 'expo-router';
// Initialize Firebase
initializeFirebase();
const InitialLayout = () => {
const { isLoaded, isSignedIn } = useAuth();
const segments = useSegments();
const router = useRouter();
useEffect(() => {
if(!isLoaded) return;
const inTabsGroup = segments[0] === '(auth)';
if (isSignedIn && !inTabsGroup) {
router.replace('/home');
} else if (!isSignedIn) {
router.replace('/main');
}
console.log('isSignedIn:', isSignedIn);
console.log('segments:', segments);
console.log('router:', router);
}, [isSignedIn, isLoaded, router, segments]); // Added dependencies to useEffect
console.log('segments:', segments);
return <Slot />;
};
const RootLayoutNav = () => {
// Load fonts using useFonts hook
const [loaded] = useFonts(fontPaths);
// If fonts are not loaded, return null or a loading indicator
if (!loaded) {
return null;
}
return (
<ClerkProvider publishableKey={ClerkApiKey!} tokenCache={tokenCache}>
<SafeAreaView style={{ flex:1,backgroundColor:"#000" }}>
<InitialLayout />
</SafeAreaView>
</ClerkProvider>
);
}
export default RootLayoutNav;
I have looked at the breaking changes on the Expo website. There was one issue that i thought might be related: https://github.com/expo/expo/issues/28618 but this did not fix my issue.
I have no idea how to start debugging this.
Any help is appecriated