LoginSignup
6
4

More than 5 years have passed since last update.

XCodeプロジェクトのLintツール xcprojectlint

Last updated at Posted at 2018-06-08

はじめに

XCodeで開発をしていると以下のような課題が出てくると思います。

  • XCodeで見えているディレクトリ構造と、ファイルシステム上のディレクトリ構造が違う
  • ディレクトリ、ファイルがアルファベット順になっていないので、ファイルが探しづらい
  • ファイルの参照リンクが切れている

こうした課題を解決するのに便利なツールがxcprojectlintです。
https://github.com/americanexpress/xcprojectlint

インストール

プロジェクトをクローンしてビルドします。

$ git clone https://github.com/americanexpress/xcprojectlint.git
$ cd xcprojectlint
$ swift package update
$ make build

ビルドが完了すると、./.build/x86_64-apple-macosx10.10/debug/xcprojectlintというパスにバイナリが作成されます。

Lintを実行する

以下のコマンドで、xcprojectlintに定義されている全てのルールについてチェックをすることができます。

$ ./.build/x86_64-apple-macosx10.10/debug/xcprojectlint \
    --report error \
    --validations all \
    --project /path/to/ExampleProject/Example.xcodeproj

特定のルールのみ有効にしたい場合は、--validationsにスペース区切りでルール名を指定します。

$ ./.build/x86_64-apple-macosx10.10/debug/xcprojectlint \
    --report error \
    --validations disk-layout-matches-project items-in-alpha-order \
    --project /path/to/ExampleProject/Example.xcodeproj

ルール一覧

本記事執筆時点では以下の6つのルールが用意されています。

  • build-settings-externalized: Build Settingsがproject.pbxprojではなく個別の*.xcconfigで管理されているかをチェックする
  • disk-layout-matches-project: ディレクトリ・ファイルのレイアウト(パス)について、XCodeで見えているレイアウト(パス)とファイルシステム上のレイアウト(パス)が一致しているかをチェックする
  • files-exist-on-disk: XCode上のファイルが参照しているパスにファイルが存在するか(リンクが切れていないかどうか)をチェックする
  • empty-groups: ファイルがない空のディレクトリ(グループ)があるかどうかチェックする
  • items-in-alpha-order: ディレクトリ・ファイルがアルファベット順に並んでいるかをチェックする
  • all: 全てのルールをチェックする

XCodeでアプリのビルド時にxcprojectlintを実行する

Swiftlintなどの他のLintツールと同様に、ビルド時にxcprojectlintを実行できると便利です。

まず、xcprojectlintバイナリファイルをXCodeプロジェクトにコピーしておきます。

$ copy ./.build/x86_64-apple-macosx10.10/debug/xcprojectlint /path/to/ExampleProject

メインターゲットのBuild Phasesに、xcprojectlintを実行するRun Scriptを追加します。

image.png

if which "${PROJECT_DIR}/xcprojectlint" >/dev/null; then
  "${PROJECT_DIR}/xcprojectlint" --report error --validations build-settings-externalized --project ${PROJECT_DIR}/Example.xcodeproj
else
  echo "warning: ${PROJECT_DIR}"
  echo "warning: xcprojectlint not installed"
fi

これで、アプリのビルド時にxcprojectlintによるチェックが行われます。

error.png

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4