はじめに
SwiftGenとR.swiftはiOS開発上でリソース管理を楽にできるライブラリ。というより、ツールと言った方がしっくりくるかと思います。
コードに存在するハードコーディングをなくし、運用保守しやすくなります。
そして今回弊社の新規プロジェクトでどちらか採用しようと考え、いろいろ比較したのをまとめます。
対応しているリソース比較
以下のように対象プロジェクトの欲しい部分は両方ありました。
プロジェクトによってはCoreData扱えるSwiftGenは良いですね。(CoreData扱ったことないので、詳しくわかりませんがw)
SwiftGen | R.swift | |
---|---|---|
image | ◯ | ◯ |
font | ◯ | ◯ |
color | ◯ | ◯ |
localize string | ◯ | ◯ |
storyboard | ◯ | ◯ |
segue | ◯ | ◯ |
nib | ◯ | ◯ |
reusable cell | ◯ | ◯ |
core data | ◯ | × |
plist | ◯ | △(※1) |
file | △(※2) | ◯ |
※ 2019 4月時点
※1. File読み込みまでは簡潔にできる。
※2. jsonとyamlは設定できる。
導入比較
Xcodeの設定上でBuild Phaseに各々のshellを追加し、走らせる点は同様ですね。
両者の導入方法を見てみましょう。
SwiftGen
以下のswiftgen.yml
ファイルでカスタマイズできますので、汎用性が高いですね。
strings:
inputs: Resources/Base.lproj
filter: .+\.strings$
outputs:
- templateName: structured-swift4
output: Generated/strings.swift
xcassets:
inputs:
- Resources/Images.xcassets
- Resources/MoreImages.xcassets
outputs:
- templateName: swift4
output: Generated/assets-images.swift
加えてbrewでも用意されているため、xcodeでいちいちビルドして、リソースファイル生成という手間がありません。
$ brew update
$ brew install swiftgen
R.swift
特に設定ファイルもなく、ライブラリをプロジェクトに導入し、Build Phasesで設定し、ビルドすれば、リソースファイルが生成されます。
一律R
prefixで呼び出せるのは一意性があって、良いですね。
まとめ
-
SwiftGen
- カスタマイズできる
- コマンド実行でき、ビルドの手間が省ける
- CoreDataが扱える
-
R.swift
- 導入が簡単
- カスタマイズできないため、プロジェクト間の揺れはない
- 対応リソース間の呼び出し方に揺れがない
結局今回のプロジェクトでは知見がないSwiftGenの方をお試し採用しました。
今回は導入するにあたっての比較となりましたが、いかがでしょうか?ぜひ皆さんの今後の開発のてだすけになれば、幸いです。