【问题标题】:xcode 4 fails to initiate unit tests (with linker error) after I created a new scheme创建新方案后,xcode 4 无法启动单元测试(出现链接器错误)
【发布时间】:2011-06-10 05:32:15
【问题描述】:

我的单元测试在 xcode4 中运行良好,直到我不得不创建一个新模式来编译一个包以在我的设备上运行以进行测试。

我所做的只是创建一个新目标和一个新方案,现在我尝试运行单元测试并得到以下错误:

无法加载位于 [...]Tests.octest 的测试包,因为发生链接错误。 dyld 可能无法找到与测试包链接的框架框架或库,可能是因为框架或库在链接时的安装路径不正确。

我弄坏了什么?

【问题讨论】:

  • 可能相关且可能有帮助:onetwo

标签: ios xcode unit-testing


【解决方案1】:

就像上面的 @Haoest 和 @Peter DeWeese 的 cmets 回答 1 - 我在更改产品名称时遇到了完全相同的问题。

要针对您重命名产品的情况解决此问题,您需要转到测试目标的“构建设置”选项卡,并更改“链接”部分 - 调试和发布包加载程序设置。如果您已重命名产品 - 应用程序的目录和名称都可能不正确。

感谢他们两位指出这一点 - 但我认为这种情况下的替代解决方案应该比评论更受关注。

【讨论】:

  • 还要确保在进行这些更改后清理并重建项目。
  • 您能否确认我怀疑您必须手动更改捆绑加载器,因为更改产品名称时测试目标的目标依赖关系没有正确更新(即括号内显示的内容)?跨度>
  • 我必须重置我的模拟器(iOS 模拟器 -> 重置内容和设置...),然后这个解决方案才能正常工作。否则模拟器需要几分钟才能开始测试,然后测试将无法运行。
  • 新建“单元测试”目标,点击 Build Settings 选项卡并将 Bundle Loader 设置为 $(BUILT_PRODUCTS_DIR)/ RenamedProductName.app / RenamedProductName .在将 UnitTest 添加到现有应用程序时,我已经解决了错误 ld: file not found: /Users/HomeDirectory/Library/Developer/Xcode/DerivedData/MyExistingApp-ecvhpixjl‌​crqmyfiiqaqhllwtsgy/Build/Products/Debug-iphonesimulator/MyExistingApp.app/ MyExis‌​tingApp.
  • Alphose 的解释也解决了我的问题。谢谢!
【解决方案2】:

在将目标添加到现有项目后,我也遇到了 Xcode 4 的问题。我最终发现该项目的 Xcode DerivedData 已损坏。通过删除该数据,我使 Xcode 重建数据并且项目恢复正常。我在我的主库文件夹 (~/Library/Developer/Xcode/DerivedData/) 中找到了数据。

【讨论】:

  • 这并没有直接修复测试设置,但清理 DerivedDatas 文件夹确实给了我有意义的线索,最终让测试框架恢复工作。崩溃的原因是我更改了产品名称,而测试目标仍在查看旧编译的二进制文件。
  • 我还通过更改产品名称破坏了我的产品。烦人的是它说“没问题”。
  • 要删除派生数据,您也可以进入管理器,选择项目,然后按派生数据旁边的删除。
【解决方案3】:

我尝试了所有方法(包括其他答案以及此处提到的http://twobitlabs.com/2011/06/adding-ocunit-to-an-existing-ios-project-with-xcode-4/),但最终找到了不同的解决方案:

将 Debug 目标的部署后处理(在 Build Settings 的 Deployment 部分中)设置为 NO。

在我这样做之前,可执行文件已被剥离,链接将失败并显示

Undefined symbols for architecture i386:
  "_OBJC_CLASS_$_SomeClassUnderTest", referenced from:
      objc-class-ref in SomeTest.o

无论剥离链接产品和复制期间剥离调试符号设置为否,都没有任何区别 - 仅更改部署后处理设置最终确保未剥离符号。

【讨论】:

    【解决方案4】:

    同样的错误消息,在我的情况下,我没有链接测试期间需要的类之一。

    【讨论】:

      【解决方案5】:

      我发现我的问题是我在调试版本中启用了“链接时间优化”。将其设置为 no 可以解决问题。

      【讨论】:

        【解决方案6】:

        我们使用的是nodejs-mobile,它可以使用应用程序构建,但无法通过测试构建。

        Undefined symbols for architecture x86_64:
          _start_node
        

        除了之前的所有答案(构建设置、搜索路径、创建全新的单元测试、删除 DerivedData)之外,最终解决的问题是创建全新的 UI 测试而不是 Xcode 中的单元测试。

        它构建成功。然后,您可以将当前测试中的测试定义复制到一个。

        如果您不需要 UI 部分,您可以在生成的测试的setUp 中取消注释XCUIApplication().launch(),使其运行速度和以前一样快。

        【讨论】:

          猜你喜欢
          • 2011-09-10
          • 1970-01-01
          • 2014-02-04
          • 1970-01-01
          • 1970-01-01
          • 2011-09-21
          • 1970-01-01
          • 2011-08-12
          • 1970-01-01
          相关资源
          最近更新 更多