52 votes

Une application React native reste bloquée sur l'écran d'accueil de l'appareil mais fonctionne dans le simulateur.

Mon application React Native fonctionne dans le simulateur XCode sans problème, mais lorsque je l'exécute dans un appareil physique, mon iPhone, il y a un problème. L'application se lance et reste bloquée sur l'écran d'accueil de React Native, puis après 10-15 secondes, l'application se bloque/se ferme. Quelle est la cause de ce problème et comment puis-je l'éviter ?

0 votes

J'en ai un similaire. Mon application fonctionne à la fois sur le simulateur et sur les appareils iphone 5S et plus. Cependant, après la connexion, l'application se ferme d'elle-même sur les iphone 5 et 4S.

0 votes

Je rencontre exactement le même problème, mon application fonctionne parfaitement dans le simulateur iOS mais ne fonctionne pas sur mon appareil après le premier chargement.

62voto

Guannan He Points 356

Il semble que j'ai trouvé le problème. D'après https://facebook.github.io/react-native/docs/running-on-device Lorsque vous construisez et exécutez l'application sur votre appareil, votre application chargera les fichiers js du packager sur votre ordinateur, ce qui vous permettra de recharger votre application en direct. Cela signifie que votre appareil doit être connecté à votre ordinateur ou qu'il doit se trouver dans le même réseau wifi que votre ordinateur. Si votre appareil ne peut pas accéder au packager, il restera bloqué sur l'écran d'accueil et quittera.

Pour une exécution fiable sur votre appareil, modifiez le schéma de construction et construisez la version finale.

11 votes

Nous avons constaté la même chose, l'application s'arrêtait (ou affichait "no bundle URL present" après un certain temps) lorsque le téléphone n'était pas en wifi. Corrigé par Product -> Scheme -> Edit Scheme, et en changeant l'étape Run pour Release.

0 votes

C'était ça pour moi aussi. Merci.

1 votes

Je suis sur le même réseau, mais je n'ai pas eu de chance, même en passant en mode "release".

11voto

Anjum.... Points 1730

Pour moi, lorsque j'ai construit, cela fonctionnait bien dans le simulateur, mais dans l'appareil réel, seul l'écran d'accueil apparaissait et rien d'autre.

C'est parce que ma configuration de construction était en mode débogage, ce qui est le mode par défaut, je suppose. J'ai dû changer la configuration de la version/construction de débogage à version et tout a fonctionné comme prévu.

Upvotez-le si cela vous aide :)

enter image description here

2 votes

Cela désactive le menu débogage/développement.

0 votes

Cher @Anjum. Dans la section Archive, j'utilise Déboguer au lieu de Communiqué de presse . Je veux créer une archive et la pousser vers TestFlight. Je rencontre le problème suivant. Dois-je utiliser la version ?

1 votes

Cela a aidé. Merci.

6voto

Freewalker Points 177

Il devrait être parfaitement possible d'exécuter l'application en débogage, sur l'appareil, sans que le packager soit attaché ! Vous devez utiliser react-native bundle pour créer un paquet hors ligne, et l'ajouter à votre projet Xcode. Votre application devrait alors se rabattre sur ce bundle lorsque le packager n'est pas disponible.

Cette information se trouvait auparavant dans la documentation sur le déploiement vers le périphérique FB, je ne sais pas pourquoi elle n'y figure plus.

Exemple d'appel (notre index.ios.js est placé dans ./dist par TypeScript) :

react-native bundle --dev true --assets-dest ./ios --entry-file ./dist/index.ios.js --platform ios --bundle-output ios/main.jsbundle

De plus, il est apparemment nécessaire de dire à votre application de s'exécuter directement à partir du bundle plutôt que d'essayer d'accéder au serveur de développement, ce qui semble causer le délai d'attente (nous avons eu le même problème que le PO).

Commentez cette ligne :

jsCodeLocation = // whatever

Et ajoutez cette ligne :

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

0 votes

Je crée toujours le bundle, mais sans changer le jsCodeLocation. Je n'obtiens pas de délai d'attente mais j'obtiens toujours ce problème

3voto

Guy Points 565

J'ai essayé de déconnecter mon iPhone d'Internet, le problème a disparu dans les lancements ultérieurs.

Donc quelque chose essaie de faire des trucs de réseau et cause le retard. C'est une solution rapide, mais ça ira jusqu'à ce que nous trouvions le coupable.

1voto

TheJizel Points 953

Vous devez probablement signer l'application.

Sous le navigateur du projet, cliquez sur votre application. Sélectionnez ensuite votre cible dans la liste des projets et des cibles. Dans l'onglet "Général", trouvez la section "Signature". Vous devez spécifier une équipe ici.

Voir ce lien pour plus d'informations : https://developer.apple.com/library/content/documentation/IDEs/Conceptual/AppDistributionGuide/LaunchingYourApponDevices/LaunchingYourApponDevices.html#//apple_ref/doc/uid/TP40012582-CH27-SW4

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X