You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Xcode单元测试的iOS代码覆盖率报告中排除第三方库

如何在Xcode单元测试覆盖率报告中排除第三方库

我之前做iOS单元测试的时候也碰到过这个糟心的问题——开启代码覆盖率后,Pods里的第三方库甚至一些系统依赖都混进报告里,完全干扰了我们自己代码的覆盖率统计。折腾了几种方法,亲测有效,给你整理下:

方法1:用Test Plan精准控制排除规则(推荐,Xcode 11+)

如果你的项目用了Test Plan(没有的话建议新建一个,管理测试更方便),这是最直观的方式:

  • 打开你的.xctestplan文件
  • 切换到「Coverage」标签页
  • 在「Include/Exclude Patterns」区域,点击「+」按钮添加排除规则
  • 输入你要排除的路径,比如:
    • 排除所有Pods:Pods/**
    • 排除单个第三方库:Alamofire/**
  • 确保规则的类型是「Exclude」,保存后重新运行测试,覆盖率报告就会自动过滤掉这些内容

方法2:通过Build Script修改覆盖率配置

如果是老版本Xcode(Xcode 10及以下),或者需要更灵活的自定义,可以用脚本的方式:

  • 打开项目的主Target,切换到「Build Phases」标签
  • 点击左上角的「+」,选择「New Run Script Phase」
  • 将下面的脚本粘贴进去:
# 生成覆盖率排除配置文件
echo "Setting up code coverage exclusions..."
XCOVCONFIG_FILE="${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH%.*}.xcovconfig"
cat > "$XCOVCONFIG_FILE" <<EOF
exclude_patterns = Pods/**, Vendor/**
EOF
# 告诉Xcode使用这个配置
export LLVM_COV_FLAGS="-config $XCOVCONFIG_FILE"
  • 把这个Run Script Phase拖到「Dependencies」之后、「Compile Sources」之前,重新运行测试即可

方法3:关闭第三方库的覆盖率收集(适合CocoaPods项目)

如果你的第三方库是通过CocoaPods引入的,可以直接在Podfile里配置,从根源上禁止它们生成覆盖率数据:

  • 打开项目根目录的Podfile,添加下面的代码:
post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      # 关闭第三方库的代码覆盖率
      config.build_settings['CLANG_ENABLE_CODE_COVERAGE'] = 'NO'
    end
  end
end
  • 执行pod install,重新编译项目后,第三方库就不会出现在覆盖率报告里了

方法4:Scheme设置中取消第三方库Target

这个方法比较直接,但如果第三方库很多的话操作起来麻烦:

  • 点击Xcode顶部的Scheme,选择「Edit Scheme」(或者用快捷键Cmd + <
  • 切换到「Test」选项卡,选择「Options」标签
  • 找到「Code Coverage」部分,点击「Configure...」
  • 在弹出的窗口里,取消所有第三方库对应的Target勾选,只保留你自己的App Target和Test Target,保存后重新运行测试

小提示

如果排除后还是有第三方库的内容,检查下是否有嵌套的依赖,或者调整排除规则的路径(比如用更具体的路径,或者通配符*来匹配)。

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

火山引擎 最新活动