测试目标Xcode 5的XCTest构建错误:

时间:2013-08-16 05:52:13

标签: ios unit-testing xcode5 sentestingkit

我已经为单元测试设置了一个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

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

11 个答案:

答案 0 :(得分:21)

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

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

答案 1 :(得分:17)

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

  

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

所以,这意味着:

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

答案 2 :(得分:13)

我有同样的问题;问题(对我来说,至少)是FRAMEWORKS_SEARCH_PATHS构建设置在主开发者框架文件夹之后列出了SDK框架文件夹

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

解决方案很简单,就是:

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

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

注意:有时Xcode的速度有点慢;您可能需要删除build文件夹(不仅仅是干净)才能生效。

答案 3 :(得分:6)

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

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

答案 4 :(得分:5)

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

其他链接标志:

-framework XCTest

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

答案 5 :(得分:4)

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

答案 6 :(得分:3)

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

我想只有这些.xctest捆绑包才能访问 XCTest框架。

答案 7 :(得分:3)

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

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

XCode Test Target Image

答案 8 :(得分:1)

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

答案 9 :(得分:1)

遇到了同样的问题,但结果却略有不同。

选择XCTest.framework并确保仅在目标成员资格下检查您的测试文件夹。

Target Membership

答案 10 :(得分:0)

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

就我而言,两条路径都存在,但$(inherited)是第一条路径。

信用转到https://stackoverflow.com/users/181947/brian-clear

上的Apple Mach-O linker (id) warning : building for MacOSX, but linking against dylib built for iOS