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?
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.
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"];
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.
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.
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
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.
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.
J'ai fait face à ce problème où je réagissais-écran-écran d'accueil. Après l'avoir enlevé, ça marche
Cette question pourrait soulever en raison des possibilités suivantes:
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
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
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>