SonarCloud - Coverage report not including objective c along with swift language

  • ALM used (Azure DevOps)
  • CI system used (Azure DevOps
  • Languages of the repository (swift and objective c)

Hi,

Welcome to the community!

You haven’t given us a lot to go on here. Can you provide some details about what you’ve tried?

 
Ann

Repository has both swift and objective c files. Able to generate coverage for swift files. whereas not able to find the same for objective c files.

these are the sonar properties which we have in the build template configured:

    extraProperties: |
      sonar.c.file.suffixes=-
      sonar.sourceEncoding=UTF-8
      sonar.cpp.file.suffixes=-
      sonar.objc.file.suffixes=-
      sonar.cfamily.cache.enabled=false
      sonar.cfamily.build-wrapper-output=false
      sonar.cfamily.build-wrapper-output.bypass=true
      sonar.cfamily.build-wrapper-output=build-wrapper.json
      sonar.language=swift
      sonar.test.inclusions=*.swift
      sonar.swift.project= $(Pipeline.Workspace)/s/xxx.xcodeproj
      sonar.swift.workspace= $(Pipeline.Workspace)/s/xxx.xcworkspace
      sonar.exclusions=xxx
      sonar.coverage.exclusions=xxxx
      sonar.coverageReportPaths=sonarqube-generic-coverage.xml

Hi,

I’m confused

It looks like you’re doing your utmost to only analyze your Swift code (BTW some of these parameters won’t have any effect).

So if you’re setting up your project to only include Swift files, how / why do you expect it to show coverage for Objective-C?

 
Ann

Below is the latest properties and getting error on execution at step sonar cloud analyze. Screenshot attached.

extraProperties: |
sonar.c.file.suffixes=-
sonar.sourceEncoding=UTF-8
sonar.cpp.file.suffixes=-
#sonar.objc.file.suffixes=-
sonar.cfamily.cache.enabled=false
sonar.cfamily.build-wrapper-output=false
sonar.cfamily.build-wrapper-output.bypass=true
sonar.cfamily.build-wrapper-output=build-wrapper.json
#sonar.language=swift
sonar.test.inclusions=*.swift
sonar.swift.project= $(Pipeline.Workspace)/s/xxx.xcodeproj
sonar.swift.workspace= $(Pipeline.Workspace)/s/xxx.xcworkspace
sonar.exclusions=xxx
sonar.coverage.exclusions=xxx
sonar.coverageReportPaths=sonarqube-generic-coverage.xml

Hi,

So you’ve commented out the property setting Objective-C file suffixes to - and now analysis is actually trying to analyze them. And since you’re not building with the build wrapper before analysis, you’re getting an error. The docs should help.

 
Ann

a. Used C/C++/Objective-C | SonarCloud Docs
b. Downloaded build wrapper for Mac
c. Added to repository.
d. From that folder, trying to run command
e. It fails stating ''command not found" (Note: facing this error in ado agent and as well as in local Mac machine)

Command used in ado task:
cd build-wrapper-macosx-x86
chmod 777 build-wrapper-macosx-x86
build-wrapper-macosx-x86 --out-dir build_wrapper_output_directory xcodebuild clean build
ls -lrt

command output:
/Users/runner/work/_temp/a3377dae-4ccc-412d-91be-631b6ec8cc4f.sh: line 5: build-wrapper-macosx-x86: command not found
-rwxrwxrwx 1 runner staff 197888 Apr 18 10:46 build-wrapper-macosx-x86
-rw-r–r-- 1 runner staff 29504 Apr 18 10:46 libinterceptor.dylib

Folder:
Screenshot 2022-04-18 at 4.26.55 PM

Hi,

I’m not going to be able to tell you how to install something on an ADO build agent. In any other context, I’d advise you to make sure the command was added to the $PATH variable. That may help here as well.

 
HTH,
Ann

Hi,

I added the $PATH environment variable and was able to execute the command. Post which I am able to view the files with objective c extension (.m) in the sonar cloud portal. However, the test case files of objective c files are not visible in the portal. Also the .m files are with coverage 0%. Let me know if anything missing.

sonar properties:

    extraProperties: |
      sonar.c.file.suffixes=-
      sonar.sourceEncoding=UTF-8
      sonar.cpp.file.suffixes=-
      #sonar.objc.file.suffixes=-
      sonar.cfamily.cache.enabled=false
      #sonar.cfamily.build-wrapper-output=false
      #sonar.cfamily.build-wrapper-output.bypass=true
      sonar.cfamily.build-wrapper-output=build-wrapper.json
      #sonar.language=swift
      sonar.test.inclusions=*.swift
      sonar.swift.project= $(Pipeline.Workspace)/s/xyz.xcodeproj
      sonar.swift.workspace= $(Pipeline.Workspace)/s/xyz.xcworkspace
      sonar.exclusions=xyz
      sonar.coverage.exclusions=xyz
      sonar.coverageReportPaths=sonarqube-generic-coverage.xml
      sonar.cfamily.build-wrapper-output=build_wrapper_output_directory

Hi,

You’re using sonar.test.inclusions=*.swift. That instructs analysis to only consider files in project root with a .swift file extension. Assuming that’s not what you want, you should drop that parameter and simply set sonar.tests to the directory where your test files are located.

 
HTH,
Ann

Removed sonar.test.inclusions=*.swift.
Included property sonar.tests with folders containing unit test.
Post execution, able to view the test files in the Sonarcloud portal.
However, its coverage is 0%. Tried to add a new method into an existing test file, but its coverage is still shown as 0.

Also the xml file which was created and assigned as part of
sonar.coverageReportPaths=sonarqube-generic-coverage.xml
has only .swift files and not objective c files.

Hi,

You’re saying that only .swift files are tested? That shouldn’t really matter.

Can you post your analysis log?

 
Ann