Wie kann ich den ios-Ordner im React Native-Projekt neu generieren?


76

Vor einiger Zeit habe ich das Verzeichnis / ios in meiner nativen App gelöscht (nennen wir es X). Ich habe mit dem Android-Emulator entwickelt und getestet, aber jetzt möchte ich sicherstellen, dass es auf iOS mit Xcode-Simulator usw. funktioniert.

Meine aktuelle Idee ist es also, ein neues natives Projekt zu erstellen (nennen wir es Y) mit dem Ordner ios. Befolgen Sie dann diese Schritte , um Y so umzubenennen, dass es den Namen X hat, und verschieben Sie dann das Verzeichnis / ios von Y nach X und versuchen zu run-ios.

Ich werde hier aktualisieren, wie das geht, aber ich habe mich gefragt, ob es einen besseren Weg gibt und war noch niemand in dieser Situation?

Ich habe viele Dinge gegoogelt, "iOS-Ordner neu generieren", "iOS-Ordner gelöscht", "iOS-Ordner zu vorhandenen hinzufügen" und nichts Hilfreiches. Vielleicht ist mein GoogleFU nicht gut genug, aber wenn jemand irgendwelche Vorschläge hat, sehr geschätzt.

In Schritt 2 wird sichergestellt, dass es aufgrund von Abhängigkeiten und anderen Dingen kompiliert wird. Im Moment ist es jedoch mein Ziel, den Ordner / ios wieder in das Projekt aufzunehmen und React Native über seine Existenz zu informieren (es verfügt über alle erforderlichen Konfigurationen).

Vielen Dank

Antworten:


111

Der Vorgang, den Sie ausführen müssen, ähnelt dem Umbenennen einer reaktiven nativen App. Grundsätzlich müssen Sie nur react-native upgradein Ihrem Stammprojektverzeichnis ausführen . Für weitere Informationen können Sie eine andere Frage prüfen hier . In den folgenden Anweisungen wird erläutert, wie Sie ein anderes natives Reaktionsprojekt erstellen, das auf einem kopierten Projekt mit einem neuen Namen basiert.

  • Kopieren Sie zuerst das Verzeichnis, in dem Ihre zu ändernde Anwendung vorhanden ist. Und gehen Sie zu Ihrem neu geklonten Verzeichnis.
  • Ändern Sie den Namen in der index.ios/android.jsDatei, die als Parameter für AppRegistry angegeben wird.
  • Ändern Sie den Namen und die Version entsprechend auf package.json
  • Löschen /iosund /androidOrdner, die von Ihrer älteren App übrig bleiben.
  • Führen Sie $react-native upgradezu generieren /iosund /androidwieder Ordner.
  • Führen Sie $react-native linkfür jede nativen Abhängigkeit.
  • Endlich laufen $react-native run-iosoder was du willst.

7
Es wird nicht mehr empfohlen react-native upgrade, es sollte durch ersetzt werden react-native-git-upgrade.
Wmcbain

17
@wmcbain Der Grund, den ich verwende, react-native upgradeist nur, Ordner neu zu generieren /iosund zu /androidprojizieren. Änderungen / Aktualisierungen / Upgrades reagieren nicht auf die native Version, wie der Name andeutet. Ich sehe dies react-native-git-upgradejedoch als angemessener an, wenn Sie die native Reaktionsversion Ihres Projekts ändern möchten.
Milkersarac

Wenn Sie zum Beispiel iOS-App-Symbole in iOS haben, sollten Sie diesen Ordner nicht löschen ...
Brunocascio

Hallo, ich kann die Dateien nicht finden index.ios/android.js. Hilf mir, es zu finden. Vielen Dank
Italo Rodrigo

3
React-Native Eject funktioniert bei mir statt Upgrade, .. mit gleichen Restschritten.
Alok

50

Entfernen / löschen Sie einfach Android und iOS (behalten Sie den Ordner für Android und iOS) und führen Sie den folgenden Befehl aus:

  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: Link


3
react-native upgrade(oder react-native-git-upgrade) beide haben bei mir nicht funktioniert. Einfach laufen react-native ejecthat perfekt funktioniert. Vielen Dank!
lsimonetti

7
react-native ejectscheint ab React Native 0.60 entfernt worden zu sein. Meine react-native-cliist Version 2.0.1.
Valdimar

3
upgrade --legacyscheint auch entfernt zu sein. error: unknown option --legacy
Rin Minase

Diese beiden Optionen wurden anscheinend entfernt. Es wird jetzt empfohlen, ein neues Projekt zu starten und die Dateien manuell zu kopieren. zBnpx react-native init YourProjectName
Nathan

28

Beachten Sie, dass Sie ab reaktionsnativem 0.60.x Folgendes verwenden können, um ios / android-Verzeichnisse neu zu generieren:

react-native upgrade --legacy true

Gutschrift hier: https://github.com/facebook/react-native/issues/25526


Dieser Befehl funktionierte auch für react-native v0.59.x mit react-native-cli v2.0.0. Wir können die Version angeben, um die gleiche reaktionsnative Version react-native upgrade 0.59.10 --legacy true
beizubehalten

1
Dies funktioniert nicht auf 0.61.5:error: unknown option '--legacy'
ekkis

3

Wie @Alok in den Kommentaren erwähnt, können Sie react-native ejectdie Ordner iosund generieren android. Aber Sie brauchen zuerst eine app.jsonin Ihrem Projekt.

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

Ihr Ansatz ist gültig, wenn Sie Ihr Projekt mit CRNA erstellt haben. Ich vermute, wenn die Frage beantwortet wurde, existiert CRNA überhaupt. Auf jeden Fall zielt die ursprüngliche Antwort auf die Ziele ab, mit denen die Projekte erstellt wurden react-native init. Ein Popup - Frage, was würden Sie tun , wenn iosund androidOrdner gelöscht werden , nachdem Sie bereits Ihr Projekt ausgestoßen?
Milkersarac

1
@milkersarac react-native ejectfunktioniert auch, wenn das Projekt nicht mit CRNA erstellt wird
Aleclarson

3

react-native eject

Fehler Nicht erkannter Befehl "Auswerfen". info Führen Sie "react-native --help" aus, um eine Liste aller verfügbaren Befehle anzuzeigen.

react-native upgrade --legacy true

Fehler: unbekannte Option `--legacy '

Sie können ein neues Projekt mit demselben Namen in einem anderen Ordner initiieren und ios dir über Folgendes kopieren:

im Verzeichnis YourProjectName

npx react-native init YourProjectName
mv YourProjectName/ios ios
rm -rf YourProjectName

Stellen Sie sicher, dass Sie einen sauberen Git-Verlauf haben, bevor Sie dies tun, falls Sie zurückkehren müssen


1
Ich habe dies getan, aber jetzt, wenn ich npx reagiere-native run-ios, wird nur das Demo-Projekt "Willkommen zu reagieren" anstelle des vorhandenen App.js-Codes ausgeführt. Vermisse ich einen Schritt?
WMartin

2

Dies ist zu spät, aber für alle, die immer noch das gleiche Problem haben und eine abgetrennte native Reaktion haben, habe ich exp separate über meine abgetrennte App ausgeführt und einen ios-Ordner erstellt!


2

Wie es scheint react-native eject nicht mehr verfügbar zu sein. Die einzige Möglichkeit, den ios-Ordner neu zu erstellen, bestand darin, ihn von Grund auf neu zu generieren.

Erstellen Sie eine Sicherungskopie Ihres iOS-Ordners

mv /path_to_your_old_project/ios /path_to_your_backup_dir/ios_backup

Navigieren Sie zu einem temporären Verzeichnis und erstellen Sie ein neues Projekt mit demselben Namen wie Ihr aktuelles Projekt

react-native init project_name
mv project_name/ios /path_to_your_old_project/ios

Installieren Sie die Pod-Abhängigkeiten im ios-Ordner Ihres Projekts

cd /path_to_your_old_project/ios
pod install

Dies ist derzeit die richtige Antwort gemäß dieser Diskussion: github.com/react-native-community/cli/pull/275
Nathan

1

Da reaktionsnatives Auswerfen in 60.3 abgeschrieben wird und ich beim Versuch, Form 60.1 auf 60.3 zu aktualisieren, Diff-Fehler bekam, funktionierte die Regenerierung des Android-Ordners nicht.

Ich musste

rm -R node_modules

Aktualisieren Sie dann react-native in package.json auf 59.1 (entfernen Sie package-lock.json).

Lauf

npm install

react-native eject

Dadurch werden Ihre Android- und iOS-Ordner neu generiert. Aktualisieren Sie schließlich wieder auf 60.3

react-native upgrade

React-Native Upgrade während zurück und 59.1 hat meinen Android-Ordner nicht neu generiert, so dass das Auswerfen notwendig war.


1

Wenn Sie mit Fehlern wie dem nicht gefundenen Modul verloren gehen, gibt es heutzutage eine andere als die folgende Methode, wenn Sie die native CLI-Reaktion verwendet haben. Ich hatte ein ähnliches Problem, als ich das xcode-Projekt aus der .xcodeproj- Datei anstelle von .xcworkspace geöffnet habe . Bitte beachten Sie auch, dass reaktionsnatives Auswerfen nur für Expo-Projekte gilt.

Die einzige Problemumgehung, um iOS- und Android-Ordner innerhalb eines reaktiven nativen Projekts neu zu generieren, ist die folgende.

  • Generieren Sie ein Projekt mit demselben Namen mit dem Befehl react-native init
  • Sichern Sie Ihre alten Projekt-iOS- und Android-Verzeichnisse an einem Sicherungsspeicherort
  • Kopieren Sie dann iOS- und Android-Verzeichnisse aus dem neu erstellten Projekt in Ihr altes, nicht funktionierendes Projekt
  • Führen Sie die Pod-Installation im kopierten iOS-Verzeichnis aus

Jetzt sollte Ihr Problem gelöst sein


1

Ich habe mich gerade auch mit diesem Problem befasst, aber ich habe es gerade gelöst.

Sicherlich gab es beim Ausführen des Befehls "React-Native Upgrade" die Meldung, dass keine Aktualisierung erforderlich war, oder mit dem Befehl "React-Native Eject", dass der Befehl nicht erkannt wird.

react-native upgrade

Jetzt sollten Sie den react-native upgrade --legacy trueBefehl verwenden, um Ihre Android-Ordner oder iOS zu sichern, da dieser Befehl Ihre Dateien ersetzen wird.

react-native upgrade --legacy true

Jetzt heißt es nur, dass Sie Ihre package.json nicht ersetzen sollen


1
  1. Öffnen Sie Terminal / cmd
  2. Wechseln Sie in den Ordner / das Verzeichnis, in dem sich der Projektordner " Projektname " befindet (Gehen Sie nicht in das Projektverzeichnis).
  3. Führen Sie den Befehl als: react-native init "ProjectName" aus und es wird gewarnt, dass das Projektverzeichnis bereits vorhanden ist, Sie jedoch fortfahren.
  4. Es werden alle aktualisierten Knotenmodule sowie fehlende Plattformordner (Android / iOS) im Projekt installiert, ohne den bereits geschriebenen Code zu stören.
  5. cd "ProjectName" und dann cd ios und dann pod install ausführen

PS: Sichern Sie Ihren Code, falls er App.js ändert


0

Ich hatte das gleiche Problem in der reaktiven nativen .63-Version. Ich habe vor allem Methoden ausprobiert, aber nicht funktioniert. Also habe ich wie folgt versucht, Android / iOS-Ordner in meinem alten Projektbaum zu löschen und ein neues Projekt mit ähnlichem Namen in einem anderen Ordner zu initiieren, später Android / iOS-Ordner vom neuen Projekt in das alte Projekt zu kopieren und den Cache mit dem reaktionsnativen Start zurückzusetzen - Cache zurücksetzen und React-Native Run-Android ausführen und mein Versuch war erfolgreich.


-1

Entfernen Sie zuerst den ios-Ordner

 react-native eject 
 cd ios/ 
 pod init 
 pod install 
 cd .. 
 react-native link 
 cd ios 
 open *.xcworkspace/
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.