はじめに
SwiftGenはR.swift同様にAssetやImage、Storyboardへのアクセスを、安全にしてくれるStructやenumなどの自動生成ツールです。 例えば、UIImageのインスタンスの生成はSwiftGenを使用すると下記のようになり、タイポによる不具合を防ぐことができます。
// 前 let image = UIImage(named: "sample") // 後 let image = Asset.sample.image
SwiftGenの設定方法等は他にも記事が上がっていますので、そちらをご参照ください。 本記事ではSwiftGenによって自動生成されるstructやenumをpublicアクセスにする方法を記載します。
環境設定
以下の環境を使用しています。
- Xcode10.2.1
- Swift 5.0.1
なぜpublicにしたいか
SwiftGenによって自動生成されるstructやenumのデフォルトのアクセス修飾子はinternal
になっています。
この場合、マルチモジュール構成で画像やColor AssetをUIモジュールに分割していたり、Resourceと判断してそれ用のモジュールに分割していた場合、 そのモジュール外からでは自動生成されたstructやenumにアクセスできません。そこでアクセス修飾子をpublicにしたいというモチベーションが生まれます。
方法
SwiftGenを使用する際には各種設定をswiftgen.yml
ファイルに記載しますが、こちらに修正を加えることでpublic accessに変更できます。
xcassets: inputs: UIComponent/Assets.xcassets outputs: templateName: swift4 output: UIComponent/Generated/DefaultAsset.swift params: # ここで設定を行っています publicAccess: true
上記の設定内の params
-> publicAccess: true
で設定を行っています。これでアクセス修飾子を変更できます。
まとめ
SwiftGenを使用した際のアクセス修飾子の変更方法を記載しました。
publicAccess: true
にすれば良いことはわかりましたが、 params
で設定するという情報になかなかたどり付けなかったため、まとめることにしました。
publicAccess
以外にもparams
を使用することでtemplate
の設定を上書きし、自動生成されるコードの内容を変えられるようです。ぜひ試してみてください。
参考
- GitHub - SwiftGen
- GitHubのSwiftGen Repositoryです。
- SwiftGen - Documentation - ConfigFile
- SwiftGenの設定を記載する
swiftgen.yml
に関する公式Documentです。
- SwiftGenの設定を記載する
- SwiftGen - Documentation - templates
- SwiftGenの各TemplateのDocumentがまとまっています。
Customization
にパラメータが記載してあります。全てかはわかりませんが、記載のパラメータはparams
に設定することで変更できそうです。
- SwiftGenの各TemplateのDocumentがまとまっています。