'Enable SwiftLint only for the new files

I have a pretty huge iOS(legacy) project in which I want to add SwiftLint. All the rules I wish to enforce, I would enforce only on new created files. In that way I do not have to go back and fix all the problems that would come up because the rules have not been followed in the past (as there was no SwiftLint in use). I am not sure how to achieve this?



Solution 1:[1]

you can run a script like this

    # Run SwiftLint
    START_DATE=$(date +"%s")
    
    SWIFT_LINT=/usr/local/bin/swiftlint
    
    # Run SwiftLint for given filename
    run_swiftlint() {
        local filename="${1}"
        if [[ "${filename##*.}" == "swift" ]]; then
            #${SWIFT_LINT} autocorrect --path "${filename}"
            ${SWIFT_LINT} lint --path "${filename}"
        fi
    }

    if [[ -e "${SWIFT_LINT}" ]]; then
        echo "SwiftLint version: $(${SWIFT_LINT} version)"
        # Run for both staged and unstaged files
        git diff --name-only | while read filename; do run_swiftlint                 "${filename}"; done
        git diff --cached --name-only | while read filename; do                 run_swiftlint "${filename}"; done
    else
        echo "${SWIFT_LINT} is not installed."
        exit 0
    fi

    END_DATE=$(date +"%s")

    DIFF=$(($END_DATE - $START_DATE))
    echo "SwiftLint took $(($DIFF / 60)) minutes and $(($DIFF % 60)) seconds to complete."

Simply add a build phase run script to Xcode with the following

"${SRCROOT}/Scripts/swiftlint.sh"

It comes from here https://github.com/realm/SwiftLint/issues/413#issuecomment-184077062

It doesn't work on the M1 chip because you need to say something like this

if test -d "/opt/homebrew/bin/"; then
  PATH="/opt/homebrew/bin/:${PATH}"
fi

export PATH

if which swiftlint >/dev/null; then
  swiftlint
else
  echo "warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint"
fine

based on this blog https://www.anotheriosdevblog.com/installing-swiftlint-on-a-m1/

Solution 2:[2]

If you are using feature branches you can run it as follows:

swiftlint --config PATH/TO/CONFIG/.swiftlint.yml $(git diff develop --name-only | grep .swift)

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 user1898829
Solution 2 Cyril Cermak