1

我们有托管在应用程序中的单元测试。要加载我们使用的测试资源: Bundle(for: TestClass.self).path(forResource: "some-file", ofType: "json").

在 Xcode 9 中,它返回如下内容:/var/folders/4k/dzpnw8352jn_fl5hcc76pjs8k9qytq/T/com.apple.dt.XCTest/IDETestRunSession-707F04EA-2C21-4BA4-8730-00B0EC0F708F/UnitTests-2C97055A-9154-4521-9D12-7CF32FC38793/Session-UnitTests-2018-06-08_141829-RGxhj2.log

但在 Xcode 10 Bundle(for: TestClass.self) 中返回应用程序包路径/Users/user/Library/Developer/CoreSimulator/Devices/118AACB9-486C-4E3B-94EA-257C3F082AE1/data/Containers/Bundle/Application/4234B280-E49C-4044-BAF4-CBFFEA8AFDB4/App.app

由于这些文件包含在单元测试目标中,因此无法再找到它们

更新:

在 Xcode 10.1 中修复

4

3 回答 3

1

这可能是 Xcode 10/Swift 4.2 中的一个错误,因为Bundle在发行说明中还有一个与此相关的错误。您绝对应该提交一份雷达文件以确保该问题是已知的。

来自 Xcode 10 beta 发行说明

• Foundation API Bundle.init(for: AnyClass) 在用于从泛型类继承的类时始终返回应用程序包,即使该类本身不是泛型。(40367300)

作为一种潜在的解决方法,您可以考虑使用测试目标的包标识符。

要查找测试目标的包标识符,请查看此处: 在此处输入图像描述

更新

Xcode 10似乎Bundle一直存在问题(实际上是 Swift 4.2 出现了问题)。

来自 Xcode 10.1 beta 2发行说明

• Bundle 类的 init(for:) 初始化程序现在可以与 Swift 类一致地工作,包括不在最新操作系统版本上运行时。(44489216)

于 2018-06-10T15:13:20.137 回答
1

如发行说明已解决的问题https://developer.apple.com/documentation/xcode_release_notes/xcode_10_1_release_notes中所述,此问题现已在 Xcode 10.1 中得到修复

于 2018-10-31T19:20:27.340 回答
0

在一些类重构问题消失之后。如果类包含 URL 或 URLRequest 属性包不正确。

例如在同一个模块中声明的三个类,并且 bundle 是不同的:

class WithRequest {
    var request: URLRequest?
}

class WithURL {
    var url: URL?
}

class WithString {
    var string: String?
}

print(Bundle(for: WithRequest.self)) //Incorrect App Bundle
print(Bundle(for: WithURL.self)) //Incorrect App Bundle
print(Bundle(for: WithString.self)) //Correct bundle
于 2018-06-11T08:11:41.680 回答