iOS项目执行Carthage bootstrap更新Cartfile报错无法创建工作目录怎么办
报错根因定位
你遇到的Not a directory(POSIX错误码20)并非磁盘权限导致,核心矛盾是文件系统路径冲突:Carthage需要在目标项目路径下创建Carthage目录时,发现同路径下已存在同名的普通文件而非目录,无法完成工作目录创建流程。
从日志路径异常可以看到两个不匹配的路径:
- 报错尝试写入的路径:
/Users/alijaber/Documents/dgapp2-ios/Carthage - 前期拉取依赖的工作路径:
/Users/alijaber/Documents/myApp/Carthage/Checkouts
也侧面说明存在跨路径的配置错位问题。
分步修复操作
- 第一步:定位路径冲突对象
执行如下命令检查目标项目路径下的Carthage对象类型:ls -la /Users/alijaber/Documents/dgapp2-ios/ | grep Carthage
输出如果是-rw-r--r-- ... Carthage(开头为-,代表普通文件),就是触发报错的直接原因,通常是之前误操作生成了无后缀的同名文件。 - 第二步:清理冲突文件
备份该文件内需要留存的内容后,删除这个冗余文件:rm /Users/alijaber/Documents/dgapp2-ios/Carthage - 第三步:修正工作目录错位问题
确认你执行Carthage命令的路径和存放Cartfile、Cartfile.resolved的项目根目录完全一致,不要跨项目执行bootstrap命令,避免路径引用混乱。 - 第四步:手动重建Carthage标准目录结构
在项目根目录执行命令创建Carthage运行所需的基础目录,并修正目录权限:mkdir -p ./Carthage/{Checkouts,Build} chmod -R 755 ./Carthage - 第五步:重跑命令验证
重新执行Carthage bootstrap --platform iOS --use-ssh,确认依赖拉取流程正常。
补充排查场景
- 如果执行
ls检查时发现Carthage条目被Git跟踪(即路径出现在git ls-files的输出中),说明你之前误将该路径配置为Git子模块,生成了无实际内容的文件指针,需要执行git rm --cached Carthage移除错误的跟踪记录后,再创建对应目录即可。 - 如果清理完上述问题仍然报错,检查当前用户对项目根目录的写入权限,执行
ls -ld /Users/alijaber/Documents/dgapp2-ios确认目录所有者是当前登录用户,权限位不限制写入操作。
注意:已经给Xcode开启的完全磁盘访问权限可以保留,该配置不会影响修复流程,仅在项目路径位于受系统保护的目录(如下载、桌面、文稿目录)时提供必要的写入权限。
内容的提问来源于stack exchange,提问作者Ali
相关产品推荐
相关产品推荐

