Expo在生产版本构建中找不到“main”应用程序?

26 浏览
0 Comments

Expo在生产版本构建中找不到“main”应用程序?

我尝试了几个星期来修复这个错误,但没有成功。问题是由于这个错误,我无法发布我的应用程序。

当我构建我的Expo应用程序时,无论是iOS还是Android,Expo CLI签名过程都很顺利,没有错误,并生成最终的包文件,但是当我将spa或apk文件安装到真实设备上时,闪屏界面会连续显示4或5次(一种循环),最后显示以下错误消息:

已经尝试了以下方法但没有结果:

https://forums.expo.io/t/application-main-has-not-been-registered/14395

Application main has not been registered

https://forums.expo.io/t/application-main-has-not-been-registered/11753

我的package.json文件如下:

{

"name": "Sxunco",

"homepage": "https://www.sxunco.com",

"version": "1.0.3",

"private": true,

"main": "node_modules/expo/AppEntry.js",

"jest": {

"preset": "jest-expo",

"transformIgnorePatterns": [

"node_modules/(?!((jest-)?react-native|react-clone-referenced-element|expo(nent)?|@expo(nent)?/.*|react-navigation|redux-persist|native-base(-shoutem-theme)|native-base|react-native-router-flux))"

]

},....

我的App.js文件如下:

import React from 'react';
import Root from './src/native/index';
import configureStore from './src/store/index';
const { persistor, store } = configureStore();
export default function App() {
  return ;
}

我尝试过以下方法,但结果都一样:

  • 在app.json中添加"appKey": "main"
  • 在App.js中添加AppRegistry.registerComponent(‘main’, () => App);以及expo的registerRootComponent(App)(分开和同时尝试,都没有起作用)
  • 直接在package.json中将"main"路径更改为App.js,并使用上述方法手动注册应用程序

当我运行构建时,我还运行:

exp start --no-dev --minify

所以我等待服务器完成加载,然后运行expo build:android

请帮忙,我不知道该怎么做,因为这个问题我无法发布我的应用程序。

0
0 Comments

原因:在注册根组件时,没有使用箭头函数将App函数包裹起来。

解决方法:在注册根组件时,使用箭头函数将App函数包裹起来。

文章内容如下:

原来我的App是一个函数,我将该函数本身传递给了注册方法(react native和expo):

registerRootComponent(App())

AppRegistry.registerComponent(appName, () => App());

但是在registerRootComponent方法中,我忘记了使用箭头函数 :S

registerRootComponent(()=>App())

🙂

我认为不需要使用AppRegistry.registerComponent(appName, () => App());,因为expo会通过registerRootComponent方法自动管理。

我认为不需要使用AppRegistry.registerComponent(appName, () => App());,因为expo会通过registerRootComponent方法自动管理。

0
0 Comments

问题的出现原因是在生产构建中,Expo无法找到“main”应用程序。解决方法如下:

1)检查index.js文件,确保yourAppName已经注册,而不是main:

app.json文件(位于根目录):

{

"name": "TestSvgJoy",

"displayName": "TestSvgJoy"

}

index.js文件(位于根目录,如果没有该文件,则需要在Xcode中更新构建脚本):

import {AppRegistry} from 'react-native';

import App from './App';

import {name as appName} from './app.json';

AppRegistry.registerComponent(appName, () => App);

2)AppDelegate.m文件应包含以下两行代码:

#if DEBUG

return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil];

#else

return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];

#endif

注意:如果您正在使用Expo,并且应用程序未被分离,可以忽略此步骤。

3)确保根目录包含index.js或index.ios.js文件。

注意:如果需要自定义entryFile路径(index.js或index.ios.js),请转至Xcode,项目目标,Build Phases,Bundle ReactNative code and images,并提供额外的参数,如./src/index.ios.js

为了快速测试并获取有关错误的更多信息,请转至Xcode,Product,Scheme,Edit Scheme,Run,Build Configuration,并将其设置为Release,然后在模拟器上运行。

如果上述步骤无效,可以尝试在package.json文件中添加"main":"App.js"属性,并在App.js文件末尾添加AppRegistry.registerComponent("Sxunco", () => App())。

请确保再次检查步骤1,并确保index.js(或index.ios.js)存在于根目录中(步骤3)。

0