在Xcode 6中构建的旧项目中找不到XCTest / XCTest.h

时间:2014-06-18 00:48:13

标签: ios xcode cocoapods xctest

我有一些项目我试图用Xcode 6 Beta 2构建。这些项目都有某种类型的库,它使用XCTest(Kiwi / XCTest和Specta),不能在Xcode 6中构建因为找不到XCTest / XCTest.h。

fatal error: 'XCTest/XCTest.h' file not found
#import <XCTest/XCTest.h>

我注意到XCTest.framework不再出现在带有二进制文件的#34;链接库中。构建阶段列表,但这很好,因为当我使用Xcode 6创建一个 new 项目时,看起来库是自动链接的。

也许是一些相关性,我的XCTest需要的依赖项都是通过Cocoapods引入的。

有什么我不知道我需要用我的项目更新吗?

10 个答案:

答案 0 :(得分:136)

注意:对于在Xcode 7中创建的任何项目,可能不需要这样做。

CocoaPods修复了此herehere


为了解决任何CocoaPod依赖项的问题,您需要在需要XCTest的任何Pod目标中将以下内容添加到FRAMEWORK_SEARCH_PATHS(例如Kiwi,Specta,FBSnapshotTestCase等)。

$(PLATFORM_DIR)/Developer/Library/Frameworks

screenshot

这将允许您在任何可能的依赖项中引用XCTest。这可以在CocoaPods的未来更新或您引用的Pod中修复,因此您可能希望稍后将其删除。

它对早期版本的Xcode没有害处,所以应该可以安全使用。

答案 1 :(得分:35)

我正在一个项目中移动文件。 您需要做的只是选择您的测试文件xxxTests.m等,并在file inspector选择target作为test,而不是常规目标。

答案 2 :(得分:17)

我注意到XCTest只能用于测试目标(在Xcode 6中)。如果您将XCTest用于任何其他目标(无论出于何种原因),您将看到XCTest.h not found错误。

答案 3 :(得分:11)

@squarefrog有right answer,但每次更新广告连播时,您都必须手动执行此操作:(

如果将其添加到podfile,它将自动为您添加额外路径。例如。如果您想将$(PLATFORM_DIR)/Developer/Library/Frameworks添加到FRAMEWORK_SEARCH_PATHS进行Specta:

post_install do |installer|
    target = installer.project.targets.find { |t| t.to_s == "Pods-Tests-Specta" }
    if (target)
        target.build_configurations.each do |config|
            s = config.build_settings['FRAMEWORK_SEARCH_PATHS']
            s = [ '$(inherited)' ] if s == nil;
            s.push('$(PLATFORM_DIR)/Developer/Library/Frameworks')
            config.build_settings['FRAMEWORK_SEARCH_PATHS'] = s
        end
    else
        puts "WARNING: Pods-Tests-Specta target not found"
    end
end

答案 4 :(得分:9)

如果添加了在测试目标之外使用XCTest的文件,则会出现此错误。要在AppCode中修复此问题,您可以右键单击任何可疑文件,然后选择“管理目标”。然后确保只检查测试目标。

答案 5 :(得分:2)

一段时间后,我从构建阶段导入XCTest框架并解决了问题后,我遇到了同样的问题。

构建阶段 - &gt; XCTest.Framework&gt;清理并运行。我希望它会对某些人有帮助。

供您参考...... Import XCTest in to existing project

答案 6 :(得分:1)

截至撰写本文时,最新版本的Cocoapods(0.33.1)无法解决问题。

但是最前沿的版本确实如此。

按照this guide从源设置最新版本的Cocoapods。我称之为pod-dev(在指南中介绍),以区别于宝石安装版本的豆荚。

此方法的好处是您的Podfile中不需要额外的脚本。您只需记住执行pod-dev install而不是通常的pod install

答案 7 :(得分:1)

拥有XCTest的最佳方法是从Test Nagigator(左侧窗格中的第5个图标)添加它。

表示如此,新的xx.m测试文件不会(在右侧窗格中)定位应用程序(在左窗格中&gt; Target,Wrapper Extension:app),而是一个包(Wrapper Extension:xctest)< / p>

  • XCTest.framework仍为Red,
  • 由于某些修改,您可能会收到错误'XCTest/XCTest.h' file not found,这是因为您的文件必须定位应用。

答案 8 :(得分:0)

这是我发现的最简单的解决方法。无需更改项目。此更改将持续到您的下一次Xcode升级:

cd /Applications/Xcode6-Beta7.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator8.0.sdk/Developer/Library/Frameworks
ln -s ../../../../../Library/Frameworks/XCTest.framework

答案 9 :(得分:0)

在一个没有Cocoapods的项目上(所以没有直接回答OP的问题但可能对我或将来的其他人有帮助),我们遇到了同样的问题。它是通过用XCTest替换我们以前的OCTest项目来解决的。例如,文件MyApp.xcodeproj / project.pbxproj具有此差异(缩短); - path = MyAppUnitTests.octest; sourceTree = BUILT_PRODUCTS_DIR; }; + path = MyAppUnitTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };