如何在 React Native 项目中重新生成 ios 文件夹?
Posted
技术标签:
【中文标题】如何在 React Native 项目中重新生成 ios 文件夹?【英文标题】:How can I regenerate ios folder in React Native project? 【发布时间】:2017-07-19 06:22:35 【问题描述】:所以不久前我删除了我的 react native 应用程序中的 /ios 目录(我们称之为 X)。我一直在使用 android 模拟器进行开发和测试,但现在我想确保它可以在带有 xcode 模拟器等的 ios 上运行。
所以我目前的想法是用 ios 文件夹创建一个新的 react native 裸项目(我们称之为 Y),然后按照these steps 重命名 Y 使其具有 X 的名称,然后将 /ios 目录从Y 进入 X 并尝试 run-ios
。
我会在这里更新情况,但我想知道是否有更好的方法,以前没有人遇到过这种情况吗?
我在谷歌上搜索了很多东西“重新生成 ios 文件夹”“删除 ios 文件夹”“将 ios 文件夹添加到现有文件夹中。”但没有任何帮助。也许我的googlefu不够好,但如果有人有任何建议,不胜感激。
第 2 步将确保它能够编译,因为依赖项和其他东西,但现在我的目标是让 /ios 文件夹回到项目中,并让 React Native 知道它的存在(它具有所有必要的配置)。
谢谢
【问题讨论】:
试试这篇文章***.com/a/65776701/1948482中给出的命令,它会对你有所帮助。 【参考方案1】:您需要遵循的过程与重命名 React Native 应用程序非常相似。基本上你只需要在你的项目根目录中运行react-native upgrade
。有关更多信息,您可以查看另一个问题 here。下面的说明解释了如何基于复制的项目以新名称创建另一个 React Native 项目。
index.ios/android.js
文件的名称,该文件作为 AppRegistry 的参数提供。
在package.json
上相应更改名称和版本
删除旧应用中剩余的 /ios
和 /android
文件夹。
运行$react-native upgrade
再次生成/ios
和/android
文件夹。
对任何本机依赖项运行 $react-native link
。
最后运行$react-native run-ios
或任何你想要的。
【讨论】:
不推荐使用react-native upgrade
,应该换成react-native-git-upgrade
。
@wmcbain 我使用react-native upgrade
的原因只是为了重新生成/ios
和/android
项目文件夹。正如其名称所暗示的那样,它不会更改/更新/升级对本机版本的反应。但是,如果您想更改项目的 react 本机版本,我发现 react-native-git-upgrade
更合适。
如果您在 ios 中有例如 ios 应用程序图标,则不应删除该文件夹...
react-native 弹出对我有用,而不是升级,..其余步骤相同。
@Yusuf 如果进程仍然有效产生/ios
和/android
文件夹,最后只需删除/android
即可摆脱它。【参考方案2】:
这已经太晚了,但是对于仍然有同样问题并且有一个分离的反应原生应用程序的任何人,我为我所做的我只是在我分离的应用程序上运行 exp detach 并创建了 ios 文件夹!
【讨论】:
【参考方案3】:正如 @Alok 在 cmets 中提到的,您可以使用 react-native eject
来生成 ios
和 android
文件夹。但是您首先需要在您的项目中使用app.json
。
"name": "example", "displayName": "Example"
【讨论】:
如果您使用 CRNA 创建了项目,则您的方法是有效的。我怀疑当问题回答时 CRNA 甚至存在。无论如何,原始答案的目标是使用react-native init
创建的项目。弹出一个问题,当您已经弹出项目后删除ios
和android
文件夹时,您会怎么做?
@milkersarac react-native eject
即使项目不是使用 CRNA 创建的也可以使用【参考方案4】:
只需删除/删除 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 upgrade
(或react-native-git-upgrade
)都对我不起作用。只需运行react-native eject
即可完美运行。谢谢!
从 React Native 0.60 开始,react-native eject
似乎已被删除。我的react-native-cli
是版本2.0.1
。
upgrade --legacy
似乎也被删除了。 error: unknown option --legacy
看起来这两个选项都被删除了。现在的建议是手动启动一个新项目并复制文件。例如npx react-native init YourProjectName
【参考方案5】:
由于 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 upgrade while back 和 59.1 没有重新生成我的 android 文件夹,所以弹出是必要的。
【讨论】:
【参考方案6】:请注意,从 react-native 0.60.x 开始,您可以使用以下内容重新生成 ios/android 目录:
react-native upgrade --legacy true
来源:https://github.com/facebook/react-native/issues/25526
【讨论】:
此命令也适用于 react-native v0.59.x 和 react-native-cli v2.0.0。我们可以指定版本来保持相同的 react-native 版本:react-native upgrade 0.59.10 --legacy true
这在 0.61.5 上不起作用:error: unknown option '--legacy'
【参考方案7】:
我发现自己也遇到了这个问题,但我刚刚解决了。
当然,在运行“react-native upgrade”命令时,它会向他们显示不需要更新的消息,或者使用“react-native injection”命令无法识别该命令。
react-native upgrade
现在你应该使用react-native upgrade --legacy true
命令来备份你的android文件夹或ios,因为这个命令将替换你的文件。
react-native upgrade --legacy true
现在它只是告诉你不要替换你的 package.json
【讨论】:
【参考方案8】: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【参考方案9】:❯react-native 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 历史记录,以防你需要恢复
【讨论】:
我这样做了,但现在当我 npx react-native run-ios 它只是运行演示“欢迎反应”项目而不是现有的 App.js 代码。我错过了一步吗? @WMartin 你想将 ios 文件夹移动到你以前的项目并在那里运行应用程序【参考方案10】:如果您因 module not found 之类的错误而迷失方向,如果您使用过 react native CLI,那么除了以下方法之外别无他法。由于从 .xcodeproj 文件而不是 .xcworkspace。 另请注意,react-native 弹出仅适用于 Expo 项目。
在 react native 项目中重新生成 ios 和 android 文件夹的唯一解决方法如下。
使用命令react-native init 生成同名项目 将旧项目 ios 和 android 目录备份到备份位置 然后将 ios 和 android 目录从新创建的项目复制到旧的不工作项目中 在复制的 ios 目录中运行 pod install现在你的问题应该解决了
【讨论】:
【参考方案11】:-
打开终端/cmd
移动到项目“ProjectName”文件夹所在的文件夹/目录(不要进入项目目录)
运行命令为:react-native init "ProjectName",它会警告项目目录已经存在,但你继续。
它将在项目中安装所有更新的节点模块以及缺少的平台 (android/ios) 文件夹,而不会干扰已编写的代码。
cd "ProjectName" 然后 cd ios 然后运行 pod install
PS:备份您的代码以防它更改 App.js
【讨论】:
【参考方案12】:我在 react native .63 版本中遇到了同样的问题。我尝试了所有方法,但没有奏效。所以,我尝试像这样在我的旧项目树中删除 android/ios 文件夹并在另一个文件夹中启动一个具有相似名称的新项目,后来将 android/ios 文件夹从新项目复制到旧项目并使用 react-native start 重置缓存 -重置缓存并运行 react-native run-android ,我的尝试成功了。
【讨论】:
【参考方案13】:2020 年更新。React Native 0.63.3 不再支持此命令 react-native eject
。还 react-native upgrade
负责 - 使用 rn-diff-purge
项目将您应用的模板文件升级到指定或最新的 npm 版本。
可以通过这个命令找到可用的选项
react-native --help
【讨论】:
【参考方案14】:工作步骤2021。
删除/ios
/android
将应用名称更改为/app.json
和package.json
中的新名称
运行npx react-native upgrade
- 即使没有生成平台文件,这也很重要。
创建一个单独的目录并在那里运行npx react-native init NewProjectName
。
将生成项目中的ios和android文件夹复制到旧项目中
在旧项目中运行 pod install
in /ios
运行cd .. && npx react-native run-ios
【讨论】:
【参考方案15】:截至 2021 年 8 月末,react@17.0.2
/ react-native@0.65.1
所提供的解决方案均不适合我。 expo-cli
不能与现代 react-native
一起使用,降级 package.json
并将所有依赖项弄乱到我既不能使用 react-native run-android
也不能使用 expo run:android
的状态。
我已经在项目 GitHub 上报告了这个问题。随意评论和支持该领域的一些合理解决方案:
https://github.com/facebook/react-native/issues/32109
【讨论】:
它对我有用,但与失败的项目相比,新项目的名称应该完全相同。之后,您可以将 android / ios 文件夹从新文件夹复制到旧文件夹,或者将旧项目 app.js 或其他文件复制到新文件夹(无论哪种方式都可以),但后一个更成功。复制删除锁定文件并运行命令 yarn 然后 yarn start --reset-cache以上是关于如何在 React Native 项目中重新生成 ios 文件夹?的主要内容,如果未能解决你的问题,请参考以下文章
React Native只需重新初始化iOS或Android Project
我的 react-native 项目的永久解决方案而不是 ngrok