4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

マルチモジュールでxibやstoryboardでCustom Classの参照するモジュールの誤りを自動チェックする(Swift限定)

Last updated at Posted at 2020-06-05

概要

昔、IBLinterにcontributeしたマルチモジュールでxibやstoryboardでCustom Classの参照するモジュールの誤りを自動チェックしてくれる機能を紹介します

IBLinter とはInterface Builder(以降はIB)に対するLintツールです。

その中の custom_module と言うルールを作りました。
custom_module ルールに対応しているのは、Swiftファイルで定義したCustom Classだけなので注意してください

IBでCustom Classに下記のように【Module】と言う蘭があります。ここは普段Class蘭の方にクラス名を入力すると自動的に
探し出して対象のモジュール名が自動入力されるのですが

ib_module.png

このClassこっちのモジュールに移動しよう!!

とかなった時に単純にClassを移動させた場合、悲劇が起こりやすいです。
xibやstoryboardのxml内に設定されている【Module】蘭の情報は単純にClassを移動させた場合などは自動更新されないので、xibやstoryboardから移動させたClassを参照ができなくなるのですが、
なんとビルドエラーにならずビルドが通ってしまいます!!

そうするとxibやstoryboardから参照できなかった場所はCustom Classではなく単なる標準のClass(UIView)とかになって
【何も表示されない!!】と言う悲劇を招きやすいです。

そこでチェックする機構をIBLinterにcontributeして custom_module ルールを作りました。

設定方法

IBLinterのセットアップ 後、.iblinter.ymlcustom_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)HogeUIComponentsFugaUIComponentsにTarget変更し、FugaUIComponents/Classes/配下に移した場合

xibやstoryboard内でHogeViewをCustom Classで参照している箇所は【Module】蘭をHogeUIComponentsFugaUIComponentsに修正しないとビルドエラーになるようにできるのです!

これで【Module】蘭の誤りをチェックできます

4
1
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
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?