如果你正在使用CocoaPods,这可能适用于你。有两件事情需要确保。
注意事项1:请确保您没有在Podfile
中将pod
依赖项添加到测试目标:
target 'MyApp' do
project 'MyApp'
pod 'Alamofire'
end
target 'MyAppTests' do
project 'MyApp'
inherit! :search_paths
end
在我的情况下,我使用了不少框架,其中至少一个使用了二进制文件,如果将其添加到我的测试目标中会导致LLDB异常。
作为一个小提示,如果需要在应用程序中使用任何依赖项,您需要通过启动参数更改主应用程序的运行时行为,而不是在测试代码中执行操作。(这就是我偏离正道并导致问题的原因。)您可以通过将以下内容添加到测试文件来实现:
let app = XCUIApplication()
app.launchArguments = ["testing-enabled"]
app.launch()
接着在您的主应用程序代码中(例如在AppDelegate
或SceneDelegate
中):
if CommandLine.arguments.contains("testing-enabled") {
configureAppForTesting()
}
#if DEBUG
并不是必需的,但最好不要发布不会被执行的代码。
注意事项2:如果您有自定义的构建配置,请确保您的测试在Debug
模式下运行。
例如,如果我们创建了一个名为App Store
的构建配置,基于Release
,以及一个基于Debug
的测试配置,则我们需要在Podfile
中执行以下操作:
target 'MyApp' do
project 'MyApp', 'App Store' => :release, 'Test' => :debug
end
没有此设置,您的依赖项将使用默认的iOS配置进行构建,这是一种
Release
类型的配置(针对
Swift和
GCC具有编译器优化,但调试器不喜欢)。
最后,请确保您的方案的测试模式设置为使用正确的生成配置(在本例中为
Test
),如下面的屏幕截图所示。
![Xcode scheme config screen](https://istack.dev59.com/9Tpvb.webp)
sudo chmod -R 777 /base_path_to_swift/swift_folder
。 - Antonio