Skip to content
Code metric analyzer for Swift projects.
Python Swift Shell
Branch: master
Clone or download
Latest commit f3a9ce3 Oct 17, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github Added supported funding platform Jun 20, 2019
.coveragerc Improved code coverage reports Nov 4, 2018
.gitignore Fix for integration test Oct 2, 2018
.travis.yml Fix existing issue with codecov ( z4r/python-coveralls#66 ) Feb 10, 2019 Updating changelog Oct 17, 2019
LICENSE Initial commit Jun 1, 2018 Improving folder structure and defining command line executable Sep 10, 2018 Issue#7 Added documentation for path override Mar 13, 2019 Improved unit tests scan and added test coverage Nov 4, 2018
requirements.txt Introducing functional python Nov 4, 2018 Improving folder structure and defining command line executable Sep 10, 2018

FOSSA Status License Build Status codecov Codacy Badge PyPI


Code metrics analyzer for Swift projects.

Example code distribution Example deviation main sequence
Example internal distribution


The goal of this software is to provide an insight of the architectural state of a software written in Swift that consists in several modules. Inspired by the book of Robert C. Martin, Clean Architecture, the software will scan the project to identify the different components in order to assess several common code metrics in the software industry:

  • the overall number of concrete classes and interfaces
  • the instability and abstractness of the framework
  • the distance from the main sequence
  • LOC (Lines Of Code)
  • NOC (Numbers Of Comments)
  • POC (Percentage Of Comments)
  • NOM (Number of Methods)
  • Number of concretes (Number of classes and structs)
  • NOT (Number Of Tests)
  • NOI (Number Of Imports)
  • Frameworks dependency graph (number of internal and external dependencies)


This is a Python 3 script that depends on matplotlib, adjustText, pyfunctional and pygraphviz.

This latest package depends on the Graphviz binary that must be installed.


The package is available on pip with pip3 install swift-code-metrics.

The syntax is:

swift-code-metrics --source <path-to-swift-project> --artifacts <output-directory> --exclude <excluded-folders> --tests-paths <test-paths> --generate-graphs

  • --source is the path to the folder that contains the main Xcode project or Workspace
  • --artifacts path to the folder that will contain the generated output.json report
  • --excluded (optional) space separated list of path substrings to exclude from analysis (e.g. Tests will ignore all files/folders that contain Tests)
  • --tests-paths (default: Test Tests) space separated list of path substrings matching test classes
  • --generate-graphs (optional) if passed, it will generate the graphs related to the analysis and save them in the artifacts folder


Please follow the guide with a practical example to get started.

Current limitations

  • This tool is designed for medium/large codebases composed by different frameworks. The script will scan the directory and it will identify the frameworks by the name of the 'root' folder, so it's strictly dependent on the file hierarchy (unless a project path override file is specified)

  • Libraries built with spm are not supported.

  • The framework name is inferred using the directory structure. If the file is in the root dir, the default_framework_name will be used. No inspection of the xcodeproj will be made.

  • The list of methods currently doesn't support computed vars

  • Inline comments in code (such as struct Data: {} //dummy data) are currently not supported

  • Only XCTest test frameworks are currently supported


  • Code improvements
  • Other (open to suggestions)


Mattia Campolese

You can’t perform that action at this time.