【问题标题】:Test bundle could not be loaded because an unanticipated error由于意外错误,无法加载测试包
【发布时间】:2014-09-24 15:07:40
【问题描述】:

最近我开始为一个旧的静态库编写测试用例。我已经将库加载到 Xcode 5,由于静态库是旧的,我必须手动添加带有测试目标的 TestProject。

当我尝试“Product-->Test”时,它会启动模拟器并且控制台显示以下错误

The test bundle at /xxx/xxx/xxx/StaticLibTest.xctest could not be
loaded because an unanticipated error occurred: Error
Domain=NSCocoaErrorDomain Code=3587 "The bundle “StaticLibTest.xctest”
couldn’t be loaded because it is damaged or missing necessary
resources."
(dlopen_preflight(/xxx/xxxx/xxx/Debug-iphonesimulator/StaticLibTest.xctest/StaticLibTests):
no suitable image found.  Did find:

我不知道为什么会出现这个错误。

对于指出正确方向的任何帮助将不胜感激。

【问题讨论】:

    标签: ios xcode5 static-libraries xctest


    【解决方案1】:

    无法加载捆绑包 UITest,因为它已损坏或缺少必要的资源。尝试重新安装捆绑包

    验证您的所有目标是否使用相同的 iOS 版本: 构建设置 -> iOS 部署目标

    【讨论】:

      【解决方案2】:

      有类似的问题:

      FrameworkA 导入 FrameworkB

      FrameworkA-Tests 还导入 FrameworkB

      解决问题的方法是删除(注释)FrameworkA-Tests 中对 FrameworkB 的所有引用,然后运行测试一次并取消注释。

      FrameworkA-Tests 现在导入 FrameworkB 并且运行良好。

      【讨论】:

        【解决方案3】:

        检查您是否忘记在Podfile 中添加测试目标:

        target 'MyProject' do
        
          # Add test target
          target 'MyProjectTests' do
            inherit! :search_paths
          end
        
          pod 'SomePodLibrary'
        
        end
        

        【讨论】:

          【解决方案4】:

          我能够通过为测试目标设置主机应用程序来解决此问题:

          【讨论】:

          • 这意味着您的应用程序将启动并运行每一个测试,这不是您在单元测试中想要做的。
          • @delta2flat 部分正确。模拟器和应用程序将启动,这将需要一些额外的时间,但这只会在所有测试中发生一次(而不是每次测试)。如果您将宿主应用程序设置为无,请确保将宿主应用程序导入的所有目标添加到测试目标。您不必等待应用程序启动,就可以赢得那段时间所需的时间;)
          • 虽然您不想练习,但可能还有其他前兆 - 通过网络登录、初始数据状态、用户 UI 响应、用户设置等。当我删除主机应用程序时,启动也是更快,因为我可以以真正的“黑盒”方式测试单个方法......
          • 这对我有用!在删除 Xcode beta 并将 Xcode 选择更改为常规 Xcode 目录后发生
          【解决方案5】:

          对我来说,我们刚刚开启了 CloudKit 授权。由于某种原因破坏了建筑。

          【讨论】:

            【解决方案6】:

            如果其他读者收到此错误,并且您正在使用 Carthage 添加框架,请确保 Copy Files 阶段使用 Destination: Frameworks

            如果您不小心将框架添加到具有不同目标(框架除外)或 Copy Bundle ResourcesCopy Files 阶段,这也会产生损坏/无效包错误消息。

            【讨论】:

            • 这应该是公认的答案,这正是我的设置出了什么问题。不知道为什么接受的答案说要确保拱门和 Mach-O 类型是正确的,因为这些东西总是按照默认描述设置。无论如何感谢@odlp
            【解决方案7】:

            我遇到了类似的问题。对我来说,问题在于一个单元测试框架,它是一个动态框架,但没有复制到 xctest 包中。

            解决方案是向我的单元测试目标添加“复制文件”阶段,将其目标设置为“框架”并将我的框架添加为输入文件。

            【讨论】:

            • 这成功了!如果使用 CocoaPods,我认为这是处理此问题的最佳方法
            • 这可能与以下 CocoaPods 问题有关。 github.com/CocoaPods/CocoaPods/issues/5250
            • 我在这个问题上苦苦挣扎了两个星期。这救了我的命。谢谢。 ?
            • 成功了。虽然不确定为什么我们需要执行此步骤?到目前为止,一切都很好。谢谢。
            【解决方案8】:

            对我来说,这个问题是由于我的测试目标中的“iOS 部署目标”构建设置与我的主应用程序不同。一旦我使它们相同,问题就消失了。

            【讨论】:

            • 这对我有用。我已经降低了主机应用程序的部署目标,但忘记为测试目标做同样的事情,所以我看到了这个错误。谢谢!
            【解决方案9】:

            关闭测试目标的 pod 配置解决了我的问题,这与 pod 配置弄乱了它有关。

            【讨论】:

              【解决方案10】:

              我自己找到了答案。

              您的构建设置 -> 库和测试项目的架构应该相同

              架构 -> 架构 = Standrad 架构 (armv7 ,armv7s , arm64)$(ARCHS_STANDARD)

              您的测试项目的链接 -> Mach-O 类型应该是 Bundle

              链接 -> Mach-O 类型 = 捆绑

              进行构建和运行测试。就是这样

              【讨论】:

              • 非常感谢。 Linking -> Mach-O Type = Bundle 就是这样做的。
              猜你喜欢
              • 1970-01-01
              • 2015-09-06
              • 2018-01-08
              • 2015-01-03
              • 1970-01-01
              • 2021-08-27
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多