web-dev-qa-db-fra.com

Réagir à l'application native bloquée sur l'écran de démarrage sur l'appareil mais fonctionne dans le simulateur

Mon application native React fonctionne dans le simulateur XCode sans problème, mais lorsque je me lance sur un périphérique physique, mon iPhone, il y a un problème. L'application démarre et reste bloquée sur l'écran de démarrage de React Native. Après 10 à 15 secondes, l'application se bloque/se ferme. Quelle en est la cause et comment puis-je l'éviter? 

25
Thomas Charlesworth

Il semble que j'ai trouvé le problème. Selon http://facebook.github.io/react-native/releases/0.45/docs/running-on-device.html#running-your-app-on-ios-devices , lorsque vous créez Si vous exécutez l'application sur votre appareil, votre application chargera des fichiers js à partir du conditionneur de votre ordinateur, afin que vous puissiez recharger en direct votre application. Cela signifie que votre appareil doit être connecté à votre ordinateur ou sur le même réseau wifi que votre ordinateur. Si votre appareil ne peut pas accéder au conditionneur, il reste bloqué sur l'écran de démarrage et se ferme.

Pour fonctionner de manière fiable sur votre appareil, éditez le schéma de construction et la version finale de la version. 

32
Guannan He

Il devrait être parfaitement possible de lancer l'application en débogage, sur l'appareil, sans que le conditionneur ne soit connecté! Vous devez utiliser react-native bundle pour créer un ensemble hors connexion et l'ajouter à votre projet Xcode. Ensuite, votre application devrait revenir à cette offre lorsque le conditionneur n'est pas disponible. 

Auparavant, il se trouvait dans la documentation Déploiement sur le périphérique, vous ne saviez pas pourquoi il n'était plus là. 

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

En outre, il est apparemment nécessaire d'indiquer à votre application de s'exécuter directement à partir du lot plutôt que d'essayer d'accéder au serveur de développement, ce qui semble entraîner l'expiration du délai (nous avons eu le même problème que OP).

Commentez cette ligne:

jsCodeLocation = // whatever

Et ajoutez cette ligne:

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

Pour moi, lorsque je construisais, cela fonctionnait bien dans le simulateur, mais dans l'appareil réel, seul l'écran de démarrage venait et rien d'autre.

C'était parce que ma configuration de construction était en mode débogage, ce qui est le mode par défaut, je suppose, je devais changer la configuration release/build de debug à release et tout fonctionne comme prévu.

 enter image description here

2
Anjum....

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

Il y a donc quelque chose qui tente de manipuler le réseau et qui cause le retard ... C'est une solution rapide, mais nous le ferons jusqu'à ce que nous trouvions le coupable spécifique.

2
Guy

Vous devez probablement signer l'application. 

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

Consultez ce lien pour plus d'informations: https://developer.Apple.com/library/content/documentation/IDEs/Conceptual/AppDistributionGuide/LaunchingYourApponDevices/LunchingYourApponDevices.html#//Apple_ref/doc/uid/TP40012582-CH27

1
TheJizel

Pour moi, j'utilise le framework firebase sur mon projet. J'ai oublié l'ajout GoogleService-Info.plist fichier dans mon projet xcode. Après l'ajout, le problème est parti.

1
Mehmet

J'avais le même problème.
Ce que j’ai fait dans Xcode, allez dans Produits -> Schéma -> Éditer le schéma -> Sélectionnez l’onglet Exécuter -> Modifiez la configuration de la construction en Libération (par défaut, il s’agissait du mode débogage) et exécutez l’application dans le dossier dispositif. 

C'était beaucoup plus rapide et le faire fonctionner comme une application native. 

0
Udaya Sri

J'ai fait face à ce problème où je réagissais-écran-écran d'accueil. Après l'avoir enlevé, ça marche

0
Sujit

Cette question pourrait soulever en raison des possibilités suivantes:

  1. Votre schéma d'exécution étant défini sur release au lieu de debug, attendez-vous toujours à charger main.jsbundle au lieu de s'exécuter à partir du serveur de débogage. Modifiez-le par Produit-> Schéma-> Éditer un schéma-> Exécuter-> Configuration de la construction: Debug

Vérifiez dans le journal Xcode que tout message tel que NSURLConnection finished with error - code -1004 ou NSURLConnection finished with error - code -1022. Allez dans Projet-> Cible-> Étapes de construction-> + -> Nouvelle phase de script d'exécution 

  1. (-1004) Vous avez configuré votre projet XCode à partir de l'esquisse et vous avez oublié de saisir le script xcode réactif natif dans les phases de construction:

Pour la version ci-dessous de React Native 50: export NODE_BINARY=node ../node_modules/react-native/packager/react-native-xcode.sh

Pour la version supérieure de React Native 50: export NODE_BINARY=node ../node_modules/react-native/scripts/react-native-xcode.sh

  1. (-1022) Votre problème d'application ATS, vérifiez sur Info.plist, et vous pouvez désactiver ATS à l'aide du code ci-dessous: <key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>
0
dayitv89