🛠️

SwiftLintをSPMで入れて実行する

2022/05/26に公開
1
  1. Package Dependencies に https://github.com/realm/SwiftLint.git を追加する
  2. プロジェクトのターゲットの Build Phases を開いて、Run Scriptを追加する
  3. Based on dependenciy analysis にチェックを入れる
  4. 下記のスクリプトを記入
    # build swiftlint
    xcrun --sdk macosx swift build -c release \
    --package-path ${BUILD_DIR%Build/*}SourcePackages/checkouts/SwiftLint \
    --product swiftlint
    
    # run swiftlint
    if [ ${XCODE_BUILD_WARNING_AS_ERROR} = "YES" ]; then
      ${BUILD_DIR%Build/*}SourcePackages/checkouts/SwiftLint/.build/release/swiftlint lint --strict
    else
      ${BUILD_DIR%Build/*}SourcePackages/checkouts/SwiftLint/.build/release/swiftlint lint
    fi
    
  5. .swiftlint.yml.xcodeproj.xcworkspace と同じ階層に置く

一度目の実行時はswiftlintをビルドするので時間がかかりますが、以降は速いです。

Discussion

冨永拓弥冨永拓弥
xcrun --sdk macosx swift build -c release \
--package-path ${BUILD_DIR%Build/*}SourcePackages/checkouts/SwiftLint \
--product swiftlint

上記のコードの場合、常にビルドしてしまっているので、2回目以降のビルドでもビルドで2~3秒ほどスクリプトに時間がかかってしまいます。

以下のように記述して、一度ビルド後は実行ファイルから実行するように記述すると0.3秒ほどでスクリプトが完了するのですが、いかがでしょうか。🙇‍♂️

# パッケージのパス
PACKAGE_PATH=${BUILD_DIR%Build/*}"SourcePackages/checkouts/SwiftLint"
# 実行ファイルのパス
SWIFTLINT_PATH=$PACKAGE_PATH"/.build/release/swiftlint"

# 実行ファイルがない場合はビルドし、作成
if [ ! -e ${SWIFTLINT_PATH} ];then
    xcrun --sdk macosx swift build -c release \
    --package-path $PACKAGE_PATH \
    --product swiftlint
fi

# 実行ファイルから実行
if [ ${XCODE_BUILD_WARNING_AS_ERROR} = "YES" ]; then
    $SWIFTLINT_PATH lint --strict
else
    $SWIFTLINT_PATH lint
fi