iOS:Azure CI执行Swift包时.docc文件报错,如何移除?
解决Azure CI中Swift包.docc文件引发的构建失败问题
在Azure CI构建iOS项目时,Firebase和Pulse这两个Swift包中的.docc文档目录会触发如下构建错误:
Cannot open "Pulse.docc" as a "Swift Package Folder" because it is already open as a "Folder".
Firebase包也会出现完全相同的报错。
你之前尝试的Bash脚本未生效,大概率是因为执行时机不对,或是找错了Swift包的存储路径。下面提供两种可行的解决思路:
方法一:直接删除Swift包缓存中的.docc目录
Swift包默认会缓存到~/Library/Caches/org.swift.swiftpm/目录,而非构建时生成的DerivedData。调整脚本到Xcode构建任务之前执行,直接清理缓存中的.docc文件夹:
- task: Bash@3 displayName: "Remove .docc folders from SwiftPM cache" inputs: targetType: 'inline' script: | # 清理Swift包全局缓存里的.docc目录 echo "Cleaning .docc folders from SwiftPM global cache..." find ~/Library/Caches/org.swift.swiftpm/ -type d -name "*.docc" -exec rm -rf {} \; # 如果项目有本地Packages目录,同时清理其中的.docc if [ -d "./Packages" ]; then echo "Cleaning .docc folders from local Packages directory..." find ./Packages/ -type d -name "*.docc" -exec rm -rf {} \; fi # 验证清理结果 echo "Remaining .docc in global cache:" find ~/Library/Caches/org.swift.swiftpm/ -type d -name "*.docc" || echo "No .docc folders left" echo "Remaining .docc in local Packages:" find ./Packages/ -type d -name "*.docc" || echo "No .docc folders left"
方法二:通过Xcode构建参数跳过文档处理
不需要删除文件,直接在Xcode构建任务中添加-skipDocumentProcessing参数,让Xcode跳过对.docc文档的处理,从根源避免报错:
- task: Xcode@5 displayName: "Build iOS Application" inputs: actions: 'build' scheme: 'YourAppScheme' # 替换成你的项目Scheme名称 sdk: 'iphoneos' configuration: 'Release' xcWorkspacePath: '**/*.xcworkspace' # 适配你的项目结构,单项目用**/*.xcodeproj xcodeVersion: 'default' arguments: '-skipDocumentProcessing' # 核心参数:跳过文档处理
原脚本失效原因分析
- 路径错误:你指定的
DerivedData是Xcode构建过程中临时生成的目录,执行脚本时Swift包可能还未被解压到此处,自然找不到.docc文件夹。 - 时机问题:如果脚本在Xcode构建之后执行,此时.docc目录已经被Xcode加载,删除也无法解决已触发的错误。
内容的提问来源于stack exchange,提问作者Najam
相关产品推荐
相关产品推荐

