Xcode 9出现Bad File descriptor错误求助:求成因与解决办法
解决Xcode 9中"encountered read error on command output pipe (Bad file descriptor)"错误
我之前维护老项目用Xcode 9的时候也踩过这个坑,这个管道读取错误大概率和Xcode缓存、代码拉取后的冲突或者系统资源异常有关,给你整理几个靠谱的解决方向:
可能的原因及对应解决办法
Xcode缓存堆积导致管道异常
这是最常见的诱因,Xcode的Derived Data和缓存文件在版本切换、源码更新后很容易出现损坏,直接导致命令执行时管道读取失败。
解决步骤:- 完全关闭Xcode
- 打开终端,执行清理Derived Data的命令:
rm -rf ~/Library/Developer/Xcode/DerivedData - 顺带清理Xcode的全局缓存:
rm -rf ~/Library/Caches/com.apple.dt.Xcode - 重新打开Xcode,拉取最新源码后再尝试构建
Git拉取后的文件权限或冲突问题
拉取新代码时,如果本地有未提交的修改、或者文件权限被系统篡改,会导致Xcode读取文件时触发管道错误。
解决步骤:- 先在项目根目录执行
git status检查本地修改,建议先通过git stash暂存或者提交修改 - 如果确定不需要本地修改,可以执行
git reset --hard HEAD重置代码到最新拉取的版本(注意:这个操作会丢弃所有未提交修改,谨慎操作) - 修复文件权限:在项目根目录执行
sudo chmod -R 755 .,确保Xcode有足够权限读取项目文件
- 先在项目根目录执行
系统管道资源被占用耗尽
有时候后台的其他进程会占用大量系统管道资源,导致Xcode无法正常创建或读取管道。
解决步骤:- 关闭所有不必要的后台进程,比如其他开发工具、终端中长时间运行的脚本等
- 直接重启Mac,重置系统的资源占用状态后再打开Xcode尝试
Xcode 9版本本身的bug
Xcode 9作为比较老旧的版本,本身存在一些管道相关的已知bug,尤其是在配合较新的macOS版本(比如Mojave及以上)使用时更容易触发。
解决步骤:- 尝试更新Xcode到9.x系列的最新补丁版本(如果还能获取到官方安装包的话)
- 暂时关闭并行编译:在项目的Build Settings中找到
Parallelize Build选项并取消勾选,减少同时执行的编译命令数量,降低管道压力
内容的提问来源于stack exchange,提问作者philm
相关产品推荐
相关产品推荐

