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:

Adán
fuente
¿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.

Slowyn
fuente
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 
Afshin Mehrabani
fuente
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
}
Daniyar Saumbayev
fuente
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"

usuario8637708
fuente
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);
Rafael Ferraro
fuente
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"
}
mperk
fuente
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.

xemasiv
fuente
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

Arshid KV
fuente
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ó.

la5zl0
fuente
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

Venkat
fuente
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.

Khemraj
fuente
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);
linSir
fuente
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",
  ...
}
Alex Sarnowski
fuente
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);
vipul srivastav
fuente
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

G. Thabit
fuente
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í.

Utsav Chawla
fuente
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.

Gabriel P.
fuente
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.

Shamsul Arefin Sajib
fuente
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);
Carmine Tambascia
fuente
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"
},
Babajide M. Moibi
fuente
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);
agerxs
fuente