久々に投稿
最近、XcodeやSwiftを触る機会が多いため、
静的解析としてSwiftLintを導入したときに少しハマったことと解決策をここにメモ。
環境情報
- PC:M2 Macbook
- OSバージョン:MacOS 26
- Xcodeバージョン:Xcode 26
※当時OSとXcodeはベータ版
導入手順
まずはSwiftLint導入でやったことから。
①ターミナルを開き↓のコマンドでSwiftLintをインストール。
brew install swiftlint
②Xcodeプロジェクトの
Build Phases > New Run Script Phasesの+ボタンから、
Run Scriptを新規作成して以下スクリプトを記載。
if which swiftlint >/dev/null; then
swiftlint
else
echo "warning: SwiftLint not installed."
fi
これで一旦完了。
ハマったこと
ビルド実行すると、
warning: SwiftLint not installed.のエラーが。
どうやら導入の②で書いたスクリプトのエラーに流れてるっぽい。
原因
でもbrew install swiftlintは実行したし、
ターミナルでswiftlint --version実行してもちゃんとバージョン情報は出てくる。
そこで②のスクリプトの
which swiftlint
をターミナルで実行したところ、
/opt/homebrew/bin/
と出力された。
調べてみると、Xcodeから実行できるSwiftLintのパスは/usr/local/bin/であり、
/opt/homebrew/bin/だと実行できないためスクリプトの判定がFalseになってた模様。
参考:
https://github.com/realm/SwiftLint/issues/2992
解決策
以下でシンボリックリンクを作成し、/usr/local/bin/でSwiftLintにアクセスできるようにした。
sudo ln -s /opt/homebrew/bin/swiftlint /usr/local/bin/swiftlint
参考:
https://github.com/realm/SwiftLint/issues/2992#issuecomment-1108712744
これによりビルド時にエラーが消え、
空白行が自動的にトルツメされてLintが正常実行されることを確認し完了。
余談
どうやらAppleシリコンチップ製Macで発生する模様。
M1、M2などではbrew install swiftlint実施時に/opt/homebrew/bin/にでSwiftLintが作成されるため、上記解決手順が必要だが、
Intelチップ製だと/usr/local/bin/にSwiftLintが作成されるため発生しないらしい。