【问题标题】:Test target X encountered an error (Early unexpected exit, operation never finished bootstrapping - no restart will be attempted测试目标 X 遇到错误(提前意外退出,操作从未完成引导 - 不会尝试重新启动
【发布时间】:2016-05-01 14:51:40
【问题描述】:

我已开始与OCMock 合作,为我已集成到我的项目工作区中的现有项目编写测试用例。完成此link 中提到的所有步骤后。

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

【问题讨论】:

  • 这些指令是已知的。根据您提供的信息,无法诊断问题。请转到构建输出(cmd-8),在左侧选择“Test”条目,然后在右侧选择顶部的“Logs”,然后右键单击下面的“Test target X”,选择“Copy Transcript. .. 作为文本”,它将成绩单复制到剪贴板上。验证其中的内容,并分享您可以/认为相关的内容。
  • 得到了上述错误的原因:“.m 文件未在 Build Phases -> Compile Sources 下链接”。但是在添加 -ObjC 标志作为其他链接器标志之后,现在又出现了另一个错误“重复符号 _OBJC_METACLASS_$_ in:”。
  • 您应该只链接一次库,如文档中所述。
  • @ErikDoernenburg 你能帮我吗?我无法确定原因

标签: ios unit-testing xcode7 ocmock


【解决方案1】:

我尝试了许多不同的选项,但没有一个能帮到我,除了下面,浪费了很多时间,发布这个是为了真正帮助并节省时间:

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

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

选择“目标”->“WebDriverAgentRunner”

打开“构建阶段”->“复制框架”

点击'+' -> 添加RoutingHTTPServer

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

由于 WebDriverAgentRunner 应用/开发者在设备上不受信任,构建/测试也可能失败。请信任该应用,然后重试。

在尝试访问 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

【讨论】:

    【解决方案2】:

    在我的情况下,我的应用程序在模拟器中存在问题。在问题出现之前,我处理了一个失败并破坏了我的数据库的数据库迁移(领域)。所以在我删除模拟器上的应用程序后,一切对我来说都很好。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        我通过将 TEST 的构建配置从 Debug 更改为 Release 来修复它。

        第 1 步

        第 2 步

        第 3 步

        注意Runpath Search Paths不需要额外配置。

        我在 1.6.1 版和 Xcode 10.1 中使用 Cocoapods

        【讨论】:

        • 很奇怪。这在一个项目中也适用于我(使用相同的版本),但另一个项目使用调试配置来测试就可以正常工作??‍♂️
        【解决方案5】:

        在我的情况下,我有一个完全干净的项目,默认为空测试。 如果我添加了任何 pod,我会收到此错误。 解决方案是 Test 目标中的至少一个文件应该导入 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.
                }
            }
        
        }
        

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            【解决方案7】:

            我的情况很特别。我使用 2 个文件作为测试类。一个工作完美,另一个有这个错误。
            两者都链接到同一个框架。

            解决方案

            清除派生数据

            窗口 => 项目 => 删除(在您的项目中)

            祝你好运 祝测试愉快!

            【讨论】:

              【解决方案8】:

              Xcode 10 附带了一些自动添加的项目设置,它们有时会出现,而不是所有时间。下载 Xcode 10 后,重新启动计算机。这就是为我解决这个问题的原因。这些答案都没有为我解决。我希望这有帮助。我希望我能给出一个更好的答案。

              【讨论】:

                【解决方案9】:

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

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

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

                【讨论】:

                  【解决方案10】:

                  我遇到了同样的问题,并且已经尝试了这里提出的所有方法,但没有任何成功。

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

                  【讨论】:

                    【解决方案11】:

                    如果您使用的是 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

                    【讨论】:

                    • 非常感谢!但是...为什么这行得通?!是否有使用 cocoapods 跟踪此问题的错误?
                    • @Sam,对不起,我也不知道为什么。我只是通过反复试验找到了这个解决方案。您可能需要查看官方 CocoaPods 存储库以获取更多信息。
                    • 我们发现一个 cocoapod 版本更新加上在项目中设置我们的依赖项(目标依赖项)似乎教 Cocoapods 关于我们的依赖项并实际解决了这个问题..
                    • 有趣。当我遇到这个问题时,我已经在使用最新的 CocoaPods 1.5.3。 UI 测试目标的目标依赖就是应用程序目标。没有其他的。我仍然必须将 Podfile 更改为我上面发布的方式,以便 UI 测试目标可以成功启动。
                    • 两者都住在同一个项目中吗?
                    【解决方案12】:

                    在我的情况下,我必须在我的 ui 测试目标中从 Other Linker Flags 中删除 $(inherited)。我已经通过 cocoapods 安装了静态库。

                    【讨论】:

                      【解决方案13】:

                      对我来说,我必须在设备上的“设置 -> 常规”下的“设备管理”中“信任”开发人员。 (设置 -> 常规 -> 设备管理 -> DeveloperID -> '信任应用') 当我使用我的 Apple ID 通过侧面加载运行应用时。

                      【讨论】:

                        【解决方案14】:

                        就我而言,我没有为使用 Carthage 集成的 Quick 和 Nimble 库添加运行脚本阶段。

                        【讨论】:

                          【解决方案15】:

                          哇,我在这上面浪费了很多时间,我的测试包选择了我的应用程序的“主机应用程序”。其他测试包没有。

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

                          在测试包上转到常规 -> 测试 -> 将“主机应用程序”设置为无。

                          【讨论】:

                          • 这也是为我解决的问题,谢谢?
                          【解决方案16】:

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

                          我正在使用 fastlane + cocoapods。

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

                          • A.framework
                          • B.framework

                          依赖关系:

                          • A 依赖于 AFNetworking 使用 cocoapods
                          • B 依赖于 A

                          依赖关系在 Podfile 中定义。

                          错误是在执行框架 B 测试时引发的。

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

                          在Podfile的B.framework中添加一个pod依赖到AFNetworking,一切都解决了。

                          所以即使目标 B 编译成功,AFNetworking 也没有嵌入到 B 测试应用程序中,并且模拟器无法运行 B 测试应用程序,从而导致此“非常有意义”(*)错误。

                          (*) 感谢 Apple!

                          【讨论】:

                            【解决方案17】:

                            我的解决方案是向我的测试目标添加“复制文件阶段”。 在那里,我将目标设置为框架,并用 + 号添加了我的框架。

                            【讨论】:

                            • 谢谢,这对我有帮助。这是描述问题的文章medium.com/@greesce/…
                            • 简而言之:添加所有框架,当前使用,递归。
                            • 对我来说,UI 测试在模拟器上运行正常,但在真实设备上却不行。添加“复制文件阶段”有帮助,谢谢!
                            【解决方案18】:

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

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

                            更多信息

                            【讨论】:

                            • $(FRAMEWORK_SEARCH_PATHS) 添加到Runpath Search Paths 对我有用。干杯!
                            • 嘿也为我解决了:) 你能解释一下发生了什么吗?
                            • 谢谢!它有效,只是想注意 Runpath Search Paths 应该在框架目标中设置,而不是在测试目标中
                            • 天啊,这对我也有帮助!谢谢!
                            • 上帝,是你吗?将Runpath Search Paths 配置为指向$(FRAMEWORK_SEARCH_PATHS) 对我有帮助。
                            【解决方案19】:

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

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

                            【讨论】:

                              【解决方案20】:

                              就我而言,我的 Build Settings -> Architectures 仅针对 armv7 进行设置,而我更改为与我的主机应用程序相同的 ARCHS_STANDARD

                              【讨论】:

                                【解决方案21】:

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

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

                                你可以在这里找到参考:Carthage issue

                                【讨论】:

                                • 这解决了我的问题,非常感谢!测试没有在我的 macOS 目标上运行,所以我添加了 $(PROJECT_DIR)/Carthage/Build/Mac
                                【解决方案22】:

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

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

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

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

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

                                【讨论】:

                                  【解决方案23】:

                                  就我而言,链接文件没有任何问题。 模拟器有点卡在应用程序触发的消息上,例如:“应用程序名称想向您发送通知”。 按 OK,下次我的 XCTests 工作正常。

                                  【讨论】:

                                    【解决方案24】:

                                    想分享我的答案希望它可以节省别人的时间。

                                    对于我来说,.m 文件在 Build Phases -> Compile Sources 下没有正确链接

                                    【讨论】:

                                      猜你喜欢
                                      • 1970-01-01
                                      • 1970-01-01
                                      • 2016-11-29
                                      • 2022-12-22
                                      • 2015-08-01
                                      • 2020-11-14
                                      • 2021-01-28
                                      • 2020-06-26
                                      • 1970-01-01
                                      相关资源
                                      最近更新 更多