使用 Swift 时未加载 KIF 测试包 XCTest.dylib
KIF test bundle XCTest.dylib not loading when using Swift
我正在尝试将 Swift 中的新测试添加到目前用 Objective C 编写的现有 KIF 测试包中。
设置:
- Xcode6.4
- 椰足类 0.37.2
- Podfile 使用最新版本的 KIF
我已经设置了 Swift 桥接头,导入了 KIF 和我项目的其他相关部分,以便 Swift 可以使用它们。
我已经将事情简化为一个简单的测试用例,在这个阶段甚至不使用 KIF:
import Foundation
class MyFirstTest : KIFTestCase {
func testOne() {
NSLog("Done")
}
}
测试包构建良好,但是当我 运行 我得到:
2015-07-03 14:52:32.620 MyApp[1104:204793] Error loading /private/var/mobile/Containers/Data/Application/F20A664E-BD2D-4299-A93F-4C6758CBAF34/tmp/MyApp_UI_Tests.xctest/MyApp_UI_Tests: dlopen(/private/var/mobile/Containers/Data/Application/F20A664E-BD2D-4299-A93F-4C6758CBAF34/tmp/MyApp_UI_Tests.xctest/MyApp_UI_Tests, 262): Library not loaded: @rpath/libswiftXCTest.dylib
Referenced from: /private/var/mobile/Containers/Data/Application/F20A664E-BD2D-4299-A93F-4C6758CBAF34/tmp/MyApp_UI_Tests.xctest/MyApp_UI_Tests
Reason: image not found
DevToolsBundleInjection: Error loading bundle '/private/var/mobile/Containers/Data/Application/F20A664E-BD2D-4299-A93F-4C6758CBAF34/tmp/MyApp_UI_Tests.xctest'
我已经尝试了 here 的建议,包括:
- 将应用程序和测试包目标的运行路径搜索路径设置为@executable_path/Frameworks
- 设置 "Embedded Content Contains Swift Code" 为 YES
我也试过:
- 清理并重建 project/workspace
的完整椰子足类动物
- 删除所有 DerivedData 并运行清理构建
我还看到这可能与代码签名身份有关的建议,但捆绑包无法加载到具有开发身份的模拟器以及真实设备上。
如果我恢复到仅使用 Objective C 测试,一切正常。
我错过了什么?
终于想通了。对我来说,解决方案是确保测试包目标的运行路径设置包括 @loader_path/Frameworks 以及 @executable_path/Frameworks.
我一添加,一切就都加载好了。
我正在尝试将 Swift 中的新测试添加到目前用 Objective C 编写的现有 KIF 测试包中。
设置:
- Xcode6.4
- 椰足类 0.37.2
- Podfile 使用最新版本的 KIF
我已经设置了 Swift 桥接头,导入了 KIF 和我项目的其他相关部分,以便 Swift 可以使用它们。
我已经将事情简化为一个简单的测试用例,在这个阶段甚至不使用 KIF:
import Foundation
class MyFirstTest : KIFTestCase {
func testOne() {
NSLog("Done")
}
}
测试包构建良好,但是当我 运行 我得到:
2015-07-03 14:52:32.620 MyApp[1104:204793] Error loading /private/var/mobile/Containers/Data/Application/F20A664E-BD2D-4299-A93F-4C6758CBAF34/tmp/MyApp_UI_Tests.xctest/MyApp_UI_Tests: dlopen(/private/var/mobile/Containers/Data/Application/F20A664E-BD2D-4299-A93F-4C6758CBAF34/tmp/MyApp_UI_Tests.xctest/MyApp_UI_Tests, 262): Library not loaded: @rpath/libswiftXCTest.dylib
Referenced from: /private/var/mobile/Containers/Data/Application/F20A664E-BD2D-4299-A93F-4C6758CBAF34/tmp/MyApp_UI_Tests.xctest/MyApp_UI_Tests
Reason: image not found DevToolsBundleInjection: Error loading bundle '/private/var/mobile/Containers/Data/Application/F20A664E-BD2D-4299-A93F-4C6758CBAF34/tmp/MyApp_UI_Tests.xctest'
我已经尝试了 here 的建议,包括:
- 将应用程序和测试包目标的运行路径搜索路径设置为@executable_path/Frameworks
- 设置 "Embedded Content Contains Swift Code" 为 YES
我也试过:
- 清理并重建 project/workspace 的完整椰子足类动物
- 删除所有 DerivedData 并运行清理构建
我还看到这可能与代码签名身份有关的建议,但捆绑包无法加载到具有开发身份的模拟器以及真实设备上。
如果我恢复到仅使用 Objective C 测试,一切正常。
我错过了什么?
终于想通了。对我来说,解决方案是确保测试包目标的运行路径设置包括 @loader_path/Frameworks 以及 @executable_path/Frameworks.
我一添加,一切就都加载好了。