我们有在应用程序中托管的UnitTests。要加载测试资源,我们使用:
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中修复
答案 0 :(得分:1)
这可能是Xcode 10 / Swift 4.2中的一个错误,因为在发行说明中还有另一个与Bundle
相关的错误。你一定要提交雷达以确保问题已知。
来自Xcode 10 beta发行说明
•Foundation API Bundle.init(for:AnyClass)在从继承泛型类的类上使用时始终返回应用程序包,即使该类本身不是通用的。 (40367300)
作为潜在的解决方法,您可以考虑使用测试目标的包标识符。
似乎Bundle
一直是Xcode 10的问题(真的是Swift 4.2存在问题)。
来自Xcode 10.1 beta 2 release notes
•Bundle类的init(for :)初始化程序现在与Swift类一致,包括不在最新的操作系统版本上运行时。 (44489216)
答案 1 :(得分:1)
此问题已在Xcode 10.1中修复,如发行说明中所述。 https://developer.apple.com/documentation/xcode_release_notes/xcode_10_1_release_notes
答案 2 :(得分:0)
经过一些课程重构问题消失了。如果类包含URL或URLRequest属性包不正确,则确实如此。
e.g。在同一个模块中声明了三个类,而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