我在
Xcode 7上创建了一个生成代码覆盖率数据的项目.
在其DerivedData文件夹中,我可以运行llvm-cov显示:
/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文件的情况下执行此操作?
解决方法
根据苹果gcov不是Xcode 7覆盖支持的一部分. Gcov是gcc遗产,直到出现更换.显然,他们删除了遗留的gcov文件格式支持,有利于新的中间格式 – profdata.我自己做了研究,没有找到任何将profdata转换为gcov的工具,但是还有
Slather from Venom. Slather可以在Gutter JSON,Cobertura XML,HTML和简单测试中生成覆盖率报告.它还能够提供与服装等流行服务的集成.目前,它也仅与gcov一起工作,但是它们已经打开了问题,PR请求待处理以支持profdata.他们通常会快速移动,所以很快就会被合并成主人.
此外,如果您决定编写自己的工具,您可以考虑多种方法进行审核:
>从llvm-cov显示转换纯文本输出
>按照format documentation转换profdata的二进制格式>帮助Slats家伙将他们的模型的交叉覆盖介绍回gcov,一旦他们将合并在profdata支持