【问题标题】:XCTest build errors for test target Xcode 5:测试目标 Xcode 5 的 XCTest 构建错误:
【发布时间】:2013-08-18 11:11:58
【问题描述】:

我已经为单元测试设置了一个 XCode 5 iOS 7 项目。

当然,设置单元测试花费了我很长时间,以至于我试图保持相信这是值得的。为这个错误挣扎了几个小时:

ld: building for iOS Simulator, but linking against dylib built for MacOSX file
'/Applications/Xcode5-DP5.app/Contents/Developer/Library/Frameworks/XCTest.framework/XCTest' 
for architecture i386

关于如何解决的任何想法?

【问题讨论】:

  • 我遇到了同样的问题 - 你找到解决办法了吗?

标签: ios unit-testing xcode5 sentestingkit


【解决方案1】:

在您的测试目标设置中检查您的框架搜索路径。添加 XCTest 框架时,这些可能会损坏。

将 XCTest 添加到我的一个项目中会在路径前添加一个“/”,导致它们找不到正确的版本。

【讨论】:

  • 删除 2 次出现的 (\") 使其对我有用,谢谢!
  • 谢谢,好地方! XCode 引入的不需要的字符串转义是问题所在。
【解决方案2】:

以上答案都不适合我。我确实在 Tim Macfarlane 留下的评论中找到了答案 here

对于在您的应用程序中寻找类的链接器错误... 在您的应用程序中将“默认隐藏的符号”构建设置设置为“否” 目标。这使您的所有应用程序类都可用于您的测试目标 自动...

所以,这意味着:

  • Project Navigator > 选择您的项目
  • 目标 > 选择您的应用(不是测试)
  • 构建设置 > 搜索“默认隐藏的符号”
  • “符号默认隐藏”> 将其从“YES”更改为“NO”

【讨论】:

  • 您的意思是“将其从 YES 更改为 NO”吗?没有什么对我有用,甚至这个:-(
  • 好眼光。我做了更正。如果这不能解决问题,我不知道会怎样:(
  • 你看到我在这个线程中关于其他链接器标志的其他回复了吗?那是我遗漏的最后一块。我不需要其他人添加的所有其他搜索路径。
  • 我只更改了 DEBUG,它解决了仅在托管应用程序中编译的类的链接问题。
  • 我还必须将Deployment Postprocessing 设置为NO 以进行调试
【解决方案3】:

我有同样的问题;问题(至少对我而言)是FRAMEWORKS_SEARCH_PATHS 构建设置在主要开发人员框架文件夹之后列出了 SDK 框架文件夹

Xcode 包含的框架具有三个独立的构建:一个用于 OS X,一个用于 iOS(设备),第三个用于 iOS 模拟器。 OS X 版本位于主开发者文件夹中,另外两个位于各自的平台文件夹下。这里的问题是,如果您没有指定首先搜索 SDK 文件夹(位于平台文件夹中),Xcode(或更准确地说,链接器)将首先找到 OS X 构建并产生您看到的错误。

解决方法很简单,放:

FRAMEWORK_SEARCH_PATHS = $(SDKROOT)/Developer/Library/Frameworks $(inherited)

在您的构建设置中。如果您将构建设置放在项目文件中(我不推荐这样做,但这是另一天的另一个问题),它只是命名为“框架搜索路径”。

注意:有时 Xcode 上手有点慢;您可能需要删除您的 build 文件夹(比清理文件夹更好)才能生效。

【讨论】:

  • 只有这个答案对我有用。我的所有路径和设置都可以,但顺序真的很重要。我正在使用 SenTestingKit。搜索了几个小时的解决方案,终于找到了。
【解决方案4】:

将测试从 SenTestCase 转换为 XCTestCase 后遇到同样的问题。恢复框架目录已修复问题:

"$(SDKROOT)/Developer/Library/Frameworks" (non-recursive)
"$(DEVELOPER_LIBRARY_DIR)/Frameworks" (non-recursive)

【讨论】:

  • 如果可以的话,有一百万个赞。这就是我的解决方案。
  • 是的,也为我解决了这个问题。谢谢!
【解决方案5】:

所以,对我来说,在尝试了这篇文章中的所有其他内容后,我缺少的是:

其他链接器标志:

-framework XCTest

我目前正在使用 Xcode 6.0(带有 iOS 8 SDK),所以我很惊讶“编辑 > 重构 > 转换为 XCTest...”选项不会自动添加它。

【讨论】:

  • 是的,这对我有用,谢谢!奇怪的是转换错过了这个!
【解决方案6】:

我在 xcode 5 中添加 sentestingkit 框架时遇到了问题。这些设置用于解决链接器问题。

【讨论】:

  • 这可行,但我得到一些“找不到目录”错误。怕以后会出问题
  • 你能发布哪个目录没有找到。快照或完整路径?
【解决方案7】:

我在添加另一个文件进行测试时遇到了这个问题。 如果您使用 (CMD + N) 执行此操作,请确保仅定位 测试包(即“AppNameTests”)。

我猜只有这些 .xctest 包可以访问 XCTest 框架。

【讨论】:

    【解决方案8】:

    在重命名我的目标名称并移动内容后,我遇到了同样的问题。事实证明,我的测试是我的主要目标的一部分。确保你所有的测试文件只属于你的测试目标。

    只需选择一个 .m 文件,确保您已打开右侧窗格。

    【讨论】:

    • 哇哦!好的!感谢您发布此内容。它解决了我的问题。
    【解决方案9】:

    在尝试使用 7.0 之前的 SDK 构建基于 XCTTest 的单元测试时,我遇到了同样的问题。当我选择 7.0 作为我的 Base SDK 时,那种链接错误就消失了。

    【讨论】:

      【解决方案10】:

      遇到了同样的问题,但最终得到的解决方案略有不同。

      选择 XCTest.framework 并确保在 Target Membership 下仅选中您的测试文件夹。

      【讨论】:

        【解决方案11】:

        确保 YourProjectTests 目标的搜索框架路径 (FRAMEWORK_SEARCH_PATHS) 包含路径 $(SDKROOT)/Developer/Library/Frameworks,并且该路径列在 $(inherited) 之前。

        在我的例子中,两条路径都存在,但 $(inherited) 是第一个。

        信用转到https://stackoverflow.com/users/181947/brian-clearApple Mach-O linker (id) warning : building for MacOSX, but linking against dylib built for iOS

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-02-01
          • 2013-09-30
          • 1970-01-01
          • 2013-09-29
          • 2016-07-26
          • 1970-01-01
          • 1970-01-01
          • 2014-05-24
          相关资源
          最近更新 更多