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

104

不久之前,我删除了我的React Native应用程序(我们称其为X)中的/ios目录。我一直在使用Android模拟器进行开发和测试,但现在我想确保它能在iOS上运行,例如使用Xcode模拟器等。

因此,我的当前想法是创建一个新的React Native裸项目(我们称其为Y),其中包含ios文件夹,然后按照这些步骤重命名Y,使其具有X的名称,然后将/ios目录从Y移动到X并尝试run-ios

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

我已经搜索了很多东西,“重新生成ios文件夹”、“删除ios文件夹”、“向现有项目添加ios文件夹......”等等,没有任何有用的信息。也许我的谷歌功夫还不够好,但如果有人有任何建议,我将不胜感激。

第二步将确保它编译成功,因为存在依赖关系等问题,但目前我的目标只是将/ios文件夹放回项目中,并让React Native知道它的存在(它具有所有必要的配置)。

谢谢!


尝试执行此帖子中给出的命令 https://stackoverflow.com/a/65776701/1948482 它会对你有所帮助。 - Kshitij
18个回答

125
您需要遵循的流程与重命名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或任何您想要的内容。

7
不推荐再使用react-native upgrade,应该改用react-native-git-upgrade - wmcbain
23
我使用 react-native upgrade 的原因只是为了重新生成 /ios/android 项目文件夹。它并不会像它的名字所暗示的那样更改/更新/升级 React Native 版本。然而,如果您想更改项目中的 React Native 版本,则可以考虑使用 react-native-git-upgrade - milkersarac
如果您例如在iOS中有iOS应用程序图标,则不应删除该文件夹... - brunocascio
3
对我来说,使用 react-native eject 而不是 upgrade 更加有效,其他步骤相同。 - Alok
1
@Yusuf 如果该过程仍然有效以生成 /ios/android 文件夹,则最终只需删除 /android 即可摆脱它。 - milkersarac
显示剩余5条评论

82

只需删除 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 

参考资料:链接

编辑时间(2021年3月)

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

将生成 Android 和 iOS 文件夹。

参考:链接


4
"react-native upgrade"(或"react-native-git-upgrade")对我无效。只需运行"react-native eject"即可完美解决。谢谢!" - lsimonetti
7
似乎从React Native 0.60开始,react-native eject 功能已被移除。我的 react-native-cli 版本为 2.0.1 - Valdimar
4
upgrade --legacy seems to be removed too. error: unknown option --legacy - Rin Minase
2
看起来这两个选项都已经被移除了。现在的推荐是手动初始化一个新项目并复制文件。例如:npx react-native init YourProjectName - Nathan
2
编辑后的评论(安装react-native-eject... cli...并执行eject)对我有用。 - Klian

29

这个命令也适用于react-native v0.59.x和react-native-cli v2.0.0。我们可以指定版本来保持相同的react-native版本:react-native upgrade 0.59.10 --legacy true - Ashwin
10
这在版本0.61.5上无法运行:错误:未知选项'--legacy' - ekkis

8

操作步骤 2021

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

4

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

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

如果您使用CRNA创建了项目,则您的方法是有效的。我怀疑当问题回答时,CRNA是否仍然存在。无论如何,原始答案针对使用react-native init创建的项目。还有一个弹出式问题,如果您已经弹出了项目,但iosandroid文件夹已被删除,您会怎么做? - milkersarac
1
即使项目不是使用CRNA创建的,@milkersarac react-native eject 也可以正常工作。 - aleclarson

3

react-native eject

错误:无法识别命令“eject”。信息:运行“react-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 react-native run-ios 时,它只运行演示的“欢迎使用React”的项目,而不是现有的 App.js 代码。我是否错过了什么步骤? - WMartin
@WMartin,你应该将ios文件夹移动到之前的项目中,并在那里运行应用程序。 - Nicolas Silva

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

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

cd /path_to_your_old_project/ios
pod install

目前根据此讨论,这是正确的答案:https://github.com/react-native-community/cli/pull/275 - Nathan

2
  1. 打开终端/cmd
  2. 进入包含"ProjectName"文件夹的目录(不要进入项目目录)
  3. 运行以下命令: react-native init "ProjectName",会提示项目目录已经存在但是你可以继续执行
  4. 它将安装所有更新的节点模块以及缺少的平台(android/ios)文件夹到项目中,而不影响已经编写好的代码
  5. cd "ProjectName" 然后 cd ios 接着运行 pod install

PS: 在执行此操作前请备份您的代码,以防它更改了 App.js 文件


无法初始化新项目,因为目录“project1”已经存在。 - Wayne Mao

1
我也遇到了这个问题,但是我已经解决了。
当运行 "react-native upgrade" 命令时,它会给出消息说不需要更新,或者使用命令 "react-native eject" 时,会提示该命令未被识别。
现在你应该使用 react-native upgrade --legacy true 命令来备份你的 android 或 ios 文件夹,因为这个命令将替换你的文件。
现在只是提示你不要替换你的 package.json。

1

虽然有点晚了,但是对于那些仍然遇到同样问题并且有一个分离的 React Native 应用程序的人来说,我所做的就是在我的分离应用上运行 exp detach,它创建了 ios 文件夹!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接