SwiftGen、便利ですよね。
Guardを使って更に便利にしましょう。
前提
SwiftGenはアプリで扱う画像やストーリーボードなどのリソースをソースコードで安全に参照できるようにするライブラリです。
Guardはファイルの変更を監視して特定のタスクを実行するためのツールです。
それぞれの詳しい説明はここでは省きます。
使ってるもののバージョンは以下の通りです。
- XCode(12.2)
- Cocoapods(1.10.1)
- SwiftGen(6.4.0)
- Guard(2.16.2)
SwiftGenはビルドしないと更新されない?
SwiftGenのドキュメントで書かれているようにBuildPhasesにスクリプトを追加すると、ビルドの度にSwiftGenがコードを自動生成してくれるようになります。
ただしこれはビルドしないと実行されないため、変更したリソースをアプリのソースコードから参照するには一度ビルドを通す(あるいは手動でコンソールから./switgenを実行する)必要があります。
ここにGuardを導入し、リソースが変更されるとSwitGenが自動で更新を行う仕組みを作りましょう。
Guardの導入
以下のようなswitgen.ymlが設定されているプロジェクトにGuardを導入してみましょう。
xcassets:
inputs: SampleApp/Assets.xcassets
outputs:
templateName: swift5
output: SampleApp/Assets.swift
インストール
以下のコマンドを叩いてGuardをインストールします。
$ gem install guard # Guardをインストール
$ gem install guard-shell # Guard::Shellをインストール
Guardfileの設定
アプリのプロジェクトフォルダに移動し、Guardfileを作成します。
$ cd path/to/SampleApp # プロジェクトフォルダに移動
$ vi Guardfile # Guardfileを作成
Guardfileの内容は以下の通りです。
この例ではAssets.xcassetsを監視対象としています。プロジェクトに応じて適宜監視対象を書き換えてください。
guard :shell do
watch(%r{SampleApp/Assets.xcassets/(.*)}) { `./Pods/SwiftGen/bin/swiftgen` }
end
自動更新
以下のコマンドでGuardによる監視が始まります。
ここまでの設定が上手く出来ていればAssets.xcassetsが変更される度に自動でAssets.swiftが更新され、即座にアプリからリソースが利用可能になるはずです。
$ guard
これでアプリに画像やカラーパターンを追加する度にすぐにソースコードから参照可能になりました。
一度ビルドを走らせたりコマンドを叩く必要がなくなり作業がスムーズになるはずです。