XcodeGen と Mint を使った SwiftLint の導入方法

XcodeGen を使って SwiftLint を導入する際の手順をこの記事で紹介する。

導入手順としては、大きく分けて以下の手順がある。

  1. Mintfile に SwiftLint を追加する
  2. .swiftlint.yml ファイルをプロジェクトに追加する
  3. ビルド時スクリプトで SwiftLint を実行するように XcodeGen の設定を変更する

それぞれ詳しく見ていこう。

Mintfile に SwiftLint を追加する

SwiftLint は Homebrew や CocoaPods でインストールが可能だが、今回は mint 経由でローカルの開発環境にインストールする。

リポジトリ にあるように $ mint install realm/SwiftLint でインストール可能。
Mintfile をプロジェクトに入れて Git 管理している場合もあると思うので、その場合は以下のように記述する。

バージョンを固定しているが、バーコードは Releases を参照。

これで $ mint bootstrap を叩けばインストールされる。

.swiftlint.yml に設定を記述して追加する

.swiftlint.yml ファイルをプロジェクトのルートディレクトリに作成、設定を記載して追加する。
(ルートディレクトリ = Mintfile が置いてあるディレクトリ)

ルールに関してはここでは記述しないので、リポジトリを参照。

ビルド時に SwiftLint を実行するように XcodeGen を設定する

次に、ビルド時に SwiftLint による静的解析が実行されるようにする。
XcodeGen の yml によって prebuildScripts で設定を行う。

以下のような project.yml があるとする。

name: HogeApp
options: ...
configs: ...
settings: ...
targets:
  HogeApp:
    dependencies: ...
    info: ...
    platform: iOS
    setting: ...
    ...

この HogeApp ターゲットに対して以下のような prebuildScripts を設定する。

targets:
  HogeApp:
    prebuildScripts:
      - name: Run SwiftLint
        script: |
          if mint list | grep -q 'SwiftLint'; then
            mint run swiftlint
          else
            echo "warning: SwiftLint not installed."
          fi          

これでビルド時に SwiftLint が実行されるようになった。

オプショナル: コマンドから実行しやすいように Makefile に追加する

ここまでで SwiftLint の導入は完了したのだが、時々、ターミナルから静的解析をかけて確認したい場合がある。
その時のために今回は Makefile に追加する。

Makefile に以下を追加する。
Makefile のインデントはタブ文字である必要があるの注意。

.PHONY: lint
lint:
	@if !(type "mint" > /dev/null 2>&1); then \
		echo "Mint not installed, see https://github.com/yonaskolb/Mint"; \
		exit 1; \
	fi
	mint run swiftlint --quiet

これで実行したいたときは Makefile があるディレクトリで
$ make lint
と叩けば実行される。

参考文献

  1. GitHub, Mint
  2. GitHub, SwiftLint
Built with Hugo
テーマ StackJimmy によって設計されています。