SwiftGenの使い方を調べた
仕事で新しいプロジェクトに導入したく、 SwiftGen の使い方を調べていた
環境
- Xcode 9.2
- SwiftGen 5.3.0
SwiftGen とは
https://github.com/SwiftGen/SwiftGen
プロジェクトのリソース用のSwiftコードを自動的に生成し、タイプセーフな使用を可能にするCLIツール 具体的には以下の5つに対応している
- Asset Catalogs
- Color
- Font
- Storyboard およびそのシーン
- Localizable.strings
モチベーション
iOS開発では、前述のようなリソースにアクセスするには文字列を使う必要があるが、それらをタイプセーフにすることで人的なエラーを排除することが目的
導入方法
1. ディレクトリ作成
生成されたコードを格納するディレクトリを作成する
2. Cocoapods
iOSアプリで使用する場合、 Cocoapodsを使ってインストールが可能。
Podfileの内容は以下のとおり
target 'YoutTargetName' do use_frameworks! pod 'SwiftGen' end
3. swiftgen.yml
プロジェクトルートに swiftgen.yml を作成する 一例として、以下のように書ける
strings: paths: Resources/Base.lproj/Localizable.strings # パスを指定する templateName: structured-swift4 # Swift 4 を使用 output: CodeGenerated/strings.swift # どこに生成したファイルを格納するか xcassets: paths: - path/to/Assets.xcassets templateName: swift4 output: CodeGenerated/assets-images.swift storyboards: paths: - path/to/Storyboards templateName: swift4 output: CodeGenerated/storyboards.swift colors: paths: - path/to/colors.json templateName: swift4 output: CodeGenerated/colors.swift
4. スクリプトの実行
Run Scriptを設定するやり方と、コマンドラインで実行するやり方の2種類が考えられる
Run Script の設定
TARGETS -> プロジェクト名 -> Build Phrases -> New Run Script Phrase を追加して、以下のスクリプトを実行するように設定する
"${PODS_ROOT}/SwiftGen/bin/SwiftGen"
コマンドライン
プロジェクトルートで
$ Pods/SwiftGen/bin/SwiftGen
を実行する
SwiftGen と R.swift の比較
SwiftGen に近いツールでよく知られたものに R.swift がある
機能面はほぼ同等で、以下のような違いがある
SwiftGen | R.swift | |
---|---|---|
導入 | やや面倒 | 簡単 |
制御 | 不要な機能は disable できる | 全部入り |
ビルド | クラスがリソースごとに分かれているため、毎回全ビルドが走ることはない | リソースファイルに増減がある度に R.generated.swift の全ビルドが走るので、大規模プロジェクトでは時間がかかる |
好みの範疇と言えそうだが、 SwiftGen の方が取り回しが良さそうなので、 SwiftGen を使う予定