web-dev-qa-db-fra.com

"Violation invariante: L'application AwesomeProject n'a pas été enregistrée" lors de la création d'un périphérique iOS avec jsbundle statique

Tout d’abord, je ne sais pas comment réagir, mais j’imaginais que le déploiement sur un périphérique iOS au lieu du simulateur ne serait pas trop difficile à faire avec la documentation. Ils étaient un peu clairsemés mais je suis quelque part et maintenant je suis coincé. J'ai créé un fichier main.jsbundle, je l'ai ajouté au projet Xcode et j'ai supprimé la mise en commentaire de la ligne dans AppDelegate.m.

Lorsque je le déploie, j'obtiens cette erreur:

2015-03-26 16:13:08.538 AwesomeProject[4753:2477032] >
  RCTJSLog> "Running application "AwesomeProject" with appParams: {"rootTag":1,"initialProps":{}}. __DEV__ === true, development-level warning are ON, performance optimizations are OFF"
2015-03-26 16:13:08.547 AwesomeProject[4753:2477032] >
  RCTJSLog> "Error: 
 stack: 
  runApplication                  main.jsbundle:33769
  jsCall                          main.jsbundle:7157
  _callFunction                   main.jsbundle:7404
  applyWithGuard                  main.jsbundle:877
  guardReturn                     main.jsbundle:7206
  callFunctionReturnFlushedQueue  main.jsbundle:7413
 URL: file:///private/var/mobile/Containers/Bundle/Application/DBC0DAF4-B568-4CF5-B156-9EFEE4E7FF4A/AwesomeProject.app/main.jsbundle
 line: 1536
 message: Invariant Violation: Application AwesomeProject has not been registered."
2015-03-26 16:13:08.723 AwesomeProject[4753:2477032] >
  RCTJSLog> "#CLOWNTOWN (error while displaying error): Network request failed"
57
cmp

Je suis à peu près sûr que le correctif de @ krazyeom n'a rien à voir avec cette erreur. Dans mon cas, j'ai résolu le problème en quittant le terminal qui fonctionnait depuis une application de test précédente que j'avais exécutée. Il semble que le terminal était confus et était toujours lié à un processus dont le projet n'était plus chargé dans XCode. Essayez ce qui suit:

  1. Fermez le terminal créé par React Native.
  2. Fermez XCode complètement (peut ne pas être nécessaire).
  3. Rouvrez tout et recommencez.
120
xanadont

Votre problème ne devrait pas avoir de rapport avec la console, si vous avez correctement intégré votre javascript dans l'application ios, il ne tentera pas de parler au serveur dev, il obtiendra simplement le javascript de l'ensemble.

D'après le message d'erreur, je suppose que vous avez peut-être renommé votre composant principal. Assurez-vous que le 'AppName' Que vous passez dans le

AppRegistry.registerComponent('AppName' /* <- */, ... )

correspond avec le @"AppName" sur votre AppDelegate.m sur l'appel

[[RCTRootView alloc] initWithBundleUrl:...
                            moduleName:@"AppName" // <-
                         launchOptions:...
49
tadeuzagallo

C'est parce que le serveur react-native surveille toujours l'ancien. Vous devez d'abord arrêter le serveur.

Vous pouvez simplement tuer le processus.

Dans le terminal

ps aux | grep react

Tuer ou tuer le processus et ensuite

npm start
26
Nickwanhere

AppRegistry définit le point d'entrée de l'application et fournit le composant racine.

Votre premier paramètre ne correspond pas à votre nom de projet.

AppRegistry.registerComponent('AwesomeProject', () => YourMainComponent);

Le premier paramètre de registerComponent doit être le nom de votre projet, le deuxième paramètre est une fonction anonyme qui renvoie votre composant réactif racine.

Si le premier paramètre ne correspond pas au nom du projet xcode, vous obtenez l'erreur que votre application n'a pas été enregistrée.

Si vous n'avez pas AppRegistry dans la portée, vous pouvez l'appeler ainsi: React.AppRegistry.registerComponent ou vous pouvez l’assigner à la AppRegistry var

var {
  AppRegistry
} = React;
19
alucic
AppRegistry.registerComponent('abc',() => ***); 

le 'abc' doit être identique à la moduleName:@'abc' dans le nom du fichier AppDelegate.m

10
wickey liang

J'ai eu le même problème. Je l'ai résolu en donnant le même nom à la fois moduleName d'AppDelegate et AppRegistry.registerComponent

Si vous exécutez l'application avec $ react-native run-ios vous devrez renommer le champ moduleName dans ./ios/[project name]/AppDelegate.m pour correspondre au nouveau nom du projet. Actualisez le simulateur téléphonique et le nouveau code devrait s'afficher.

8
Dawan

Avez-vous changé le nom de l'application que vous enregistrez? J'ai lancé l'application avec le nom 'tricky', puis j'ai changé le nom plus tard dans cette ligne:

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

et j'ai commencé à avoir l'erreur invariante.

5
Marques Woodson

Référence une personne sans nom.

ça marche pour moi.


J'ai eu presque le même problème que vous avez actuellement il y a quelques jours. Pour moi, c'était un vrai appareil.

Parmi toutes mes recherches, la solution qui a fonctionné pour moi est la suivante:

  1. Lorsque vous lancez votre application en tapant réact-native run-Android, l'erreur apparaît.
  2. Alors, accédez à votre répertoire contenant "adb.exe" (pour moi c'était
    C:\Users\username\AppData\Local\Android\Sdk\platform-tools\)
  3. ouvrez un terminal d'ici. Et tapez adb reverse tcp: 8081 tcp: 8081
  4. Ensuite, en rechargeant l'application sur le téléphone, cela devrait fonctionner.
1
Jerry Chou

Je ne suis pas fan de tout fermer alors je continue à creuser davantage.

Tout ce que je devais faire était dans ma fenêtre de terminal, j'ai lancé cette commande:

../lala/node_modules/react-native/packager/launchPackager.command ; exit; 

Mon nom de projet était "lala", alors trouvez qu'il y a aussi node_modules dans votre projet.

remplacez lala par le nom de votre projet, cela devrait fonctionner.

S'il y a une erreur, le port est déjà utilisé:

 ERROR  Packager can't listen on port 8081

Ensuite, vous avez deux choix:

  • Tuer le programme déjà en cours.
  • Ou changez le port en allant dans: ../lala/node_modules/react-native/packager/packager.js puis recherchez votre numéro de port, exemple 8081, et remplacez-le par le numéro de port non utilisé.
 var options = parseCommandLine([{
          command: 'port',
          default: 8082,
        }, {

Enregistrez ce fichier, puis exécutez à nouveau la commande ci-dessus.

De cette façon, je peux exécuter plusieurs réactions (ou réactions).

1
codebased

Même erreur, tout redémarrer, y compris le xcode et le terminal, a fonctionné pour moi.

1
Simar

J'ai le même message dans la console.

message: violation invariante: l'application AwesomeProject n'a pas été enregistrée. "

Je viens d'ajouter REACT_EDITOR=atom sur le fichier ~/.bashrc.

0
krazyeom