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我刚刚从 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
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