Как сгенерировать файл .gcov из llvm-cov?

Я создал проект на 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 вручную?

Ответ 1

Согласно Apple, gcov не входит в поддержку поддержки Xcode 7. Gcov был gcc наследием, которое оставалось вокруг до появления замены. По-видимому, они отказались от поддержки формата файла gcov в пользу нового промежуточного формата - profdata. Я самостоятельно занимался исследованиями и не нашел инструментов, которые конвертируют данные profdata в gcov, но есть Slather from Venom. Slather может генерировать отчеты о покрытиях в Gutter JSON, Cobertura XML, HTML и обычном тесте. Он также может обеспечить интеграцию с популярным сервисом, таким как Coveralls. В настоящее время он работает только с gcov, но у них есть проблема открытая и PR-запрос, ожидающий поддержки fordata. Они обычно двигаются быстро, поэтому, скорее всего, они скоро будут объединены в мастера.

Также, если вы решите написать свой собственный инструмент, есть несколько подходов, которые вы можете рассмотреть для просмотра:

  • Преобразование вывода обычного текста из llvm-cov show
  • Преобразование двоичного формата profdata, следуя документации формата
  • Помогите ребятам Slather внедрить кросс-покрытие из своей модели обратно в gcov, как только они сольются с поддержкой profdata​​li >