Xcode 9.3主目标代码覆盖率异常问题求助
排查Xcode 9.3主应用代码覆盖率缺失的方向
我之前也碰到过Xcode版本升级后代码覆盖率异常的情况,结合你描述的现象,给你几个具体的排查点:
检查主应用目标的Build Settings配置
虽然Scheme里已经勾选了覆盖率收集,但主应用目标本身的编译设置可能被Xcode升级重置了。找到主应用目标的Build Settings,搜索以下两个选项,确保Debug配置下都设为YES:Generate Test Coverage FilesInstrument Program Flow
彻底清理构建缓存
Xcode升级后残留的缓存很容易导致各种奇怪问题,按以下步骤操作:- 按下
Cmd+Shift+K清理当前构建文件夹 - 按下
Cmd+Option+Shift+K清理Derived Data - 完全退出Xcode,重新打开项目后再运行测试
- 按下
确认测试目标对主应用的引用是否正确
主应用的覆盖率数据需要通过测试目标来收集,检查测试目标的Build Phases:- 确保
Target Dependencies里包含主应用目标 - 确认
Compile Sources里有没有遗漏主应用的关键代码文件(如果是直接引用代码的情况)
另外,如果你用了CocoaPods,检查Podfile里是否正确配置了测试目标对主应用的依赖,避免动态库加载问题导致覆盖率无法追踪
- 确保
修正Scheme的"some targets"配置
当你选择"some targets"时,不能只勾选主应用目标,必须同时选中测试目标和主应用目标——因为测试目标是执行测试的载体,主应用的覆盖率数据需要通过它来收集。同时检查Scheme的Test选项卡下的Info标签,确保测试目标使用的是Debug配置检查主应用的代码优化设置
Xcode 9.3的编译器优化可能影响覆盖率工具的追踪能力,找到主应用目标的Build Settings,搜索Optimization Level,确保Debug配置下设置为None [-O0],如果是更高等级的优化,可能会让覆盖率工具无法识别代码路径尝试新建测试Scheme
旧Scheme在Xcode版本升级后可能存在配置损坏的情况,新建一个专门的测试Scheme:- 点击Xcode顶部的Scheme下拉菜单,选择
New Scheme... - 选择测试目标创建新Scheme
- 在新Scheme的
Test选项卡中重新勾选覆盖率收集选项,指定主应用和测试目标,再运行测试看看效果
- 点击Xcode顶部的Scheme下拉菜单,选择
内容的提问来源于stack exchange,提问作者Kedar
相关产品推荐
相关产品推荐

