EMFile:打开的文件太多,观看 - 构建 Release 反应原生 iOS 应用程序

Posted

技术标签:

【中文标题】EMFile:打开的文件太多,观看 - 构建 Release 反应原生 iOS 应用程序【英文标题】:EMFile: too many open files, watch - building Release react native iOS app 【发布时间】:2022-01-03 02:23:26 【问题描述】:

我使用 Expo 编写了我的 React Native 应用程序,然后使用 expo eject 将其弹出。我现在正在尝试构建应用程序的发布版本。它适用于 android,也适用于 ios 的调试版本,但是当我尝试构建以在 Xcode 上发布时,我收到以下错误:

Error: EMFILE: too many open files, watch
    at FSEvent.FSWatcher._handle.onchange (internal/fs/watchers.js:178:28)
Emitted 'error' event on NodeWatcher instance at:
    at NodeWatcher.checkedEmitError (/node_modules/sane/src/node_watcher.js:143:12)
    at FSWatcher.emit (events.js:400:28)
    at FSEvent.FSWatcher._handle.onchange (internal/fs/watchers.js:184:12) 
  errno: -24,
  syscall: 'watch',
  code: 'EMFILE',
  filename: null

我看到其他几个人有类似的错误,并尝试了以下步骤但没有运气:

尝试了不同版本的节点 更新的守望者 重新安装自制软件 关闭除 Xcode 之外的所有窗口/应用程序

我感觉这个错误与 M1 芯片有关,但我真的很难找到解决方案,因此不胜感激。

设备 - Mac mini(M1,2020),运行 macOS Monterey 12.0.1

节点版本 - 17.0.1

React Native 版本 - ~0.63.4

我用this文章搭建环境

如果您需要更多信息/sn-ps,请告诉我

【问题讨论】:

【参考方案1】:

今年早些时候我遇到了同样的问题。确实是因为在没有 Rosetta 的情况下安装 watchman 时 M1 芯片和 XCode 构建不正确。

我正在使用 XCode 12.5 在 M1 Mac 上进行构建,并且必须:

使用 x86_64 自制程序实例安装 watchman 在 Rosetta 终端中运行 Metro 服务器 不使用 Rosetta运行 XCode

如果这是您第一次使用 x86_64 自制程序实例安装软件包,请记住将其添加到您的 PATH。

【讨论】:

谢谢,试试这个。 x86_64 自制软件是 M1 吗?如果没有,您是否有任何关于如何安装它的链接。然后当您说运行 Metro 服务器时,您的意思是指在构建应用程序时在终端中的 npm start 吗? 自制程序的 x86_64 实例是使用 Rosetta 终端安装的(不是 M1 mac 使用的默认 ARM 终端)。是的,它在终端中是一个简单的npm start,但在 xcode 中构建应用程序之前运行它。

以上是关于EMFile:打开的文件太多,观看 - 构建 Release 反应原生 iOS 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

android EMFILE(打开的文件太多)

节点和错误:EMFILE,打开的文件太多

nodejs应用程序中未处理的错误EMFILE

React Native + Jest EMFILE:打开文件过多错误

生产环境中Error:EMFILE,too many open files的解决方案

监视文件更改时出错:EMFILE "code":"EMFILE","errno":"EMFILE","sysc