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

use*_*719 31 unit-testing ios sentestingkit xcode5

我已经为单元测试设置了一个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
Run Code Online (Sandbox Code Playgroud)

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

Hat*_*ard 21

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

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

  • 删除2次出现的(\")使它对我有用,谢谢! (2认同)

eck*_*ero 17

上述答案都不适合我.我没有找到答案,在这里由蒂姆·麦克法兰留下评论.

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

所以,这意味着:

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


Cal*_*ion 13

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

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

解决方案很简单,放:

FRAMEWORK_SEARCH_PATHS = $(SDKROOT)/Developer/Library/Frameworks $(inherited)
Run Code Online (Sandbox Code Playgroud)

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

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


Ais*_*abu 6

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

"$(SDKROOT)/Developer/Library/Frameworks" (non-recursive)
"$(DEVELOPER_LIBRARY_DIR)/Frameworks" (non-recursive)
Run Code Online (Sandbox Code Playgroud)


Rya*_* H. 5

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

其他链接器标志:

-framework XCTest

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


小智 3

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

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