Trabajar con Swift Lint

¿Qué es SwiftLint?

SwiftLint es una herramienta de linter y formateo para proyectos Swift. Analiza tu código buscando desviaciones de las Swift Style Guidelines y muestra avisos o errores para mantener un estilo coherente.


Instalación

brew install swiftlint

Para eso hay que tener instalado homebrew, hay que seguir las instrucciones en https://brew.sh/

Una vez hecho esto necesitamos activar un script de compilación. Añadiremos el siguiente script en la sección de XCode Targets > Build Phases, le daremos al botón “+” y añadiremos un “New Run Script phase”. El script es el que tenemos a continuación:

if [[ -z "$CI" ]]; then
    if [[ "$(uname -m)" == arm64 ]]; then
        export PATH="/opt/homebrew/bin:$PATH"
    fi

    # Evita ejecutar en SwiftUI previews
    if [ "$XCODE_RUNNING_FOR_PREVIEWS" != "1" ]; then
        if which swiftlint > /dev/null; then
            CONFIG="${SRCROOT}/.swiftlint.yml"
            swiftlint --fix --config "$CONFIG"   # auto‑fix con tu YAML
            swiftlint --config "$CONFIG"         # lint “normal” con tu YAML
        else
            echo "warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint"
        fi
    fi
else
    echo "Running in Xcode Cloud. Skipping SwiftLint."
fi

Esto hará que se compruebe el código cuando se compile solamente (no con las previews) además intentará arreglar lo que pueda (como los espacios en blanco sobrantes) con el comando –fix y también asegura que encuentra el archivo de configuración…

Hablando de configuración, en la raíz de nuestra carpeta de aplicación (al mismo nivel que el de la carpeta oculta .git) añadiremos un archivo .swiftlint.yml en este podemos añadir algunas opciones extra para que no sea tan restrictivo… por ejemplo

line_length:
    warning: 300

type_body_length:
    warning: 500

file_length:
    warning: 750

function_body_length:
    warning: 750

function_parameter_count:
    warning: 10

disabled_rules:
    - trailing_whitespace
    - large_tuple
    - identifier_name

excluded:
    - .git
    - Pods
    - Carthage

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top