/sonar-swift

Open source Swift plugin for SonarQube

Primary LanguageJava

Branch Status
master Build Status
develop Build Status

SonarQube Plugin for Swift

This is an open source initiative for Apple Swift language support in SonarQube. The structure of the plugin is based on the sonar-objective-c plugin.

Example iOS SonarQube dashboard

In SonarQube under Quality Profiles the used Linter can be specified by selecting either the SwiftLint Profile or the Tailor Profile as Default profile for Swift Projects:

Set preferred profile (SwiftLint or Tailor) to default in SonarQube.

Features

Feature Supported MacOS Unix
Complexity YES Uses Lizard Uses Lizard
Design NO
Documentation YES
Duplications YES
Issues YES Uses SwiftLint and/or Tailor Uses Tailor
Size YES
Tests YES Uses xcodebuild + xcpretty xcpretty Not Supported
Code coverage YES Uses slather Not Supported

Download

Checkout the Releases page.

Launching an analysis

If you use Fastlane, please read our Fastlane integration doc. Otherwise, run the run-sonar-swift.sh script from your Xcode project root folder

Release history

0.3.5

  • SwiftLint 0.21.0 (95 rules now)
  • SonarQube 6.5 support
  • Fixes properties with space by Branlute. See PR 84
  • Finds project version automatically with CFBundleShortVersionString by Branlute. See PR 87
  • Fixes coverage with mixed objc swift project by Branlute. See PR 88
  • Quotes support for multi-word project names by PetrJandak. See PR 97

0.3.4

  • SwiftLint 0.18.1 (add 8 more rules)
  • Fix README headers
  • Update README URLs to SonarQube

0.3.3

  • Updated run-sonar-swift.sh to support -usesonarscanner (for sonar-scanner instead of sonar-runner).

0.3.2

0.3.1

  • Now falls back to sonar-scanner if sonar-runner is not installed (thanks to MaikoHermans. See PR 59)
  • Ability to set sonar.swift.appName. Useful when basename is different from targeted scheme, or when slather fails with 'No product binary found' (thanks to MaikoHermans. See PR 58)
  • Added a second linter: Tailor. Enables analysis of Swift code on linux. (thanks to tzwickl for the hard work. See PR 51)

0.3.0

  • SonarQube 6 support. Important : will work with SonarQube 5.x and above only. Will not work anymore with SonarQube 4.5.x anymore.
  • SwiftLint 0.13.1 support (49 rules now).
  • Desactivation of unit tests and coverage is now allowed. Use run-sonar-swift.sh -nounittests to do it.

0.2.4

  • Analysis does not fail anymore when an unkwown issue is reported by SwiftLint. See issue 35
  • Fastlane documentation (thanks to viteinfinite). See PR 33
  • Fixed Fastlane JUnit report support
  • SwiftLint 0.11.1 support
  • Better return code suppot for run-sonar-swift.sh

0.2.3

  • Fixed Lizard Sensor wrong file path

0.2.2

  • Added support for .xcodeproj only projects (thanks to delannoyk)
  • Fix for Lizard Sensor to find indexed files (thanks to gretzki)
  • Got rid of confusion with commercial plugin in the update center

0.2.1

  • SwiftLint 0.8 support (new rules added).

0.2.0

0.1.2

  • SwiftLint 0.5.1 support (new rules added).
  • Added sonar.swift.simulator key in sonar-project.properties to select destination simulator for running tests
  • SwiftLint scans source directories only

0.1.1

  • SwiftLint 0.4.0 support (new rules added).

0.1.0

  • Initial release.

Prerequisites

Installation of xcpretty with JUnit reports fix

At the time, xcpretty needs to be fixed to work with SonarQube.

To install the fixed version, follow those steps :

git clone https://github.com/Backelite/xcpretty.git
cd xcpretty
git checkout fix/duration_of_failed_tests_workaround
gem build xcpretty.gemspec
sudo gem install --both xcpretty-0.2.2.gem

Installation (once for all your Swift projects)

  • Download the plugin binary into the $SONARQUBE_HOME/extensions/plugins directory
  • Copy run-sonar-swift.sh somewhere in your PATH
  • Restart the SonarQube server.

Configuration (once per project)

  • Copy sonar-project.properties in your Xcode project root folder (along your .xcodeproj file)
  • Edit the sonar-project.properties file to match your Xcode iOS/MacOS project

The good news is that you don't have to modify your Xcode project to enable SonarQube!. Ok, there might be one needed modification if you don't have a specific scheme for your test target, but that's all.

Update (once per plugin update)

  • Install the lastest plugin version
  • Copy run-sonar-swift.sh somewhere in your PATH

If you still have run-sonar-swift.sh file in each of your project (not recommended), you will need to update all those files.

Contributing

Feel free to contribute to this plugin by issuing pull requests to this repository.

When creating a pull request: always create it for the develop branch.

License

SonarQube Plugin for Swift is released under the GNU LGPL 3 license.