【问题标题】:Xcode 5.0.2 dyld: Library not loaded: @rpath/XCTest.framework/Versions/A/XCTestXcode 5.0.2 dyld:库未加载:@rpath/XCTest.framework/Versions/A/XCTest
【发布时间】:2013-12-18 21:31:39
【问题描述】:

我在 Xcode 5.0.2 中运行项目时遇到问题

我收到以下错误:

dyld: Library not loaded: @rpath/XCTest.framework/Versions/A/XCTest
  Referenced from: /Users/chris/Library/Developer/Xcode/DerivedData/relatio-cwlmozvklaldmictbbjthzuoxnxz/Build/Products/Debug/relatio.app/Contents/MacOS/relatio

原因:找不到图片 (lldb)

我该如何解决这个问题?

【问题讨论】:

  • 这就是我解决问题的方法: 1. 导航到项目的“构建设置” 2. 搜索“运行路径搜索路径” 3. 在产品名称下方的列中输入以下路径:/ Applications/Xcode.app/Contents/Developer/Library/Frameworks/
  • 您可以通过写答案而不是评论来回答自己的问题。

标签: xcode dyld xctest


【解决方案1】:

看起来您的主要目标正在链接到 XCTest.framework 以及您的测试目标。它应该只链接到主要目标。

1) 进入项目设置

2) 转到您的应用程序主要目标 -> 其他链接器标志

3) 移除'-framework XCTest'

4) 确保您的测试目标的“其他链接器标志”字段仍然包含“-framework XCTest”

【讨论】:

  • 我关注了这个。但没有帮助
  • 很好的答案,但我有 $(inherited) 从 CocoaPods 引入数据。
  • 除了删除之外,您还可以通过执行 -weak_framework "XCTest" 使您的框架成为可选
  • 我没有测试目标了,我已经从应用程序中删除了它。我仍然遇到同样的错误。
【解决方案2】:

我在重命名目标时遇到了这个错误,其中一个是测试目标。阅读其他答案后,我意识到我的 Build Phases > Compile Sources 将测试类作为编译源包含在非测试目标中,然后尝试导入 XCTest 框架。

从我的常规目标的编译源中删除测试类解决了这个问题。

【讨论】:

  • 这个答案解决了我的问题,非常感谢你分享这个。
【解决方案3】:

我通过这种方式解决了这个问题。 我已经编辑了方案,在“构建”选项卡上勾选了“运行”。

【讨论】:

    【解决方案4】:

    这里的问题是,根据您发布的 dyld 错误消息,您的 应用程序 链接到 XCTest.framework。这是不正确的;只有您的测试包需要链接到 XCTest.framework,因为只有您的测试包包含测试。

    【讨论】:

      【解决方案5】:

      我在使用 OCMock 库时遇到了类似的问题,解决方案是:

      target :"Application Tests", :exclusive => true do
          pod 'OCMock'
      end
      

      【讨论】:

      • 对于像我这样的傻瓜,如果你的应用程序被命名为MyApp,那么这里的目标是MyAppTests ...
      • 小心,如果您执行 'exclusive => true',您将不再包含来自其他目标的任何 pod。
      • 请注意 :exclusive 已被替换为 inherit! :search_paths。见blog.cocoapods.org/CocoaPods-1.0-Migration-Guide
      • @LeszekZarna 当然,我在您现有的示例中添加了 post 1.0 语法。
      【解决方案6】:

      在我的例子中,它是由 Swift 包管理器添加到主应用程序目标的 RxTests。在 pod 中,您决定将哪些 Rx 组件添加到哪个目标,但 SPM 默认将其全部添加到主目标。

      【讨论】:

      • 是的,我从主要目标中删除了它现在工作正常。谢谢
      【解决方案7】:

      这就是我解决问题的方法:

      1. 导航到项目的“构建设置”
      2. 搜索“运行路径搜索路径”
      3. 在产品名称下方的一栏中输入以下路径:/Applications/Xcode.app/Contents/Developer/Library/Frameworks/

      【讨论】:

      • 这在几个方面是不正确的。首先,它会导致您的应用程序依赖于 XCTedt.framework,该框架仅在 Xcode 中可用。其次,您使用的是绝对路径,不能保证从 Mac 到 Mac(例如,如果您安装了多个版本的 Xcode)。
      • @ChrisHanson:这确实适用于 Xcode 5.1.1。但请注意,您不需要提供绝对路径,应该提供相对路径。我的场景是,我已经使用 Xcode 6 构建了动态框架,然后我尝试在我的应用程序的 Xcode 5.1.1 中使用它,我收到了相同的问题描述here ...我尝试在“运行路径搜索路径”中给出我的动态框架的路径" 并且成功了..
      【解决方案8】:

      在我的主要 Target 的“Link Binary With Libraries”(在 Build Phases 下)中,是我使用的测试框架 (Nimble.framework) 导致了问题。删除它,一切都很好!

      【讨论】:

        【解决方案9】:

        在框架搜索路径中输入您的框架的引用和 在“构建设置”下运行路径搜索路径---...现在全部设置为使用导入调用您的项目

        【讨论】:

          【解决方案10】:

          我有同样的问题是因为我在框架中添加了一个新文件。所以只需运行“pod install”就可以解决我的问题。但请确保您的 pod 也在 Tests 目标下。

          【讨论】:

            【解决方案11】:

            仅针对那些提出相同问题的人:

            检查右侧的横向菜单必须看起来像这样

            而且不必看起来像那样

            【讨论】:

            • 您可能会解释这适用于所有且仅适用于您的测试文件。
            【解决方案12】:

            对于我们的案例,我们希望将Mockingjay 用于应用目标和测试目标

            target 'MyProject' do
              pod 'Mockingjay/Core'
              # all pods that are not test go here
            
              target 'MyProjectTest' do
                  inherit! :search_paths
                  pod 'Mockingjay/XCTest'
                  pod 'Quick', ' ~> 0.9.2'
                  # .. all test pods go here
              end
            end
            

            【讨论】:

              【解决方案13】:

              对我有用的解决方案是将 Podfile 中的测试目标 inherit attribute:search_paths 更改为 :complete。 虽然this answer 暗示:search_paths 是为测试环境设计的。

              target 'myapp' do    
                use_frameworks!
              
                target 'myappTests' do
                  #inherit! :search_paths
                  inherit! :complete
                end
              
              end
              

              【讨论】:

                【解决方案14】:

                我通过 Carthage 使用 ios-snapshot-test-case v5.0.2 时遇到了这个错误。该问题与 XCode 11 有关。Apple 将 libswiftXCTest.dylib 重命名为 libXCTestSwiftSupport.dylib 并添加了 XCTest.swiftmodule,其中包含相同的符号并且可以代替旧符号。但是 Apple 忘记告诉 iOS 11.x 模拟器这一变化。

                所以你需要修复旧的 iOS 版本模拟器。这是为我修复它的终端命令:

                sudo zsh -c ' sourcedir="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/lib"; 
                targetdir="/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS 11.4.simruntime/Contents/Resources/RuntimeRoot/usr/lib"; 
                ln -s $sourcedir/libXCTestSwiftSupport.dylib $targetdir/libswiftXCTest.dylib;
                ln -s $sourcedir/XCTest.swiftmodule $targetdir/XCTest.swiftmodule'
                

                在这里查看我的评论:https://github.com/CocoaPods/CocoaPods/issues/9165#issuecomment-573523322

                【讨论】:

                  【解决方案15】:

                  转到常规 > 目标(左侧)。

                  您可能有第二个项目包含单词 test/s。点击它。

                  在此常规设置 > 测试 > 主机应用程序 > 从选项中选择(您的应用程序名称)。就是这样!

                  【讨论】:

                    猜你喜欢
                    • 2018-12-05
                    • 2017-04-18
                    • 2015-02-25
                    • 2021-06-07
                    • 2017-10-02
                    • 1970-01-01
                    • 2017-05-06
                    • 1970-01-01
                    相关资源
                    最近更新 更多