UITest実行時は少し参照方法が違うようです。
Bundleが違うということですね。
Bundle.main.path(forResource: "Info", ofType: "plist")
とにらめっこしてましたが
例として、ファイルツリーのhogeUITest
以下にInfo.plist
を配置し、
XCTestCaseから参照する場合は以下の通りです。
let testBundle = Bundle(for: type(of: self))
if let filePath = testBundle.path(forResource: "Info", ofType: "plist") {
if let dict = NSDictionary(contentsOfFile: filePath) {
if let value = dict["key"] as? String {
print(value)
}
}
}
トラブルシューティング
目的のkeyが見つからないときは、想定しているplistか疑う必要があります。
XCTestCaseから呼ぶ場合はBundle(for: type(of: self))
でOKですが、
テストファイルの中ではなく、通常のアプリ内のクラスに実装すると、当然selfではなくなるので注意です。
困ったときはbundle
をBundle.allBundles
として探してみてください。
[bundle]
でとれるのでまわして探しても見つからないか確認しましょう。
闇実装
.allBundles
というのを見つけました。Test側もそうじゃない方からも探せます。
let bundles: [Bundle] = Bundle.allBundles
for bundle in bundles {
if let filePath = bundle.path(forResource: "Info", ofType: "plist") {
if let dict = NSDictionary(contentsOfFile: filePath) {
if let value = dict["key"] as? String {
print("みつけた!")
}
}
}
}