测试目标 X 遇到错误(早期意外退出,操作从未完成引导 - 不会尝试重新启动

Test target X encountered an error (Early unexpected exit, operation never finished bootstrapping - no restart will be attempted

我已经开始使用 OCMock 为我已集成到我的项目工作区中的现有项目编写测试用例。完成此 link.

中提到的所有步骤后

当我第一次执行我的测试用例时,它给出了上面的错误。我搜索了它并尝试了一些解决方案,例如 创建新目标 重新启动 Xcode,但它并没有帮助我。有什么想法吗?

愿意分享我的答案,希望能节省别人的时间。

对我来说,.m 文件在构建阶段 - > 编译源下没有正确链接

就我而言,链接文件没有任何问题。 模拟器有点卡在应用程序触发的消息上,例如:"App name would like to send you notifications"。 按确定,下次我的 XCTests 工作正常。

就我而言,我在头文件中将 属性 声明为只读:

// In .h file
@property (nonatomic, readonly) NSUInteger count;

但我忘记将此声明添加到 .m 中,因此会生成 setter:

// In .m file
@property (nonatomic, assign) NSUInteger count;

愚蠢的错误,不完全确定它为什么会出现在这个错误中,但是将该行添加到 .m 中解决了问题。

我在这里有 Cocoapods 和 Carthage 的笔记和演示应用程序 https://github.com/onmyway133/TestTarget

  • 确保所有框架都链接到测试目标
  • 配置 Runpath Search Paths 指向 $(FRAMEWORK_SEARCH_PATHS)

更多信息

我正在使用 carthage,我遇到的问题是在测试目标中搜索依赖项。修正:

$(PROJECT_DIR)/Carthage/Build/iOS 添加到 Runpath Search Paths

您可以在这里找到参考资料:Carthage issue

在我的例子中,我的构建设置 -> 架构仅为 armv7 设置,我更改为 ARCHS_STANDARD,这与我的主机应用程序相同

在我的例子中,Build Active Architecture Only 被设置为 YES。

在项目和目标中: Build Settings -> Architectures -> Build Active Architecture Only 应该是 NO 而不是 YES

我的情况很特殊。我使用了 2 个文件作为测试 类。一个工作完美,另一个有那个错误。
link 都针对同一个框架。

解决方案

CLEAR DERIVED DATA

Window => Projects => Delete (at your project)

祝你好运 测试愉快!

我的解决方案是在我的测试目标中添加一个 "Copy File phase"。 在那里,我将目标设置为 Frameworks 并使用 + 号添加了我的框架。

只是为了分享我对这个错误的经验:

我正在使用 fastlane + cocoapods。

我有一个包含 2 个动态框架的工作区:

  • A.framework
  • B.framework

依赖关系:

  • A 取决于使用 cocoapods 的 AFNetworking
  • B 取决于 A

依赖项在 Podfile 中定义。

执行框架 B 测试时出现错误。

在我的例子中,问题与 B.framework 目标中缺少对 AFNetworking 的依赖有关。

在 Podfile B.framework 中添加对 AFNetworking 的 pod 依赖,全部解决。

因此,即使目标 B 编译成功,AFNetworking 也没有嵌入到 B 测试应用程序中,模拟器无法 运行 B 测试应用程序引发此问题 "very meaningful" (*) 错误。

(*) 感谢 Apple!

哇,我在这上面浪费了很多时间,我的测试包为我的应用程序选择了 "Host Application"。其他测试包没有。

我预计这个解决方案可能不是适合所有情况的解决方案,但我的测试主要是为了测试动态库,它并不真的需要主机应用程序才能 运行。我遇到了上述错误,关闭它允许我 运行 测试而不会出现该错误并且断点有效。我使用的是 运行ning MacOS,但它可能对其他环境也有类似的作用。我希望这个解决方案可能不是适用于所有情况的正确解决方案,但我的测试主要是为了测试动态库,它并不真的需要主机应用程序才能 运行。

在测试包上转到常规 -> 测试 -> 将 "Host Application" 设置为 None。

在我的例子中,我没有为我使用 Carthage 集成的 Quick 和 Nimble 库添加 运行 脚本阶段。

对我来说,我必须在我的设备上 'Settings -> General' 下的 'Device Management' 中 'Trust' 开发人员。 (设置 -> 通用 -> 设备管理 -> DeveloperID -> 'Trust the app') 就像我一样 运行 使用我的苹果 ID 通过侧面加载应用程序。

在我的例子中,我不得不从我的 ui 测试目标中的 Other Linker Flags 中删除 $(inherited)。我已经通过 cocoapods 安装了静态库。

我尝试了很多不同的选择,但 none 帮助了我,除了以下内容并且浪费了很多时间,发布这个以便真正帮助并节省时间:

按照完整手动配置的所有说明进行操作

https://github.com/appium/appium-xcuitest-driver/blob/master/docs/real-device-config.md#full-manual-configuration 尖端 当你来到执行xcodebuild的部分,如果构建失败,并且日志提到“RoutingHTTPServer”或“YYCache”,在WebDriverAgentRunner目标的Build Phases选项卡上添加这两个框架 打开WebDriverAgent.xcodeproj

Select 'Targets' -> 'WebDriverAgentRunner'

打开 'Build Phases' -> 'Copy frameworks'

点击“+”-> 添加 RoutingHTTPServer

点击'+' -> 添加YYCache https://github.com/facebook/WebDriverAgent/issues/902#issuecomment-382344697 https://github.com/facebook/WebDriverAgent/issues/902#issuecomment-383362376

build/test 也可能由于 WebDriverAgentRunner app/developer 在设备上不受信任而失败。请信任该应用并重试。

在尝试访问 WebDriverAgent 服务器状态时,如果它尝试连接端口 0,请在 appium-xcuitest-driver/WebDriverAgent/WebDriverAgentLib/Routing/FBWebServer.m

中硬编码端口 8100

原行:server.port = (UInt16)port; 新行:server.port = 8100; https://github.com/facebook/WebDriverAgent/issues/661#issuecomment-338900334

如果您使用的是 CocoaPods 并且 UI 测试目标嵌入在应用程序目标中,则可能有另一种解决方案,不幸的是,默认模板 (pod init) 就是这种情况。

尝试将 UI 测试目标移出应用目标 ,如下所示:

来自:

platform :ios, '11.0'
use_frameworks!

target 'MyApp' do
  # Pods for MyApp

  target 'MyAppUITests' do
    inherit! :search_paths
    # Pods for testing

  end
end

至:

platform :ios, '11.0'
use_frameworks!

# Pods shared between MyApp and MyAppUITests    

target 'MyApp' do
    # Pods for MyApp only

end

target 'MyAppUITests' do
    # Pods for testing

end

本期主题归功于 SpacyRicochet:https://github.com/CocoaPods/CocoaPods/issues/4752#issuecomment-305101269

我遇到了同样的问题,并且已经尝试了这里提出的所有建议,但都没有成功。

运行 在不同模拟器上的测试为我解决了这个问题。之后原来的模拟器也没有再报错了。

对我来说问题是 Pod 文件
我创建了一个新目标,但忘记在 pod 文件中添加目标

target 'mobilesdkIntegrationTests' do
  // write here any predefined pods if any, like
  testing_pods
end

只需在 pod 文件中添加目标即可解决问题

Xcode10 附带了一些自动添加的项目设置,它们有时会出现,但并非总是如此。下载完成后Xcode10,重启电脑。这就是为我解决这个问题的原因。 None 这些答案为我修复了它。我希望这有帮助。我希望我能给出更好的答案。

从 Xcode 9.4.1 切换到 Xcode 10.1 解决了我的问题。

在我的例子中,我有一个带有默认空测试的完全干净的项目。 如果我添加了任何 pod,我会收到此错误。 解决方案是测试目标中至少有一个文件应该导入 Foundation

import XCTest
import Foundation

@testable import CVZebra

class CVZebraTests: XCTestCase {

    override func setUp() {
        // Put setup code here. This method is called before the invocation of each test method in the class.
    }

    override func tearDown() {
        // Put teardown code here. This method is called after the invocation of each test method in the class.
    }

    func testExample() {
        // This is an example of a functional test case.
        // Use XCTAssert and related functions to verify your tests produce the correct results.
    }

    func testPerformanceExample() {
        // This is an example of a performance test case.
        self.measure {
            // Put the code you want to measure the time of here.
        }
    }

}

在我创建 Cocoa Touch Framework 期间,每次 运行 测试的尝试都以与 OP 所写的相同错误消息结束。

我通过将 TEST 的构建配置从调试更改为发布来修复它。

步骤 1

步骤 2

步骤 3

注意: Runpath Search Paths.

不需要额外配置

我在 ver 1.6.1 和 Xcode 10.1

中使用 Cocoapods

如果有人仍然遇到这个问题 this 回答对我有帮助。在项目设置中将 Always Embed Swift Standard Libraries 设置为 No。我是为 UI 测试目标做的。

就我而言,我的应用程序在模拟器中存在问题。在问题出现之前,我处理了一个失败的数据库迁移(领域)并破坏了我的数据库。因此,在我删除模拟器上的应用程序后,一切正常。