🐥
Swift PackageのUnit Testでリソースファイルを使う
Swift Packageでリソースファイルを使う
自作Swift Package
で、リソースファイル(画像・JSONファイル等)を取り扱う際に調べたことです。
バージョンはswift 5.3以上です。
大きく分けて
- Xcode > Files > Add files to [package name] で追加する方法。ファイルが自動で移動されます。
-
Package.swift
の.target
の中で、resources
で指定します。
Resource
resources
はResource
の配列として定義されます。対象ファイルを***.bundle
にコピーします。
以下の2つが使えます。
-
.process(_ path: String)
: ファイル・ディレクトリをコピーします。ディレクトリであれば、中身をトップレベルに展開します -
.copy(_ path: String)
: ファイル・ディレクトリをコピーします。ディレクトリはそのままの構造でコピーします。
アクセス方法はBundle.module
を使います。
let settingsURL = Bundle.module.url(forResource: "settings", withExtension: "plist")
もし、.copy
を使っていた場合は、ディレクトリ情報も含めてパスを取得する必要があります。
Unit Testのみに使うリソースの場合
自作Swift Package
のUnit Testで、テストのためだけにJSON
ファイルを使いたい場合がありました。
その場合、Xcodeによる自動認識はできず、Package.swift
で直接指定する必要がありました。
調査していく中で、この記事を参考にしました。
// swift-tools-version:5.3
import PackageDescription
targets: [
.target(
name: "Example",
dependencies: [],
resources: [
.process("Resources"),
]),
.testTarget(
name: "ExampleTests",
dependencies: [Example],
resources: [
// Copy Tests/ExampleTests/Resources directories as-is.
// Use to retain directory structure.
// Will be at top level in bundle.
.copy("Resources"),
]),
テストターゲット配下のTests/ExampleTests
の下にResources
を置き、.copy("Resources")
を指定します。
ただこの方法では、Xcode12~13ではエラーが起きました。
bundle format unrecognized, invalid, or unsuitable
ディレクトリ名にResourceはNG
こちらの記事を確認すると、どうやらResources
の名前がよくないようなので、files
に変えたら上手くいきました。
Discussion