SwiftLint を Build Tool Plugin で利用する方法(Xcode26)
背景
これまでMintで導入していたSwiftLintをBuild Tool Pluginへ移行したい。
LicensePlistもBuild Tool Pluginに変えたので、SwiftLintを移行することで自分のプロジェクトからMintを剥がしたい。
環境
- Xcode 26.0.1
- SwiftLint 0.63.2
- ターゲットは iOS
導入方法
- SimplyDanny/SwiftLintPluginsを使う
- Build Tool Pluginではrealm/SwiftLintの方は推奨されない。
https://github.com/SimplyDanny/SwiftLintPlugins
Run Build Tool Plugin に SwiftLintBuildToolPlugin を追加する。
.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 の後に配置している。
これで適当にタブを残したままビルドしてみる。
ビルド後にこれが消えれば修正されている。消えた。
ということでこれまで通り --fix も 利用できる。
Command Pluginもある
Command Pluginから SwiftLint を利用することもできる。この場合はArgumentsに --fix をつけることで自動修正も行える。
プロジェクトを右クリックして SwiftLintCommandPlugin を選択する。
Arguments に --fix を追加する
実行後に自動で修正される。
おわりに
SwiftLintをlinterとして使うのみで --fix は使わず、整形はSwiftFormatを使うほうがいいかもしれない。
SwiftLintもBuild Tool Pluginでこれまでより簡単に導入ができるようになったなぁとは思う。
