XCTest为testing目标Xcode 5构build错误:

我已经为unit testingbuild立了一个XCode 5 iOS 7项目。

当然,进行unit testing的时间长了很多,所以我试图坚信这是值得的。 在这个错误上挣扎数小时:

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 

任何想法如何解决?

在您的testing目标设置中检查您的框架searchpath。 这些在添加XCTest框架时可能会损坏。

将XCTest添加到我的项目之一前面加了一个“/”的path,导致他们找不到正确的版本。

上面的答案都没有为我工作。 我在Tim Macfarlane留下的评论中find了答案。

对于在您的应用程序中寻找类的链接器错误…在您的应用程序目标中设置“默认情况下的符号”构build设置为“否”。 这使得您的所有应用程序类自动可用于您的testing目标…

所以,这意味着:

  • 项目导航>select您的项目
  • 目标>select你的应用(不是testing)
  • 构build设置>search“默认隐藏的符号”
  • “默认隐藏的符号”>将其从“是”更改为“否”

我遇到过同样的问题; 这个问题(至less对我来说)是FRAMEWORKS_SEARCH_PATHS构build设置在主开发者框架文件夹之后列出了SDK框架文件夹。

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

解决办法很简单,把:

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

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

注意:有时Xcode有点慢, 你可能需要删除你的生成文件夹(比干净更好),这样才能生效。

将testing从SenTestCase转换为XCTestCase后,也有同样的问题。 恢复框架目录修复问题:

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

所以,对于我来说,在这篇文章中尝试其他所有东西后,我错过了:

其他链接器标志:

-framework XCTest

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

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

添加另一个文件进行testing时,我遇到了这个问题。 如果你这样做(CMD + N),一定要只针对testing包(即'AppNameTests')。

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

重命名我的目标名称并移动它之后,我遇到了同样的问题。 原来,我的testing是我的主要目标的一部分。 确保你所有的testing文件只属于你的testing目标。

只需select一个.m文件,确保您打开了正确的窗格。

XCode测试目标图像

当试图使用7.0以前版本的SDK构build基于XCTTest的unit testing时,我遇到了同样的问题。 当我select7.0作为我的基础SDK,那种链接错误消失了。

有一个相同的问题,但结束了一个稍微不同的解决scheme。

selectXCTest.framework并确保只有您的testing文件夹在Target Membership下被选中。

目标会员

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

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

在Apple Mach-O链接器(id)警告:构build为MacOSX,但链接与为iOS构build的dylib链接到https://stackoverflow.com/users/181947/brian-clear