11

我在 Xcode 7 上创建了一个生成代码覆盖率数据的项目。

在其 DerivedData 文件夹中,我可以运行llvm-cov show

/usr/local/opt/llvm/bin/llvm-cov show -instr-profile Build/Intermediates/CodeCoverage/testetestes/Coverage.profdata Build/Intermediates/CodeCoverage/testetestes/Products/Debug-iphonesimulator/testetestes.framework/testetestes

这将产生如下输出:

/Users/marcelofabri/Desktop/testetestes/testetestes/Example.swift:
   |    1|//
   |    2|//  Example.swift
   |    3|//  testetestes
   |    4|//
   |    5|//  Created by Marcelo Fabri on 09/06/15.
   |    6|//  Copyright © 2015 Marcelo Fabri. All rights reserved.
   |    7|//
   |    8|
   |    9|import UIKit
   |   10|
   |   11|class Example: NSObject {
  1|   12|    func testando() {
  1|   13|        if let url = NSURL(string: "dasdas") {
  1|   14|            print("ae \(url)")
  0|   15|        } else {
  0|   16|            print("oi")
  0|   17|        }
  1|   18|    }
   |   19|}

/Users/marcelofabri/Desktop/testetestes/testetestes/OutraClasse.swift:
   |    1|//
   |    2|//  OutraClasse.swift
   |    3|//  testetestes
   |    4|//
   |    5|//  Created by Marcelo Fabri on 18/06/15.
   |    6|//  Copyright © 2015 Marcelo Fabri. All rights reserved.
   |    7|//
   |    8|
   |    9|import UIKit
   |   10|
   |   11|class OutraClasse: NSObject {
   |   12|
  1|   13|    func outroTestando() {
  1|   14|        if let numero = Int("123") {
  1|   15|            print("ae \(numero)")
  0|   16|        } else {
  0|   17|            print("oi")
  0|   18|        }
  1|   19|    }
   |   20|
   |   21|}

但是,我想获取.gcov文件,因为这是大多数工具使用的。有没有办法在不解析输出和.gcov手动创建文件的情况下做到这一点?

4

1 回答 1

18

根据 Apple 的说法,gcov 不是 Xcode 7 覆盖支持的一部分。Gcov 是 gcc 的遗产,直到出现替代品。显然,他们放弃了对传统 gcov 文件格式的支持,转而支持新的中间格式 - profdata。我自己做了研究,没有找到任何将 profdata 转换回 gcov 的工具,但是有来自 Venom 的 Slather。Slather 能够以 Gutter JSON、Cobertura XML、HTML 和普通测试生成覆盖率报告。它还能够提供与工作服等流行服务的集成。目前它也仅适用于 gcov,但它们已打开问题并且 PR 请求正在等待以支持 profdata。它们通常移动得很快,因此很可能很快就会被合并到 master 中。

此外,如果您决定编写自己的工具,您可以考虑使用多种方法进行审查:

  • 从 llvm-cov show 转换纯文本输出
  • 通过以下格式文档转换 profdata 的二进制格式
  • 帮助 Slather 人将他们模型中的交叉转换引入 gcov,一旦他们将合并到 profdata 支持中
于 2015-07-02T05:33:36.260 回答