【问题标题】:How can I regenerate ios folder in React Native project?如何在 React Native 项目中重新生成 ios 文件夹?
【发布时间】: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 知道它的存在(它具有所有必要的配置)。

谢谢

【问题讨论】:

标签: ios xcode react-native react-native-ios


【解决方案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 来生成 iosandroid 文件夹。但是您首先需要在您的项目中使用app.json

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

    【讨论】:

    • 如果您使用 CRNA 创建了项目,则您的方法是有效的。我怀疑当问题回答时 CRNA 甚至存在。无论如何,原始答案的目标是使用react-native init 创建的项目。弹出一个问题,当您已经弹出项目后删除iosandroid 文件夹时,您会怎么做?
    • @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
        

        【讨论】:

        【解决方案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】:
          1. 打开终端/cmd
          2. 移动到项目“ProjectName”文件夹所在的文件夹/目录(不要进入项目目录)
          3. 运行命令为:react-native init "ProjectName",它会警告项目目录已经存在,但你继续。
          4. 它将在项目中安装所有更新的节点模块以及缺少的平台 (android/ios) 文件夹,而不会干扰已编写的代码。
          5. 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.jsonpackage.json 中的新名称
                • 运行npx react-native upgrade - 即使没有生成平台文件,这也很重要。
                • 创建一个单独的目录并在那里运行npx react-native init NewProjectName
                • 将生成项目中的ios和android文件夹复制到旧项目中
                • 在旧项目中运行 pod install in /ios
                • 运行cd .. &amp;&amp; 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
                  猜你喜欢
                  • 2020-03-20
                  • 2021-10-08
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2020-02-25
                  • 1970-01-01
                  • 2017-01-30
                  • 1970-01-01
                  相关资源
                  最近更新 更多