如何在 React Native 项目中重新生成 ios 文件夹?

How can I regenerate ios folder in React Native project?

所以前段时间我删除了我的 React Native 应用程序中的 /ios 目录(我们称它为 X)。我一直在使用 android 模拟器进行开发和测试,但现在我想确保它可以在 ios 和 xcode 模拟器等上运行。

所以我目前的想法是用 ios 文件夹创建一个新的 React Native 裸项目(我们称它为 Y),然后按照 these steps 重命名 Y,使其名称为 X然后将 /ios 目录从 Y 移动到 X 并尝试移动到 run-ios

我会在这里更新进展情况,但我想知道是否有更好的方法,以前没有人遇到过这种情况吗?

我用谷歌搜索了很多东西 'regenerate ios folder' 'deleted ios folder' 'add ios folder to existing..' 但没有任何帮助。也许我的 googlefu 不够好,但如果有人有任何建议,非常感谢。

第 2 步将确保它由于依赖关系和其他因素而编译,但现在我的目标是将 /ios 文件夹放回项目中,并让 React Native 知道它的存在(它具有所有必要的配置)。

谢谢

您需要遵循的过程与重命名 React Native 应用程序非常相似。基本上你只需要在你的根项目目录中 运行 react-native upgrade 。有关更多信息,您可以查看另一个问题 。下面的说明解释了如何基于一个新名称的复制项目创建另一个 React Native 项目。

  • 先复制你要改名的应用程序所在的目录。然后转到新克隆的目录。
  • 更改作为参数提供给 AppRegistry 的 index.ios/android.js 文件中的名称。
  • package.json
  • 上相应地更改名称和版本
  • 删除旧应用中剩余的 /ios/android 文件夹。
  • 运行 $react-native upgrade 再次生成 /ios/android 文件夹。
  • 运行 $react-native link 对于任何本机依赖项。
  • 最后 运行 $react-native run-ios 或任何你想要的。

这为时已晚,但对于仍然遇到同样问题并拥有分离的 React 本机应用程序的任何人来说,我为我所做的只是 运行 exp detach 在我分离的应用程序上创建了 ios文件夹!

正如@Alok 在评论中提到的,您可以react-native eject 生成iosandroid 文件夹。但是你首先需要在你的项目中有一个app.json

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

只需 remove/delete 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 

参考:link

已编辑(2021 年 3 月)

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

将生成 android 和 ios 文件夹。

参考:link

由于 react-native 弹出在 60.3 中已贬值,我在尝试将表单 60.1 升级到 60.3 时遇到差异错误,重新生成 android 文件夹无法正常工作。

我不得不

rm -R node_modules

然后将package.json中的react-native更新为59.1(移除package-lock.json)

运行

npm install

react-native eject

这将重新生成您的 android 和 ios 文件夹 最后升级回 60.3

react-native upgrade

react-native 升级后,59.1 没有重新生成我的 android 文件夹,因此需要弹出。

请注意从 react-native 0 开始。60.x 您可以使用以下方法重新生成 ios/android 目录:

react-native upgrade --legacy true

来源:https://github.com/facebook/react-native/issues/25526

我刚发现自己也有这个问题,但我刚刚解决了它。

当然,当运行“react-native upgrade”命令时,它给了他们不需要更新的消息,或者使用“react-native eject”命令无法识别该命令。

react-native upgrade

现在您应该使用 react-native upgrade --legacy true 命令备份您的 android 文件夹或 ios 视情况而定,因为此命令将替换您的文件。

react-native upgrade --legacy true

现在只是告诉你不要更换你的package.json

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

在项目的 ios 文件夹中安装 pod 依赖项

cd /path_to_your_old_project/ios
pod install

react-native eject

error Unrecognized command "eject". info Run "react-native --help" to see a list of all available commands.

react-native upgrade --legacy true

error: unknown option `--legacy'

您可以在另一个文件夹中初始化一个同名的新项目,然后将 ios 目录复制到:

在 YourProjectName 目录中

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

在这样做之前确保你有干净的git历史记录,以防你需要恢复

如果您因 找不到模块 之类的错误而迷失方向,如果您使用过 React Native CLI.I,除了以下方法之外,别无他法从 .xcodeproj 文件而不是 .xcworkspace 打开 xcode 项目的结果。 另请注意,react-native eject 仅适用于 Expo 项目。

在 React Native 项目中重新生成 ios 和 android 文件夹的唯一解决方法如下。

  • 使用命令react-native init
  • 生成同名项目
  • 将旧项目 ios 和 android 目录备份到备份位置
  • 然后将 ios 和 android 目录从新创建的项目复制到旧的不工作的项目中
  • 运行 pod install 在复制的 ios 目录中

现在你的问题应该已经解决了

  1. 打开Terminal/cmd
  2. 移动到项目“ProjectName”文件夹所在的folder/directory(不要进入项目目录)
  3. 运行 命令为:react-native init "ProjectName" 它会警告项目目录已经存在但你继续。
  4. 它将在项目中安装所有更新的节点模块以及缺少的平台 (android/ios) 文件夹,而不会影响已编写的代码。
  5. cd "ProjectName" 然后 cd ios 然后 运行 pod安装

PS: 备份您的代码以防它发生变化 App.js

我在 React Native .63 版本中遇到了同样的问题。我尝试了以上所有方法,但没有奏效。所以,我尝试像这样删除旧项目树中的 android/ios 文件夹,并在另一个文件夹中启动一个具有相似名称的新项目,后来将 android/ios 文件夹从新项目复制到旧项目并使用 [= 重置缓存14=] start --reset-cache and 运行 react-native run-android 我的尝试成功了。

2020 年更新。React Native 0.63.3 不再支持此命令react-native eject。还 react-native upgrade 负责 - 使用 rn-diff-purge 项目将应用程序的模板文件升级到指定的或最新的 npm 版本。

可以通过此命令找到可用选项 react-native --help

工作步骤2021.

  • 删除/ios/android
  • 将应用名称更改为 /app.jsonpackage.json
  • 中的新名称
  • 运行 npx react-native upgrade - 即使没有生成平台文件,这也很重要。
  • 创建一个单独的目录,然后 运行 npx react-native init NewProjectName 放在那里。
  • 将 ios 和 android 文件夹从生成的项目复制到旧项目
  • 运行 pod install/ios 在旧项目
  • 运行 cd .. && npx react-native run-ios

截至 2021 年 8 月底,react@17.0.2 / react-native@0.65.1 none 提出的解决方案对我有用。 expo-cli 无法使用现代 react-native 降级 package.json 并将所有依赖项搞乱到我既不能使用 react-native run-android 也不能使用 expo run:android.

的状态

我已经在项目 GitHub 上报告了这个问题。欢迎评论和支持这方面的一些合理的解决方案:

https://github.com/facebook/react-native/issues/32109

1.Delete /ios /android

2.Cretate 文件 app.json

并添加代码:

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

3.run npx react-native eject

4.run npx react-native run-android