目次
SwiftGen とは
SwiftGenは、プロジェクトのリソース(画像、ローカライズされた文字列など)のSwiftコードを自動的に生成して、
https://github.com/SwiftGen/SwiftGen#swiftgen
タイプセーフに使用できるようにするツールです。
AssetCatalog などで作成した色などは通常文字列で指定しますが、その文字列たちをenumの値にマッピングしてくれるOSSです。
そうするとtypoがなくなり、またオートサジェストが効くようになるので、開発の規模が大きくなるほど効率が上がります。
LICENSE はこちらに記載されています。
検証のためのAssetCatalog を準備

SampleBackgroundColor という名前で色の AssetCatalog を作成しました。
これから SwiftGen を使って、SampleBackgroundColor を Swift の定数として利用できるようにしていきます。
SwiftGen をインストール
https://github.com/SwiftGen/SwiftGen#installation に書いてある通りにすれば導入できます。
本稿ではCocoaPods でインストールしました。
設定ファイルを作成
https://github.com/SwiftGen/SwiftGen#configuration-file に書いてある通り、コマンドラインで下記を実行します。
すると、swiftgen.yml というファイルができます。
swiftgen config init
CocoaPods でインストールしたためswiftgen というコマンドがないよと言われました。
なので、下記ようにパス指定して swiftgen コマンドを打ちます。
<YourProjectDirectory>/Pods/SwiftGen/bin/swiftgen config init
設定ファイルを編集
作成された swiftgen.yml を編集していきます。
色のAssetCatalog で利用したいので、swiftgen.yml 中の以下の記述を編集していきます。
# xcassets:
# inputs:
# - Main.xcassets
# - ProFeatures.xcassets
# outputs:
# - templateName: swift5
# params:
# forceProvidesNamespaces: true
# output: XCAssets+Generated.swift
このように編集しました。
xcassets:
inputs:
- <PathToAssetFile>/Assets.xcassets
outputs:
- templateName: swift5
params:
forceProvidesNamespaces: true
output: <PathToOutputDestinationDirectory>/XCAssets+Generated.swift
forceProvidesNamespaces: true
について
少なくともこの例では書いても書かなくても特に動作が変わらないように見えました🤔
swiftgen.yml 中のコメントによると、これを設定しない場合
AssetCatalog のグループなどで Provides Namespace にチェックが入っているもののみが適応される、
とのことだったのですが。
Provides Namespace にチェックを入れなくても生成されていました🤔

設定ファイルを元にSwiftで扱うコードを生成する
以下のコマンドを打ちます。
swiftgen
すると、先の設定ファイルに記述したファイル名でSwiftコードが生成されました。
以下抜粋。
internal enum Asset {
internal enum Color {
internal static let sampleBackgroundColor = ColorAsset(name: "SampleBackgroundColor")
}
}
あとは生成したSwiftファイルをXcodeにインポートすれば、コードなどで使えます。
Xcode 内で使ってみる
インポートしたあと、以下のようにソースコード中で使えます。
let _: UIColor = Asset.Color.sampleBackgroundColor.color
ビルドする度にSwiftコードを生成する
これまでの手順で、手動でSwiftGen が走るようになりました。
でもAssetCatalog に追加する度に手動で swiftgen コマンドを走らせるのはスイッチングコストがかかります。
なので、ビルド時に都度設定を反映させます。
Build Phases から New Run Script Phase で以下のようなシェルを追加すればよいです。
$PODS_ROOT/SwiftGen/bin/swiftgen config run --config $SRCROOT/<YourPath>/swiftgen.yml

最後に
以上です。お疲れ様でした!