CocoaPodsでSwiftLintを導入する


はじめに

コードの量が大きくなる前にSwiftLintを導入しようと思ったので、その時の導入の記録

環境

Xcode9.2
Swift4
cocoaPods 1.2.0

podfileの編集

vi podfile

Podfileの中身の例

これはプロジェクトネームがTodolist-firebaseなので5行目がこのようになっていますが、自分の作ったプロジェクトネームをここに入れて下さい

#Uncomment the next line to define a global platform for your project
platform :ios, '10.0'

target 'Todolist-firebase' do
  # Comment the next line if you're not using Swift and don't want to use dynamic frameworks
  use_frameworks!

  pod 'SwiftLint'
end

podでライブラリをインストール

podfileを参照して、その中に入ってるライブラリを含めてxcworkspaceを作ります

$pod install

プロジェクトファイルを開く

cocoaPodsを使う場合は.xcodeprojと間違えないように注意

$open (プロジェクトネーム).xcworkspace
例
$open Todolist-firebase.xcworkspace

Xcode内の設定


cocoaPods導入時の注意点

下の図のようにRunScriptの項目を開き、黒いウィンドウに下記を記入するのですがcocoaPodsの場合は内容が少し違います
公式ドキュメントのXcodeの項目によると

赤枠で囲われているところに着目すると,このように書き換える必要があることがわかります。

if which "${PODS_ROOT}/SwiftLint/swiftlint" >/dev/null; then
${PODS_ROOT}/SwiftLint/swiftlint
else
echo "warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint"
fi

 とりあえず走らせてみる

⌘+Bで実行できる
AppDelegateのファイル内のコメントアウトのところですらエラーが出てくるようになってしまった
いろんなライブラリを入れていたためか、エラーが出てくるように

SwiftLintを走らせないようにするファイルや細かいルールの設定をする

公式ドキュメントより

.swiftLint.ymlファイル内に細かいルールを設定するとエラーを吐かないようになるとのことです

disabled_rules:デフォルトの有効なセットからルールを無効にします。
opt_in_rules:デフォルトのセットからルールを有効にします。
whitelist_rules:ホワイトリストとして動作し、このリストで指定されたルールだけが有効になります。 disabled_rulesまたはopt_in_rulesと一緒に指定することはできません。

とりあえず、今回は一行あたりの文字数制限とpodで入れたライブラリたちが引っかからないようにしたいので .swiftLint.ymlを編集します

$vi .swiftLint.yml

下記の参考文献から例をお借りしました

# 実行から除外するルール
disabled_rules:
# テストコード、Pod等のライブラリは対象外
excluded:
- Pods/
- Podfile
- Podfile.lock

# 1行あたりの文字数制限
line_length: 300

再び実行しました

⌘+Bで実行し赤色のエラーが出ないようになりました。


黄色い警告を見てみると

行末に空白があるという警句や

Trailing Whitespace Violation: Lines should not have trailing whitespace. (trailing_whitespace)

関数の長さが長すぎという警告

Function Body Length Violation: Function body should span 40 lines or less excluding comments and whitespace: currently spans 49 lines (function_body_length)

きれいなSwiftを書くことを意識できますね

参考文献

公式ドキュメント
【SwiftLint】CocoaPodsでSwiftLintを導入する
Swiftの静的解析を行うためにSwiftLintをインストールしてみた
swiftlint 最新版(0.18.1) の設定ファイル(.swiftlint.yml)のサンプル