XCTest.framework 构建错误

Posted

技术标签:

【中文标题】XCTest.framework 构建错误【英文标题】:XCTest.framework build error 【发布时间】:2013-09-10 06:28:39 【问题描述】:

我在我的应用程序中使用 DropBox Core API,因此,我必须包含 XCTest 框架,因为当我没有添加 XCTest 框架时,我的应用程序无法连接到 Dropbox,但是当我添加框架,在为模拟器构建时出现错误。我的代码没有任何问题!这是错误:

Ld /Users/Zach/Library/Developer/Xcode/DerivedData/SnapDrop!-fchnxyvnqyeefscfhmohrzxtiqeb/Build/Products/Debug-iphonesimulator/SnapDrop!.app/SnapDrop! normal i386
    cd "/Users/Zach/Desktop/SnapDrop!"
    setenv IPHONEOS_DEPLOYMENT_TARGET 6.1
    setenv PATH "/Applications/Xcode5-DP6.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Applications/Xcode5-DP6.app/Contents/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
    /Applications/Xcode5-DP6.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch i386 -isysroot /Applications/Xcode5-DP6.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.0.sdk -L/Users/Zach/Library/Developer/Xcode/DerivedData/SnapDrop!-fchnxyvnqyeefscfhmohrzxtiqeb/Build/Products/Debug-iphonesimulator -F/Users/Zach/Library/Developer/Xcode/DerivedData/SnapDrop!-fchnxyvnqyeefscfhmohrzxtiqeb/Build/Products/Debug-iphonesimulator -F/Users/Zach/Downloads/dropbox-ios-sdk-1.3.5 -F/Users/Zach/Downloads/dropbox-ios-sync-sdk-1-1.1.0 -F/Applications/Xcode5-DP6.app/Contents/Developer/Library/Frameworks -F/Users/Zach/Desktop -filelist /Users/Zach/Library/Developer/Xcode/DerivedData/SnapDrop!-fchnxyvnqyeefscfhmohrzxtiqeb/Build/Intermediates/SnapDrop!.build/Debug-iphonesimulator/SnapDrop!.build/Objects-normal/i386/SnapDrop!.LinkFileList -Xlinker -objc_abi_version -Xlinker 2 -fobjc-arc -fobjc-link-runtime -Xlinker -no_implicit_dylibs -mios-simulator-version-min=6.1 -framework iAd -framework AssetsLibrary -framework QuartzCore -framework SystemConfiguration -framework Security -framework CFNetwork -framework XCTest -framework Dropbox -framework DropboxSDK -framework CoreGraphics -framework UIKit -framework Foundation -Xlinker -dependency_info -Xlinker /Users/Zach/Library/Developer/Xcode/DerivedData/SnapDrop!-fchnxyvnqyeefscfhmohrzxtiqeb/Build/Intermediates/SnapDrop!.build/Debug-iphonesimulator/SnapDrop!.build/Objects-normal/i386/SnapDrop!_dependency_info.dat -o /Users/Zach/Library/Developer/Xcode/DerivedData/SnapDrop!-fchnxyvnqyeefscfhmohrzxtiqeb/Build/Products/Debug-iphonesimulator/SnapDrop!.app/SnapDrop!

ld: building for iOS Simulator, but linking against dylib built for MacOSX file '/Applications/Xcode5-DP6.app/Contents/Developer/Library/Frameworks/XCTest.framework/XCTest' for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我该怎么办?如果我的框架损坏了,你能告诉我如何重新安装它吗?我试过删除并重新安装 Xcode,但没有成功。

【问题讨论】:

XCTest 是 Apple 的新单元测试框架。它应该只链接到单元测试目标,而不是你的实际应用程序。 【参考方案1】:

我同意迈克·韦勒的观点。您可能不应该在您的实际应用程序代码中链接 XCTest 框架。删除 XCTest 框架。查看链接器错误并删除引用框架的内容。清洗,冲洗,重复。

如果你有一个测试目标,那就不同了。在从 SenTestKit 迁移到 XCTest 的过程中很容易发生的情况是框架搜索路径错误,这会导致链接到 Mac OS X 框架而不是 iOS 框架。这行不通。

查看正确的框架搜索路径设置的一种简单方法是创建一个虚拟项目,打开测试目标的构建设置,然后过滤“框架搜索路径”。

我认为正确的原版路径是:

$(SDKROOT)/Developer/Library/Frameworks     (non-recursive)
$(inherited)                                (non-recursive)
$(DEVELOPER_FRAMEWORKS_DIR)                 (non-recursive)

【讨论】:

这对我有用。上面显示的路径对于 iOS 7 显然是正确的。迁移(或其他可能)将第一个路径设置为 "$(SDKROOT)/Developer/Library/Frameworks\",包括引号。删除引号和反斜杠是必要的。 看起来好像 XCode5 没有发现更改为框架路径选项。重新启动修复它。主要问题是指向开发工具的链接,并且路径上有开发工具DEVELOPER_FRAMEWORKS_DIR(只有 MacOSX x86 和 x64 版本)。 更正继承的拼写错误。谢谢! @veducm Spello 已修复。谢谢! 重构“Convert to XCTest...”对我来说肯定破坏了框架搜索路径(Xcode 5.0)。我必须编辑几个看起来像这样的路径:\"$(SDKROOT)/Developer/Library/Frameworks\" 以删除虚假的反斜杠。【参考方案2】:

添加此问题的可能解决方案:

确保您没有包含 MyApplicationTests.m 文件 在项目的非测试目标“编译源”列表中。

当您清理磁盘上的文件夹时可能会发生这种情况 例如,手动移动东西。

Project > Targets > MyApplication > Build Phases > Compile Sources

最明显的症状是您收到 XCTest 错误 尝试在 iPhone(或模拟器)上运行您的应用程序时。

XCTest 不应包含在您的常规应用程序代码中,如所述 在其他答案中也是如此。

【讨论】:

"确保您没有将 MyApplicationTests.m 文件包含在项目的非测试目标“编译源”列表中。" +1 这个提示。我在“#import ”行收到“'XCTest/XCTest.h' 文件未找到”错误,而删除 Tests.m 正是罪魁祸首! 一个常见的错误是添加测试目标-C 文件并标记错误的“添加目标”复选框。答案非常有用。谢谢!【参考方案3】:

我刚刚从 Project Navigator > Targets > 'Project Name' > Build Phases 中删除了“XCTest.Framework”文件。然后,“产品”(下拉)> 清洁。为我做的!

【讨论】:

【参考方案4】:

如果你有一个测试目标,你还应该确保它的Base SDK 设置为iOS 7.0(或者更好:Latest iOS

【讨论】:

【参考方案5】:

我应该补充一点:

我的项目所有路径都正确(这三个默认路径),但顺序不同。设置正确的顺序(通过在列表中用鼠标拖动路径)解决了这个问题。

【讨论】:

我将框架搜索路径的顺序更改为下一个:$(inherited)"$(DEVELOPER_LIBRARY_DIR)"$(SDKROOT)/Developer/Library/Frameworks"。它对我有用【参考方案6】:

检查主目标和测试目标的框架搜索路径。 我有很多废话

最简单的方法是创建一个新的单视图 ios 项目。 运行测试以查看它是否可以运行 - 默认情况下它会失败 然后检查主要和测试目标中的框架搜索路径。 并将其与您的项目进行比较

在这里查看我 brian.clear 的回答

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

【讨论】:

【参考方案7】:

以上方法都不适合我,我仍然得到错误,

ld:警告:提供了自动链接 '/Applications/Xcode.app/Contents/Developer/Library/Frameworks/XCTest.framework/XCTest', 文件中缺少所需的体系结构 i386 /Applications/Xcode.app/Contents/Developer/Library/Frameworks/XCTest.framework/XCTest (2片)

我使用了 XCode 6 的重构选项,将我正常运行的 SenTests 转换为 XCTests。

但是,当我将框架搜索路径设置为 时,

$(SDKROOT)/Developer/Library/Frameworks and 
$(inherited)

成功了。

【讨论】:

【参考方案8】:

您可以创建您的框架项目,这将是一个没有测试文件的 pod 项目。在创建项目时简单地取消选中测试。

【讨论】:

【参考方案9】:

这可能是一个原因:

如果您在两个目标“MyApplication”和“MyApplicationTests”中链接了 XCTest 框架。然后我们需要将“MyApplicationTests”文件中的“MyApplication”导入为

@testable import FlickrDemo

所以它会创建循环导入并导致 XCTest framework not found 问题。 简单的解决方案是从“MyApplication”目标中删除 XCTest 框架。

希望这会对某人有所帮助。

【讨论】:

以上是关于XCTest.framework 构建错误的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 5.0.2 dyld:库未加载:@rpath/XCTest.framework/Versions/A/XCTest

在非测试目标中使用 XCTest

iOS 报错信息: dyld: Library not loaded: @rpath/XCTest.framework/XCTest Referenced from:

dyld:库未加载:@rpath/XCTest.framework/XCTest 原因:找不到图像

iOS 报错信息: dyld: Library not loaded: @rpath/XCTest.framework/XCTest Referenced from

cocoa错误3840怎么解决