[英]XCTest build errors for test target Xcode 5:
我已经为单元测试设置了一个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
关于如何解决的任何想法?
检查测试目标设置中的框架搜索路径。 添加XCTest Framework时,这些可能会被破坏。
将XCTest添加到我的一个项目中会在路径前面加上“/”,导致它们找不到正确的版本。
上述答案都不适合我。 我没有找到答案, 在这里由蒂姆·麦克法兰留下评论。
对于在应用程序中查找类的链接器错误...在应用程序目标中将“默认隐藏的符号”构建设置设置为“否”。 这使您的所有应用程序类自动可用于您的测试目标...
所以,这意味着:
我遇到过同样的问题; 问题(对我来说,至少)是FRAMEWORKS_SEARCH_PATHS
构建设置在主开发者框架文件夹之后列出了SDK frameworks文件夹。
Xcode中包含的框架有三个独立的构建:一个用于OS X,一个用于iOS(设备),第三个用于iOS模拟器。 OS X构建位于主开发人员文件夹中,其他两个位于其各自的平台文件夹下。 这里的问题是,如果您没有指定首先搜索SDK文件夹(在平台文件夹中),Xcode(或者更准确地说,链接器)将首先找到OS X构建并产生您看到的错误。
解决方案很简单,放:
FRAMEWORK_SEARCH_PATHS = $(SDKROOT)/Developer/Library/Frameworks $(inherited)
在您的构建设置中。 如果您将构建设置放在项目文件中(我不推荐它,但这是另一天的另一个问题),它只是命名为“框架搜索路径”。
注意:有时Xcode的速度有点慢; 你可能需要删除你的build
文件夹(不仅仅是干净)才能生效。
将测试从SenTestCase转换为XCTestCase后遇到同样的问题。 恢复框架dirs修复问题:
"$(SDKROOT)/Developer/Library/Frameworks" (non-recursive)
"$(DEVELOPER_LIBRARY_DIR)/Frameworks" (non-recursive)
所以,对我来说,在这篇文章中尝试了其他所有内容后,我所遗漏的是:
其他链接器标志:
-framework XCTest
我目前正在使用Xcode 6.0(使用iOS 8 SDK),所以我很惊讶“编辑>重构>转换为XCTest ...”选项不会自动添加。
我在xcode 5中添加sentestingkit框架时遇到了问题。 这些设置用于解决链接器问题。
添加另一个文件进行测试后,我遇到了这个问题。 如果您使用(CMD + N)执行此操作,请确保仅定位测试包(即'AppNameTests')。
我想只有这些.xctest包才能访问XCTest Framework。
重命名我的目标名称并移动后,我遇到了同样的问题。 事实证明,我的测试是我的主要目标的一部分。 确保您的所有测试文件仅属于您的测试目标。
只需选择.m文件,确保打开右侧窗格。
当尝试使用7.0之前的SDK构建基于XCTTest的单元测试时,我遇到了同样的问题。 当我选择7.0作为我的Base SDK时,那种链接错误就消失了。
有一个相同的问题,但最终有一个略有不同的解决方案。
选择XCTest.framework并确保仅在Target Membership下检查您的测试文件夹。
确保YourProjectTests
目标的搜索框架路径( FRAMEWORK_SEARCH_PATHS
)包含路径$(SDKROOT)/Developer/Library/Frameworks
,并且这个路径在$(inherited)
之前列出。
就我而言,两条路径都存在,但$(inherited)
是第一条路径。
感谢Apple Mach-O链接器上的https://stackoverflow.com/users/181947/brian-clear(id )警告:为MacOSX构建,但是为iOS构建的dylib链接
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.