What should be the path of SwiftLint when installed with Swift Package Dependency

Solution 1:

You can't and you can at the same time.

The Swift Package Manager (SPM) "integrated" in Xcode can be used for "embedding code" into your app. Not to embed an executable (like Swiftlint).

So, the solution is do create a "parallel" project with SPM alongside your app.

It's described in the following two links:

It's time to use Swift Package Manager
Using SPM for Xcode build phase tools

So the idea, is to have a Package.swift with Swiftlint, build/run it and it should launch then Swiftlint.
The first time, it will fetch the code, build and then run. So it might take some times.

It's also the solution given by SwiftFormat on their ReadMe.

Applied here, here the file hierarchy. I added a folder & a file.

MyProject:
.
├── BuildTools
│   └── Package.swift
├── MyProject
│   ├── .swiftlint.yml
│   ├── AppDelegate.swift
│   ├── Assets.xcassets
│   │   ├── AppIcon.appiconset
│   │   │   └── Contents.json
│   │   └── Contents.json
│   ├── Base.lproj
│   │   ├── LaunchScreen.storyboard
│   │   └── Main.storyboard
│   ├── Info.plist
│   ├── SceneDelegate.swift
│   └── ViewController.swift
└── MyProject.xcodeproj

In Build Phases script:

cd BuildTools
SDKROOT=(xcrun --sdk macosx --show-sdk-path)
#swift package update #Uncomment this line temporarily to update the version used to the latest matching your BuildTools/Package.swift file
swift run -c release swiftlint "$SRCROOT" --config ../MyProject/.swiftlint.yml --path ../MyProject

And Package.swift being:

// swift-tools-version:5.5
import PackageDescription

let package = Package(
    name: "BuildTools",
    platforms: [.macOS(.v10_11)],
    dependencies: [
         .package(url: "https://github.com/Realm/SwiftLint", from: "0.44.0")
    ],
    targets: [.target(name: "BuildTools", path: "")]
)

Since we are creating another project and not taking advantage of the integrated Xcode integrated solution, solution like using Mint, HomeBrew, etc. might be better. Mint is, for instance, a "full SPM tool". If you have more tools, might be indeed a good solution to concentrate them into one.