React Native suddenly stuck on Splash Screen - iOS and Android

Viewed 839

Suddenly my React Native production app doesn't work anymore, it gets stuck on the Splash screen. The same happen for both iOS and Android systems. The curious thing is that I haven't made any update. It may have something to do with iOS/Android updates?

I get the same behavior in my expo app if I run "expo start --no-dev --minify". Otherwise, i works fine during testing in development mode.

package.json file

{
  "name": "foodsaler",
  "version": "0.1.0",
  "private": true,
  "devDependencies": {
    "@babel/plugin-proposal-class-properties": "^7.16.7",
    "babel-plugin-module-resolver": "^4.1.0",
    "jest-expo": "^43.0.0",
    "react-test-renderer": "16.5.1"
  },
  "main": "./node_modules/expo/AppEntry.js",
  "scripts": {
    "start": "expo start",
    "eject": "expo eject",
    "android": "expo android",
    "ios": "expo ios",
    "test": "jest"
  },
  "jest": {
    "preset": "jest-expo"
  },
  "dependencies": {
    "@babel/plugin-transform-react-jsx": "^7.16.7",
    "@babel/preset-env": "^7.16.11",
    "@babel/preset-react": "^7.16.7",
    "@react-native-firebase/app": "^14.2.4",
    "@react-native-firebase/firestore": "^14.2.4",
    "@react-native-picker/picker": "^2.3.0",
    "date-fns": "^1.29.0",
    "exp": "^57.2.1",
    "expo": "^43.0.5",
    "expo-app-loading": "~1.2.1",
    "expo-camera": "^12.1.2",
    "expo-constants": "~12.1.3",
    "expo-file-system": "~13.0.3",
    "expo-image-manipulator": "~10.1.2",
    "expo-image-picker": "~11.0.3",
    "expo-linear-gradient": "~10.0.3",
    "expo-mail-composer": "~11.0.3",
    "expo-permissions": "~13.0.3",
    "expo-secure-store": "~11.0.3",
    "expo-sqlite": "~10.0.3",
    "firebase": "^9.6.1",
    "formik": "^2.2.9",
    "moment": "^2.24.0",
    "normalize-strings": "^1.1.0",
    "react": "17.0.1",
    "react-native": "0.64.3",
    "react-native-country-picker-modal": "^2.0.0",
    "react-native-dotenv": "^3.3.1",
    "react-native-elements": "^0.19.1",
    "react-native-i18n": "^2.0.15",
    "react-native-orientation": "^3.1.3",
    "react-native-safe-area-context": "3.3.2",
    "react-native-screens": "~3.8.0",
    "react-native-settings-list": "^1.8.0",
    "react-native-svg": "12.1.1",
    "react-native-svg-charts": "^5.3.0",
    "react-native-swipeout": "^2.3.6",
    "react-native-vector-icons": "^9.1.0",
    "react-navigation": "^2.14.0",
    "tcomb-form-native": "^0.6.16",
    "yup": "^0.32.11"
  }
}

App.js file

import React from 'react'
import './src/api';
import { Router } from './src/Router'
import { AppLoader } from './src/components/AppLoader'
import { LogBox } from 'react-native';

export default class App extends React.Component 
{
    constructor(props) 
    {
        super(props)
        this.state = { localeDefined: false }
    }
    
    render() 
    
    {
        LogBox.ignoreAllLogs();//Ignore all log notifications
        LogBox.ignoreLogs(['Setting a timer for a long period of time']) 

        return this.state.localeDefined ? 
            <Router/>
            :
            <AppLoader onFinish={() => { this.setState({localeDefined: true}) }}/>
    }
}

AppLoader component

import React from 'react'
import AppLoading  from 'expo-app-loading'
import { DbService } from '../services/DbService'
import { LocalizationService } from '../services/LocalizationService'

export class AppLoader extends React.Component 
{
    async loadLanguage()
    {
        global.loc = new LocalizationService('English')

        const db = new DbService()
        const languageData = await db.getLanguage()

        if(languageData.length > 0)
        {
            global.loc.setLocale(languageData[0].Language)
        }
    }

    render()
    {
        return (
            <AppLoading
                startAsync={ this.loadLanguage } 
                onFinish={ this.props.onFinish }
                onError={console.warn}
            />
        )
    }
}
0 Answers
Related