如何在 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
生成ios
和android
文件夹。但是你首先需要在你的项目中有一个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
我刚发现自己也有这个问题,但我刚刚解决了它。
当然,当运行“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 目录中
现在你的问题应该已经解决了
- 打开Terminal/cmd
- 移动到项目“ProjectName”文件夹所在的folder/directory(不要进入项目目录)
- 运行 命令为:react-native init "ProjectName" 它会警告项目目录已经存在但你继续。
- 它将在项目中安装所有更新的节点模块以及缺少的平台 (android/ios) 文件夹,而不会影响已编写的代码。
- 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.json
和 package.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 上报告了这个问题。欢迎评论和支持这方面的一些合理的解决方案:
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
所以前段时间我删除了我的 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
。有关更多信息,您可以查看另一个问题
- 先复制你要改名的应用程序所在的目录。然后转到新克隆的目录。
- 更改作为参数提供给 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
生成ios
和android
文件夹。但是你首先需要在你的项目中有一个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
我刚发现自己也有这个问题,但我刚刚解决了它。
当然,当运行“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 目录中
现在你的问题应该已经解决了
- 打开Terminal/cmd
- 移动到项目“ProjectName”文件夹所在的folder/directory(不要进入项目目录)
- 运行 命令为:react-native init "ProjectName" 它会警告项目目录已经存在但你继续。
- 它将在项目中安装所有更新的节点模块以及缺少的平台 (android/ios) 文件夹,而不会影响已编写的代码。
- 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.json
和package.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 上报告了这个问题。欢迎评论和支持这方面的一些合理的解决方案:
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