最終確認日

SwiftLint を Build Tool Plugin で利用する方法(Xcode26)

背景

これまでMintで導入していたSwiftLintBuild Tool Pluginへ移行したい。

LicensePlistBuild Tool Pluginに変えたので、SwiftLintを移行することで自分のプロジェクトからMintを剥がしたい。

環境

導入方法

https://github.com/SimplyDanny/SwiftLintPlugins

Run Build Tool PluginSwiftLintBuildToolPlugin を追加する。

SwiftLint を Build Tool Plugin で利用する方法(Xcode26)-1770892526269

.swiftlint.yml はこれまで通り利用できる。

この設定だけで、ビルド時にlintが実行される。

自動修正について

これまではMintを利用して、Run Script に次のように書いていた。

export PATH=\"$PATH:/opt/homebrew/bin\"
if which mint >/dev/null; then
	xcrun --sdk macosx mint run swiftlint swiftlint --fix
	xcrun --sdk macosx mint run swiftlint swiftlint
else
	echo \"warning: Mint not installed, download from https://github.com/yonaskolb/Mint\"
fi

xcrun --sdk macosx mint run swiftlint swiftlint --fix を使うことで自動修正していた。

Build Tool Pluginを登録するだけでは --fix は使えない。

Build Tool Pluginに移行後もfixは利用できる?

README をよく読んでみると、Xcode Run Script Build Phaseに書かれていた。

ビルドツールプラグインがプロジェクトのセットアップで機能しない場合や、追加のカスタムセットアップが必要な場合は、SwiftLintを「ビルドフェーズ」の「実行スクリプトフェーズ」として追加できます。これは、プロジェクトのセットアップが--config SwiftLintオプションに依存している場合や、すべてのターゲットを単一のswiftlint呼び出しでまとめてリントする場合に便利です。ファイルの包含と除外は、.swiftlint.yml設定ファイルで構成できます。
これを実行するには、プライマリアプリターゲットの「ビルドフェーズ」にある「実行スクリプトフェーズ」に、Compile Sourcesフェーズの後でカスタムスクリプトを追加します。以下のスクリプトを実装してください。

SwiftLintPlugins の方を使っているので次のように Run Script に書くことで SwiftLint を実行できる。

SWIFT_PACKAGE_DIR="${BUILD_DIR%Build/*}SourcePackages/artifacts"
SWIFTLINT_CMD="$SWIFT_PACKAGE_DIR/swiftlintplugins/SwiftLintBinary/SwiftLintBinary.artifactbundle/macos/swiftlint"

if test -f "$SWIFTLINT_CMD" 2>&1
then
    "$SWIFTLINT_CMD"
else
    echo "warning: `swiftlint` command not found - See https://github.com/realm/SwiftLint#xcode-run-script-build-phase for installation instructions."
fi

ここに --fix をつけてみる。

SWIFT_PACKAGE_DIR="${BUILD_DIR%Build/*}SourcePackages/artifacts"
SWIFTLINT_CMD="$SWIFT_PACKAGE_DIR/swiftlintplugins/SwiftLintBinary/SwiftLintBinary.artifactbundle/macos/swiftlint"

if test -f "$SWIFTLINT_CMD" 2>&1
then
    "$SWIFTLINT_CMD" --fix
else
    echo "warning: `swiftlint` command not found - See https://github.com/realm/SwiftLint#xcode-run-script-build-phase for installation instructions."
fi

Compile Sources の後に配置している。

SwiftLint を Build Tool Plugin で利用する方法(Xcode26)-1770894608151

これで適当にタブを残したままビルドしてみる。

SwiftLint を Build Tool Plugin で利用する方法(Xcode26)-1770894638618

ビルド後にこれが消えれば修正されている。消えた。

ということでこれまで通り --fix利用できる

Debug ビルドでのみ実行されるようにする

リリースビルドなどでコードに変更が起きないように、Debugビルドでのみ実行されるようにしておく。

SWIFT_PACKAGE_DIR="${BUILD_DIR%Build/*}SourcePackages/artifacts"
SWIFTLINT_CMD="$SWIFT_PACKAGE_DIR/swiftlintplugins/SwiftLintBinary/SwiftLintBinary.artifactbundle/macos/swiftlint"

if test -f "$SWIFTLINT_CMD" 2>&1
then
    if [ "${CONFIGURATION}" = "Debug" ]; then
        "$SWIFTLINT_CMD" --fix --config "$SRCROOT/.swiftlint.yml"
    fi
else
    echo "warning: `swiftlint` command not found - See https://github.com/realm/SwiftLint#xcode-run-script-build-phase for installation instructions."
fi

Command Pluginもある

Command Pluginから SwiftLint を利用することもできる。この場合はArgumentsに --fix をつけることで自動修正も行える。

プロジェクトを右クリックして SwiftLintCommandPlugin を選択する。

SwiftLint を Build Tool Plugin で利用する方法(Xcode26)-1770893760105

Arguments に --fix を追加する

SwiftLint を Build Tool Plugin で利用する方法(Xcode26)-1770893736509

実行後に自動で修正される。

おわりに

SwiftLintをlinterとして使うのみで --fix は使わず、整形はSwiftFormatを使うほうがいいかもしれない。

SwiftLintBuild Tool Pluginでこれまでより簡単に導入ができるようになったなぁとは思う。

サイトアイコン
公開日
更新日