111 votes

Comment puis-je régénérer le dossier ios dans un projet React Native ?

Il y a quelques temps, j'ai supprimé le répertoire /ios de mon application react native (appelons-la X). J'ai développé et testé en utilisant l'émulateur Android mais maintenant je voudrais m'assurer que ça fonctionne sur ios avec le simulateur xcode etc.

Mon idée actuelle est donc de créer un nouveau projet react native bare (appelons-le Y) avec le dossier ios, puis de suivre les étapes suivantes ces étapes de renommer Y pour qu'il porte le nom de X, puis de déplacer le répertoire /ios de Y vers X et d'essayer de run-ios .

Je vous tiendrai au courant de l'évolution de la situation, mais je me demandais s'il existait une meilleure solution et si personne ne s'était déjà trouvé dans cette situation.

J'ai cherché sur Google des tas de choses : " régénérer un dossier ios ", " supprimer un dossier ios ", " ajouter un dossier ios à un dossier existant ", mais rien d'utile. Peut-être que mon googlefu n'est pas assez bon mais si quelqu'un a des suggestions, j'apprécierais beaucoup.

L'étape 2 consistera à s'assurer qu'il se compile en raison des dépendances et autres, mais pour l'instant, mon but est simplement de remettre le dossier /ios dans le projet et que React Native soit conscient de son existence (il a toute la configuration nécessaire).

Merci

0 votes

Essayez les commandes données dans ce post stackoverflow.com/a/65776701/1948482 cela vous aidera.

128voto

mustafailkersarac Points 104

Le processus que vous devez suivre est très similaire au renommage d'une application react native. En gros, il vous suffit d'exécuter react-native upgrade dans le répertoire de votre projet Root. Pour plus d'informations, vous pouvez consulter une autre question ici . Les instructions ci-dessous expliquent comment créer un autre projet react native basé sur un projet copié avec un nouveau nom.

  • Copiez d'abord le répertoire dans lequel se trouve votre application dont le nom doit être modifié. Et allez dans votre nouveau répertoire cloné.
  • Changez le nom à index.ios/android.js qui est donné comme un paramètre à AppRegistry.
  • Changez le nom et la version en conséquence sur package.json
  • Supprimer /ios et /android qui restent de votre ancienne application.
  • Exécuter $react-native upgrade pour générer /ios et /android encore des dossiers.
  • Exécuter $react-native link pour toute dépendance native.
  • Enfin exécuter $react-native run-ios ou tout ce que vous voulez.

7 votes

Il n'est pas recommandé d'utiliser react-native upgrade plus, il doit être remplacé par react-native-git-upgrade .

23 votes

@wmcbain The reason I use react-native upgrade est juste de re-générer /ios et /android dossiers de projets. Il ne modifie pas/met à jour/met à niveau la version native de react comme son nom l'indique. Cependant, je constate que react-native-git-upgrade est plus approprié si vous voulez changer la version react native de votre projet.

0 votes

Si vous avez par exemple des icônes d'applications ios à l'intérieur de ios, vous ne devez pas supprimer ce dossier...

87voto

Khurshid Ansari Points 279

Il suffit de supprimer/supprimer Android et ios (gardez une sauvegarde du dossier Android et ios) et d'exécuter la commande suivante :

  react-native eject

Supported version : 
    react-native <= 0.59.10
    react-native-cli <= 1.3.0 

   react-native upgrade --legacy true

Supported version : 
        react-native >= 0.60.0
        react-native-cli >= 2.1.0 

Ref : lien

Édition (mars 2021)

npm i react-native-eject
npm i @react-native-community/cli
react-native eject

va générer le dossier Android et ios.

Réf : lien

4 votes

react-native upgrade (ou react-native-git-upgrade ) les deux n'ont pas fonctionné pour moi. Il suffit d'exécuter react-native eject a fonctionné parfaitement. Merci !

8 votes

react-native eject semble avoir été supprimé à partir de React Native 0.60. Mon react-native-cli est une version 2.0.1 .

4 votes

upgrade --legacy semble avoir été supprimé aussi. error: unknown option --legacy

29voto

groundtruth-andy Points 281

Remarque : à partir de react-native 0.60.x, vous pouvez utiliser ce qui suit pour régénérer les répertoires ios/Android :

react-native upgrade --legacy true

Crédit ici : https://github.com/facebook/react-native/issues/25526

0 votes

Cette commande a également fonctionné pour react-native v0.59.x avec react-native-cli v2.0.0. Nous pouvons spécifier la version pour garder la même version de react-native : react-native upgrade 0.59.10 --legacy true

10 votes

Cela ne fonctionne pas sur la 0.61.5 : error: unknown option '--legacy'

7voto

Arosha Points 207

Étapes de travail 2021 .

  • Supprimer /ios /android
  • Changez le nom de l'application pour le nouveau nom dans /app.json et package.json
  • Exécuter npx react-native upgrade - ceci est important même si les fichiers de plateforme ne sont pas générés.
  • Créez un répertoire séparé et exécutez npx react-native init NewProjectName là.
  • Copier les dossiers ios et Android du projet généré vers l'ancien projet
  • Exécuter pod install sur /ios dans l'ancien projet
  • Exécuter cd .. && npx react-native run-ios

4voto

aleclarson Points 1375

Comme @Alok l'a mentionné dans les commentaires, vous pouvez faire react-native eject pour générer le ios et android dossiers. Mais vous aurez besoin d'un app.json dans votre projet en premier lieu.

{"name": "example", "displayName": "Example"}

0 votes

Votre approche est valable si vous avez créé votre projet avec CRNA. Je soupçonne que lorsque la question a répondu CRNA existe même. Quoi qu'il en soit, la réponse originale vise à ce que les projets soient créés avec CRNA. react-native init . Une question popup, que feriez-vous quand ios et android sont supprimés alors que vous avez déjà éjecté votre projet ?

1 votes

@milkersarac react-native eject fonctionne même si le projet n'est pas créé avec CRNA

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