You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure DevOps集成SonarQube至iOS项目时遇XCCov错误求助

Azure Pipeline集成SonarQube到iOS项目时出现XCCovErrorDomain错误(找不到Metadata.plist)

问题详情

尝试将SonarQube集成到iOS项目的Azure Pipeline中,已按照官方Swift覆盖率示例步骤执行,但在CI环境中出现以下错误,本地运行正常:

Error: Error Domain=XCCovErrorDomain Code=0 "Failed to create unarchiver" UserInfo={NSLocalizedDescription=Failed to create unarchiver, NSUnderlyingError=0x7fa71961ce40 {Error Domain=NSCocoaErrorDomain Code=260 "The file Metadata.plist couldn’t be opened because there is no such file." UserInfo={NSFilePath=/Users/runner/work/1/s/tmp.xccovarchive/Metadata.plist, NSUnderlyingError=0x7fa71961cd80 {Error Domain=NSPOSIXErrorDomain Code=2 "No such file or directory"}}}}

解决方案

1. 验证覆盖率归档的生成路径与存在性

  • 在Azure Pipeline中添加步骤,检查目标归档目录的内容:
    ls -la /Users/runner/work/1/s/tmp.xccovarchive/
    
    确认Metadata.plist是否存在。如果目录为空或不存在,说明归档生成步骤存在问题。
  • 确保xcrun xccov archive命令的输出路径,与SonarQube扫描时指定的路径完全一致,避免本地与CI工作目录差异导致路径错误。

2. 确保测试任务正确生成覆盖率数据

  • 检查xcodebuild test命令必须包含覆盖率启用参数,且生成结果包:
    xcodebuild test -workspace YourApp.xcworkspace -scheme YourScheme -destination 'platform=iOS Simulator,name=iPhone 15' -enableCodeCoverage YES -resultBundlePath ./TestResults
    
  • 执行归档转换命令时,确保结果包路径正确:
    xcrun xccov archive ./TestResults -o /Users/runner/work/1/s/tmp.xccovarchive
    
    避免在转换前清理了TestResults目录。

3. 检查CI环境的目录权限与清理策略

  • 在生成归档前手动创建目标目录,确保runner用户有写入权限:
    mkdir -p /Users/runner/work/1/s/tmp.xccovarchive
    
  • 排查Pipeline中是否有自动清理临时文件的任务,比如缓存或清理步骤,确保不会删除刚生成的xccovarchive目录。

4. 修正SonarQube扫描的路径配置

  • 在sonar-project.properties或Pipeline的SonarQube任务参数中,明确指定覆盖率归档的绝对路径:
    sonar.swift.coverage.reportPaths=/Users/runner/work/1/s/tmp.xccovarchive
    
    避免使用相对路径导致CI环境下路径解析错误。

内容的提问来源于stack exchange,提问作者MobX

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 09:45:27