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}
/>
)
}
}