React-Native: error de aplicación no registrada


166

Actualmente estoy revisando los tutoriales React-Native. Comencé con el tutorial de inicio, donde hice un nuevo proyecto nativo de reacción y logré ejecutar el proyecto con éxito en mi dispositivo.

Luego comencé el tutorial de Props , copié el fragmento de código e intenté ejecutar el proyecto nuevamente y tuve el siguiente mensaje de error en mi pantalla:


¿Puedes compartir tu código?
Jagadish Upadhyay

Respuestas:


435

Supongo que es un error causado por no coincidir el nombre del proyecto y su componente registrado.

Has iniciado un proyecto con un nombre, es decir

react-native init AwesomeApp

Pero en su archivo index.ios.js registra otro componente

AppRegistry.registerComponent('Bananas', () => Bananas);

Cuando debe ser

AppRegistry.registerComponent('AwesomeApp', () => Bananas);

Intenta arreglarlo.


77
"Bananas" de alguna manera funciona para Android. Pero no lo hace en iOS.
Sumit Kushwaha

92
Para alguien que enfrenta el mismo problema incluso si el nombre del componente coincide -> Asegúrese de no tener ningún otro proceso react-native / node ejecutándose en otro terminal.
Nilesh

1
desde mi experiencia, un reinicio del sistema clasificó las cosas ... por extraño que parezca.
Kayote

El tutorial se llama actualmente "AwesomeProject"
AdamG

2
y para las personas que desean Bananas en lugar de AwesomeApp pueden cambiar la moduleName:@"AwesemeApp"línea en su archivo AppDelegate.m
Aequitas

42

La mayoría de las veces el problema es que tiene otro react-native startservidor (es decir, React Native Packager) ejecutándose en otro terminal u otra pestaña de TMUX (si está utilizando TMUX).

Debe encontrar ese proceso y cerrarlo, por lo que después de ejecutarlo, react-native run-iospor ejemplo, establecerá un nuevo servidor de empaquetador que se registró para esa aplicación específica.

Simplemente encuentre ese proceso usando:

ps aux | grep react-native

encuentre la identificación del proceso (PID) y elimine el proceso del empaquetador usando el killcomando (por ejemplo kill -9 [PID]). Debería encontrar la launchPackager.commandaplicación en macOS, no estoy seguro acerca de los otros sistemas operativos.

Luego intente ejecutar el run-ios(o Android) nuevamente. Debería poder ver la nueva ruta después de ejecutar el nuevo servidor de empaquetado, por ejemplo:

Looking for JS files in
   /Users/afshin/Desktop/awesome-app 

Funciona, incluso si corro react-native start --port <otherport>, ¿debería correr react-native run-<platform>de otra manera ?, gracias
Sebastian Palma

@ SebastiánPalma, que yo sepa, el startcomando ejecuta el servidor del empaquetador, por lo que si ya compiló su aplicación, no es necesario que lo haga run-<platform>.
Afshin Mehrabani

31

Modificar MainActivityasí,

@Override
protected String getMainComponentName() {
    return "Bananas"; // here
}

2
¡EXACTAMENTE! ese era exactamente mi problema, aunque en lugar de modificar esto, modifiqué el AppRegistry.registerComponent para eso
Sijav

¿Qué hay de Ios?
Dinesh R Rajput

+1. Me hace preguntarme por qué la CLI pregunta si quiero darle un nombre diferente a la versión de Android / iOS cuando solo llevará a que mi proyecto no funcione y tenga que cambiarlo.
Toque

Había modificado app.js
rodar el

28

Mi solución es cambiar el nombre del módulo en "AppDelegate.m"

de moduleName:@"AwesomeProject"

a moduleName:@"YourNewProjectName"


Esto solucionó mi problema. ¡Gracias!
Cory McAboy

¡Me funcionó ejecutando el simulador de iOS de React Native!
Emilio

Sí, eso me ayuda. Una sugerencia adicional: si usa XCode, asegúrese de haber configurado el nombre correcto para su nombre de aplicación (Proyecto -> Destino -> Nombre de visualización)
suther

17

Antes que nada debes iniciar tu aplicación:

react-native start

Luego, debe establecer el nombre de su aplicación como el primer argumento de registerComponent.

Funciona bien.

AppRegistry.registerComponent('YourProjectName', () => YourComponentName);

8

Verifique su archivo app.json en el proyecto. si no tiene la línea appKey, entonces debe agregarla

{
  "expo": {
    "sdkVersion": "27.0.0",
    "appKey": "mydojo"
  },
  "name": "mydojo",
  "displayName": "mydojo"
}

3
Me he estado entrometiendo con este error durante las últimas 24 horas. Esto solucionó mi problema. ¡Gracias!
Balaji Kartheeswaran

7

En mi caso, hay una línea en MainActivity.java que se perdió cuando usé react-native-renamecli (de NPM)

protected String getMainComponentName() {
    return "AwesomeApp";
}

Obviamente, debes cambiarle el nombre por el de tu aplicación.


4

Creo que el servidor de nodo se ejecuta desde otra carpeta. Así que mátalo y ejecútalo en la carpeta actual.

Encuentra el servidor de nodo en ejecución: -

lsof -i :8081

Eliminar el servidor de nodo en ejecución: -

kill -9 <PID>

P.ej:-

kill -9 1653

Inicie el servidor de nodo desde la carpeta nativa actual de reacción: -

react-native run-android


3

Tuve el mismo problema y para mí la causa raíz fue que ejecuté (react-native start) el empaquetador desde otra carpeta react-native (AwesomeApp), mientras creaba otro proyecto en otra carpeta.

La ejecución del empaquetador desde el directorio de la nueva aplicación lo resolvió.


1

Esto también puede deberse a que el nombre del componente raíz comienza con minúsculas.

Grabarlo o más bien crear el proyecto una vez más con un nombre PascalCase.

p. ej. encender el nuevo HelloWord


1

Todas las respuestas dadas no funcionaron para mí.

Tuve otro proceso de nodo ejecutándose en otra terminal, cerré esa terminal de comando y todo funcionó como se esperaba.


1

necesita registrarlo en index.android.js / index.ios.js

Me gusta esto:

'use strict';

import {
    AppRegistry
} from 'react-native';

import app from "./app";

AppRegistry.registerComponent('test', () => app);

1

Resolví esto cambiando lo siguiente en el archivo app.json. Parece que la letra mayúscula arrojaba este error.

De:

{
  "name": "Nameofmyapp",
  ...
}

A:

{
  "name": "nameofmyapp",
  ...
}

0

En lugar de cambiar el nombre AppRegistry,

Ejecute react-native init Bananas, esto creará un código repetitivo para el proyecto Bananas y AppRegistry.registerComponentapuntará automáticamente a las bananas

AppRegistry.registerComponent('Bananas', () => Bananas);

0

Ninguna de las soluciones funcionó para mí. Tuve que matar el siguiente proceso y volví a ejecutar react-native run-android y funcionó.

nodo ./local-cli/cli.js inicio


1
¿Qué siguientes procesos?
bigmadwolf

@bigmadwolf node ./local-cli/cli.js start
G. Thabit

0

Yo tuve el mismo problema. Estaba usando Windows para crear una aplicación nativa de reacción para Android y estaba teniendo el mismo error. Esto es lo que funcionó.

  • Navega a la carpeta ANDROID en tu raíz.
  • Cree un archivo con el nombre: local.properties
  • Ábrelo en el editor y escribe:

sdk.dir = C: \ Users \ USERNAME \ AppData \ Local \ Android \ sdk

  • Reemplace USERNAME con el nombre de su máquina.

Guarde y ejecute la aplicación normalmente. Eso funcionó para mí.


0

El problema también aparecerá cuando, en index.js, haya nombrado la aplicación de manera diferente al nombre que le dio para el paquete android / ios ; probablemente esto sucedió cuando expulsó la aplicación. Así que asegúrese de que al llamar AppRegistry.registerComponent('someappname', () => App), someappname también se usa para los paquetes nativos o viceversa.


0

Descubrí dónde estaba el problema en mi caso (sistema operativo Windows 10), pero también podría ayudar en Linux (puede intentarlo).

En windows power shell, cuando desee ejecutar una aplicación (la primera vez después del arranque de la PC) ejecutando el siguiente comando,

react-native run-android

Comienza un node process/JS serveren otro console panel, y no encuentra este error. Sin embargo, cuando se desea ejecutar otra aplicación , usted debe necesitar cerrar que ya se está ejecutando JS server console panel . Y luego ejecute el mismo comando para otra aplicación desde power shell, ese comando iniciará automáticamente otro nuevo servidor JS para esta aplicación, y no encontrará este error.

No necesita cerrar y volver power shell a abrir para ejecutar otra aplicación, debe cerrar node console para ejecutar otra aplicación.


0

Después de leer todo lo anterior, descubrí que podría haber otra razón para esto.

En mi caso:

reaccionar-nativo-cli: 2.0.1

reaccionar nativo: 0.60.4

y siguiente estructura:

ingrese la descripción de la imagen aquí

Primero hay que tener en cuenta que index.android no se ha actualizado en Android Studio cuando la construcción se ejecuta por Metro Builder (react-native run-android), por lo que debe hacerse manualmente. También en el estudio de Android no "lee" el

app.json (creado de forma predeterminada junto con index.js, que cambió el nombre de index.android.js):

 {
    "name": "authApp",
    "displayName": "authApp"
 }

y esto como

(en mi caso)

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

Porque el estudio de Android no sabe a qué se refiere authApp. Arreglo por el momento refiriéndome al nombre de la aplicación con su nombre de cadena y no usando esa importación desde app.json:

AppRegistry.registerComponent('authApp', () => MyApp);

0

Esto me resolvió

AppRegistry.registerComponent('main', () => App);

Entonces mi index.jsarchivo

import { AppRegistry } from 'react-native';
import App from './App';
AppRegistry.registerComponent('main', () => App);

Y mi package.jsonarchivo:

"dependencies": {
    "react": "^16.13.1",
    "react-dom": "~16.9.0",
    "react-native": "~0.61.5"
},

0

Esta solución funcionó para mí después de 2 días de depuración. Cambia esto :

AppRegistry.registerComponent('AppName', () => App);

a

AppRegistry.registerComponent('main', () => App);
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.