😸

Swift Packageでリソースから画像を読み込む

2021/08/12に公開

これはSwift Packageを作成する際にリソースから画像データを読み込む方法です。

Swift Package作成時にリソースを含める

Swift Packageを作成する際にリソースを含めることができます。
https://developer.apple.com/documentation/swift_packages/bundling_resources_with_a_swift_package
方法はこのように説明されています。

To add resources to a Swift package, do any of the following:
Drag them into the Project navigator in Xcode.
From the File menu in Xcode, choose Add Files to [packageName].
Use Finder or the Terminal app.

今回は.xcassetsファイルの中に含まれる画像を読み込んでみます。

Swift Packageのリソースを指定する

通常のアプリの場合.xcassetsファイルの中の画像はBundleを指定しなくても名前だけで読み込むことができます。例えば.xcassetsファイルの中の"gazou"と言う名前の画像を読み込むには下記のコードのようになります。

let image = UIImage(named: "gazou")

しかし、Swift Packageの中ではこの方法は使えません。Bundleを指定する必要があります。

Important
Always use Bundle.module when you access resources. A package shouldn’t make assumptions about the exact location of a resource.

Swift PackageではリソースのBundleはBundle.moduleになるのでこれを指定してアクセスします。

Bundleを指定して画像を読み込む

Bundleを指定して画像を読み込むのは下記のコードで可能です。

iOSの場合は

let image = UIImage(named: "gazou" in: Bundle.module, compatibleWith: nil)

これでUIImageを読み込むことができます。

macOSの場合は

let image = Bundle.module.image(forResource: NSImage.Name("gazou"))

これでNSImageを読み込めます。

Discussion