2
2

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.

Guardを使ってSwiftGenのビルドの手間を省く

Posted at

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

これでアプリに画像やカラーパターンを追加する度にすぐにソースコードから参照可能になりました。
一度ビルドを走らせたりコマンドを叩く必要がなくなり作業がスムーズになるはずです。

2
2
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
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?