Як я можу відновити папку ios у проекті React Native?


77

Тож деякий час тому я видалив каталог / ios у своєму рідному додатку для реакції (назвемо його X). Я розробляв і тестував за допомогою емулятора android, але тепер хотів би переконатися, що він працює на ios із симулятором xcode тощо.

Отже, моя поточна ідея полягає у створенні нового рідного голого проекту (назвемо його Y) з папкою ios, а потім виконайте ці дії, щоб перейменувати Y, щоб вона мала ім’я X, а потім перемістіть каталог / ios з Y в X і намагається run-ios.

Я оновлю тут, як це відбувається, але мені було цікаво, чи є кращий спосіб, і ніхто раніше не був у цій ситуації?

Я погуглив багато речей `` відновити папку ios '' видалити папку ios '' додати папку ios до існуючої .. '' і нічого корисного. Можливо, мій googlefu недостатньо хороший, але якщо хтось має якісь пропозиції, дуже вдячний.

Крок 2 буде переконатися, що він компілюється через залежності та інше, але наразі моєю метою є просто повернути папку / ios назад у проект, і щоб React Native знав про його існування (він має всі необхідні налаштування).

Дякую

Відповіді:


112

Процес, який вам потрібно виконати, настільки схожий на перейменування рідного додатка для реагування. В основному вам просто потрібно запустити react-native upgradeу своєму кореневому каталозі проекту. Для отримання додаткової інформації ви можете перевірити ще одне питання тут . Інструкції нижче пояснюють, як створити інший реагуючий власний проект на основі скопійованого проекту з новою назвою.

  • Спершу скопіюйте каталог, в якому існує ваша програма, яку слід змінити. І перейдіть до вашого недавно клонованого каталогу.
  • Змініть ім’я index.ios/android.jsфайлу, який задано як параметр, на AppRegistry.
  • Змініть назву та версію відповідно до package.json
  • Видаліть /iosі /androidпапки, що залишились із вашої попередньої програми.
  • Знову запустіть $react-native upgradeдля створення /iosта /androidпапок.
  • Запустити $react-native linkбудь-яку рідну залежність.
  • Нарешті біжи $react-native run-iosабо що завгодно.

7
Більше не рекомендується використовувати react-native upgrade, його слід замінити на react-native-git-upgrade.
wmcbain

17
@wmcbain Причиною, яку я використовую, react-native upgradeє просто повторне створення /iosта /androidпроектування папок. Він не змінює / оновлює / модернізує рідну версію, як це випливає з назви. Однак я бачу, що react-native-git-upgradeце більш доречно, якщо ви хочете змінити рідну версію вашого проекту для реагування.
milkersarac

Якщо у вас є, наприклад, піктограми програм ios всередині ios, не слід видаляти цю папку ...
brunocascio

Привіт, я не можу знайти файли index.ios/android.js. Допоможіть мені його знайти. Подяка
Італо Родріго

3
реагувати-рідний викид працює для мене замість оновлення, .. з іншими кроками однакові.
Алок

50

Просто видаліть / видаліть android та ios (збережіть резервну копію папки android та ios) і запустіть таку команду:

  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 

Посилання: посилання


3
react-native upgrade(або react-native-git-upgrade) обидва не працювали у мене. Просто біг react-native ejectпрацював чудово. Дякую!
lsimonetti

7
react-native ejectсхоже, було видалено станом на React Native 0.60. Моя react-native-cliверсія 2.0.1.
Вальдімар

4
upgrade --legacyздається теж видалено. error: unknown option --legacy
Rin Minase

Схоже, обидва ці параметри видалено. Зараз рекомендується ініціювати новий проект та скопіювати файли вручну. напр.npx react-native init YourProjectName
Натан

28

Зверніть увагу, що в реакції-native 0.60.x ви можете використовувати наступне для регенерації каталогів ios / android:

react-native upgrade --legacy true

Кредит тут: https://github.com/facebook/react-native/issues/25526


Ця команда також працювала для реагування-рідного v0.59.x з реагувати-рідного-клі v2.0.0. Ми можемо вказати версію, щоб зберегти таку саму рідну для реагування:react-native upgrade 0.59.10 --legacy true
Ашвін,

3
це не працює на 0.61.5:error: unknown option '--legacy'
ekkis

3

Як згадував @Alok у коментарях, ви можете зробити react-native ejectдля створення папок iosта android. Але app.jsonспочатку вам знадобиться ваш проект.

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

Ваш підхід дійсний, якщо ви створили свій проект за допомогою CRNA. Я підозрюю, коли відповідь на питання CRNA навіть існує. У будь-якому випадку вихідна відповідь націлена на проекти, з якими були створені проекти react-native init. Один спливає питання, що б ви робили , коли iosі androidпапки будуть видалені після того, як ви вже викидати ваш проект?
milkersarac

1
@milkersarac react-native ejectпрацює, навіть якщо проект не створений за допомогою CRNA
aleclarson

3

Здається react-native eject, більше немає в наявності. Єдиний спосіб, який я міг знайти для відтворення папки ios, - це створити її з нуля.

Візьміть резервну копію папки ios

mv /path_to_your_old_project/ios /path_to_your_backup_dir/ios_backup

Перейдіть до тимчасового каталогу та створіть новий проект з тією ж назвою, що і ваш поточний проект

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

Встановіть залежності pod всередині папки ios у вашому проекті

cd /path_to_your_old_project/ios
pod install

Наразі це правильна відповідь згідно з цим обговоренням: github.com/react-native-community/cli/pull/275
Натан,

3

react-native eject

помилка Нерозпізнана команда "вилучити". інформація Запустіть "response-native --help", щоб побачити список усіх доступних команд.

react-native upgrade --legacy true

помилка: невідомий варіант `--legacy '

Ви можете ініціювати новий проект, який має те саме ім’я, в іншій папці та скопіювати каталог ios:

всередині каталогу YourProjectName

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

Перш ніж робити це, переконайтеся, що у вас є чиста історія git, на випадок, якщо вам потрібно повернутися


1
Я зробив це, але тепер, коли я реагую на npx-native-run, він просто запускає демонстраційний проект "ласкаво просимо реагувати" замість існуючого коду App.js. Я пропустив крок?
WMartin

2

Це занадто пізно, але для тих, хто все ще має таку ж проблему і має окремий рідний додаток для реагування, те, що я зробив для мене, я просто запускаю exp detach над своїм відокремленим додатком, і він створив папку iOS!


1

Оскільки реакція-native eject знецінена в 60.3, і я отримував помилки різниці при спробі оновити форму 60.1 до 60.3, регенерація папки android не працювала.

мені довелося

rm -R node_modules

Потім оновіть response-native в package.json до 59.1 (видаліть package-lock.json)

Біжи

npm install

react-native eject

Це відновить ваші папки android та ios остаточно оновіть до версії 60.3

react-native upgrade

Реагуйте-рідне оновлення в той час як назад і 59.1 не регенерував мою папку android, тому витяг був необхідним.


1

Якщо ви втратили такі помилки, як не знайдений модуль, немає іншого способу, ніж наведений нижче, якщо ви використовували рідний CLI. Я зіткнувся з подібною проблемою в результаті відкриття проекту xcode з файлу .xcodeproj замість .xcworkspace . Також зверніть увагу на те, що реагувати на рідну реакцію лише для проекту Expo.

Єдине обхідне рішення для регенерації папок ios та android у межах реактивного проекту - це наступне.

  • Створіть проект з тим самим іменем за допомогою команди реагування-native init
  • Створіть резервну копію старих каталогів iOS і каталогів Android у резервне місце
  • Потім скопіюйте каталоги ios та android із новоствореного проекту у ваш старий непрацюючий проект
  • Запустіть установку pod в скопійованому каталозі ios

Тепер вашу проблему слід вирішити


1

Я просто опинився перед цією проблемою, але просто вирішив її.

Безумовно, під час запуску команди "реагувати на рідне оновлення", вона давала їм повідомлення про те, що не потрібно оновлювати або за допомогою команди "реагувати на рідне вилучення", що команда не розпізнана.

react-native upgrade

Тепер вам слід скористатися react-native upgrade --legacy trueкомандою для резервного копіювання папок Android або ios, залежно від ситуації, оскільки ця команда замінить ваші файли.

react-native upgrade --legacy true

Тепер це просто промовляє вам не замінювати ваш package.json


1
  1. Відкритий термінал / cmd
  2. Перейдіть до папки / каталогу, де існує папка проекту "ProjectName" (не переходити до каталогу проекту)
  3. запустіть команду як: реагуйте-native init "ProjectName", і вона попередить, що каталог проекту вже існує, але ви продовжуєте.
  4. Він встановить всі оновлені модулі вузлів, а також відсутні папки платформи (android / ios) всередині проекту, не порушуючи вже написаний код.
  5. cd "ProjectName", а потім cd ios, а потім запустіть pod install

PS: Зробіть резервну копію коду на випадок, якщо він змінить App.js


0

Я зіткнувся з такою ж проблемою у рідній версії .63. Я пробував перш за все методи, але не працював. Отже, я спробував подібно видаленим папкам android / ios в моєму старому дереві проектів і ініціював новий проект з подібною назвою в іншій папці, пізніше скопіював папки android / ios з нового проекту у старий проект і скинув кеш за допомогою реакції-рідного запуску - reset-cache і запустити реагувати-native-run-android, і моя спроба була успішною.


0

ОНОВИТИ 2020. React Native 0.63.3 більше не підтримує цю команду react-native eject. Також react-native upgradeвідповідає за - Оновіть файли шаблонів програми до вказаної або останньої версії npm за допомогою rn-diff-purgeпроекту.

Доступні варіанти можна знайти за допомогою цієї команди react-native --help


-1

Спочатку видаліть папку ios

 react-native eject 
 cd ios/ 
 pod init 
 pod install 
 cd .. 
 react-native link 
 cd ios 
 open *.xcworkspace/
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.