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


76

所以不久前,我在我的react本机应用程序中删除了/ ios目录(我们称它为X)。我一直在使用Android模拟器进行开发和测试,但是现在我想确保它可以在带有xcode模拟器等的ios上运行。

因此,我目前的想法是使用ios文件夹创建一个新的react native裸项目(称为Y),然后按照以下步骤将Y重命名,使其具有X的名称,然后将/ ios目录从Y移到X并试图run-ios

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

我已经搜索了很多东西“重新生成ios文件夹”“已删除ios文件夹”“将ios文件夹添加到现有..”,没有任何帮助。也许我的googlefu不够好,但是如果有人有任何建议,不胜感激。

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

谢谢

Answers:


111

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

  • 首先复制要更改名称的应用程序所在的目录。并转到您新克隆的目录。
  • 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。帮我找到它。谢谢
Italo Rodrigo

3
react-native弹出对我有用,而不是升级,..其余步骤相同。
Alok

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
Valdimar

3
upgrade --legacy似乎也被删除了。error: unknown option --legacy
Rin Minase

看起来这两个选项均已删除。现在建议启动一个新项目并手动复制文件。例如npx react-native init YourProjectName
内森

28

注意从react-native 0.60.x开始,您可以使用以下代码重新生成ios / android目录:

react-native upgrade --legacy true

信用在这里:https//github.com/facebook/react-native/issues/25526


此命令还适用于带有react-native-cli v2.0.0的react-nativev0.59.x。我们可以指定版本以保持相同的本机版本:react-native upgrade 0.59.10 --legacy true
Ashwin

1
这不适用于0.61.5:error: unknown option '--legacy'
ekkis

3

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

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

如果您使用CRNA创建了项目,那么您的方法是有效的。我怀疑何时回答问题CRNA甚至存在。无论如何,原始答案的目标是使用创建的项目react-native init。一个弹出问题,在弹出项目后删除文件夹iosandroid文件夹时该怎么办?
milkersarac

1
react-native eject即使项目不是使用
CRNA

3

react-native eject

错误无法识别的命令“弹出”。info运行“ react-native --help”以查看所有可用命令的列表。

react-native upgrade --legacy true

错误:未知选项“-旧版”

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

在YourProjectName目录中

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

这样做之前,请确保您具有干净的git历史记录,以防万一您需要还原


1
我这样做了,但是现在当我npx react-native run-ios时,它只是运行演示“ welcome to react”项目,而不是现有的App.js代码。我错过了一步吗?
WMartin

2

这为时已晚,但是对于仍然存在相同问题并且具有分离的本机应用程序的任何人,我为我所做的就是在分离的应用程序上运行exp detach并创建了ios文件夹!


2

这好像是 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

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

1

由于反应本机弹出在60.3中已贬值,并且我在尝试将60.1升级到60.3时遇到diff错误,因此无法重新生成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

当返回和59.1时,react-native升级没有重新生成我的android文件夹,因此弹出是必要的。


1

如果您因找不到模块等错误而迷路,则使用响应本机CLI只能使用以下方法。由于从.xcodeproj文件而不是.xcworkspace打开xcode项目,我也遇到了类似的问题。另外请注意,本机弹出仅适用于Expo项目。

在react本机项目中重新注册ios和android文件夹的唯一解决方法如下。

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

现在您的问题应该解决了


1

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

当然,在运行“ react-native upgrade”命令时,它会向他们显示一条消息,即不需要更新,或者使用“ react-native exit”命令无法识别该命令。

react-native upgrade

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

react-native upgrade --legacy true

现在,它只是告诉您不要替换package.json


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

PS:备份您的代码,以防它更改App.js


0

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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.