®️
R.swiftでアクセス修飾子を指定する
R.swiftのREADME.mdを読むと
.target(
name: "Example",
dependencies: [.product(name: "RswiftLibrary", package: "R.swift")],
plugins: [.plugin(name: "RswiftGeneratePublicResources", package: "R.swift")]
)
と書いてありますが、実はR.swiftのプラグインは次の2つがあります[1]。
RswiftGeneratePublicResources
RswiftGenerateInternalResources
名前の通り、 RswiftGeneratePublicResourcesを使うと、R.generated.swiftで指定されるリソースたちが全て public
になります。そのため、リソースの大元も public
である必要があり、例えば class ViewController: UIViewController {}
などのViewControllerやViewなどに public
のアクセス修飾子をつけて回る必要があります。
小規模なアプリであったり、Target内のリソースすべてを他のTargetから使いたい場合は頑張って対応すれば良いですが、多くの場合はTargetを適切に分割し、外部からアクセスしてほしいのは一部のリソースだけになるはずです。
そういった場合は RswiftGenerateInternalResources
のプラグインを利用します。こちらのプラグインでは名前の通り、すべてのリソースを internal
として定義してくれます。多くの場合ではこちらのプラグインを使うと良いでしょう。
-
"Xcode project - SPM" の項では
RswiftGenerateInternalResources
が紹介されている謎 ↩︎
Discussion