概要
昔、IBLinterにcontributeしたマルチモジュールでxibやstoryboardでCustom Classの参照するモジュールの誤りを自動チェックしてくれる機能を紹介します
IBLinter とはInterface Builder(以降はIB)に対するLintツールです。
その中の custom_module
と言うルールを作りました。
custom_module
ルールに対応しているのは、Swiftファイルで定義したCustom Classだけなので注意してください
IBでCustom Classに下記のように【Module】と言う蘭があります。ここは普段Class蘭の方にクラス名を入力すると自動的に
探し出して対象のモジュール名が自動入力されるのですが
このClassこっちのモジュールに移動しよう!!
とかなった時に単純にClassを移動させた場合、悲劇が起こりやすいです。
xibやstoryboardのxml内に設定されている【Module】蘭の情報は単純にClassを移動させた場合などは自動更新されないので、xibやstoryboardから移動させたClassを参照ができなくなるのですが、
なんとビルドエラーにならずビルドが通ってしまいます!!
そうするとxibやstoryboardから参照できなかった場所はCustom Classではなく単なる標準のClass(UIView)とかになって
【何も表示されない!!】と言う悲劇を招きやすいです。
そこでチェックする機構をIBLinterにcontributeして custom_module
ルールを作りました。
設定方法
IBLinterのセットアップ 後、.iblinter.yml
のcustom_module_rule
に下記のように自分の環境に合わせてに設定することでルールに従っていない場合はビルドエラーとすることができます。IBLinterのルールの適用外としたいフォルダはexcluded
を設定すれば良いです
excluded: #IBLinterのルールの適用外としたいフォルダ(再帰的に配下のフォルダは全て対象外になります)、ここの指定以外のxibやstoryboardは全て対象になります
- App/Classes/Config/Generated
custom_module_rule:
- module: HogeUIComponents #【Module】蘭から参照されるモジュール名
included: # Custom Classの定義されたSwiftファイルがあるフォルダ(再帰的に配下のフォルダは全て対象になります)
- HogeUIComponents/Classes
- HogeUIComponents/Other
excluded: # ↑のincluded内から対象外としたいフォルダ(再帰的に配下のフォルダは全て対象外になります)
- HogeUIComponents/Classes/Config/Generated
- HogeUIComponents/Classes/Config/Another
- module: FugaUIComponents #複数登録可能
included:
- FugaUIComponents/Classes
excluded:
- FugaUIComponents/Classes/Config/Generated
上記のような設定をすれば
例えばHogeUIComponents
と言う名前のモジュールに
HogeUIComponents/Classes/AAA.swift
class HogeView {
...
}
と言うクラスを定義しており
App/Classes/FugaView.xib
でFugaView.xib
内でHogeView
をCustom Classで指定しているが、【Module】蘭がHogeUIComponents
じゃないとビルドエラーとしてくれます。
なのでAAA.swift(HogeView)
をHogeUIComponents
→FugaUIComponents
にTarget変更し、FugaUIComponents/Classes/
配下に移した場合
xibやstoryboard内でHogeView
をCustom Classで参照している箇所は【Module】蘭をHogeUIComponents
→FugaUIComponents
に修正しないとビルドエラーになるようにできるのです!
これで【Module】蘭の誤りをチェックできます