M1芯片Mac构建React Native iOS Release包出现EMFILE: too many open files错误
解决方案
1. 永久修改 macOS 最大文件打开限制
M1 芯片的 Mac 默认文件打开数上限远低于 Release 构建所需的监听量级,仅临时关闭应用无法从根本上解决问题,可通过修改系统配置永久上调上限:
- 打开终端执行命令创建/编辑配置文件:
sudo nano /Library/LaunchDaemons/limit.maxfiles.plist
- 将以下内容完整粘贴到文件中:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>limit.maxfiles</string> <key>ProgramArguments</key> <array> <string>launchctl</string> <string>limit</string> <string>maxfiles</string> <string>65536</string> <string>200000</string> </array> <key>RunAtLoad</key> <true/> <key>ServiceIPC</key> <false/> </dict> </plist>
- 按下
Control+O保存文件,再按Control+X退出 nano 编辑器,依次执行以下命令加载配置:
sudo chown root:wheel /Library/LaunchDaemons/limit.maxfiles.plist sudo launchctl load -w /Library/LaunchDaemons/limit.maxfiles.plist
- 重启电脑后配置生效,重启后可在终端执行
ulimit -n验证,正常输出结果为65536。
2. 适配 React Native 0.63 的 M1 构建兼容
你使用的 React Native 0.63 版本发布早于 M1 芯片上市时间,本身存在 ARM 架构构建的兼容问题,可调整 Xcode 构建脚本规避:
- 打开 Xcode 进入项目配置页,选中对应 App 的 target,切换到「Build Phases」标签,找到「Bundle React Native code and images」项,在脚本最上方添加两行配置:
export NODE_OPTIONS=--max-old-space-size=4096 ulimit -n 65536
- 按下
Command+Shift+K清理 Xcode 现有构建缓存,删除项目下的ios/build文件夹后重新尝试构建 Release 版本。
3. 依赖兼容修复
如果上述方案仍未生效,可将 Node 版本降级到 14.x LTS 版本,React Native 0.63 对 16 以上的 Node 版本兼容性较差。之前切换 Node 版本未生效大概率是未清理旧依赖,降级后需要删除项目根目录的 node_modules 文件夹、yarn.lock 或 package-lock.json 文件,重新执行依赖安装命令后再构建。
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

