在Xcode 6中内置的旧项目中找不到XCTest / XCTest.h

我正在尝试使用Xcode 6 Beta 2构build一些项目。这些项目都有一些使用XCTest(Kiwi / XCTest和Specta)的库,不会在Xcode 6中生成,因为XCTest / XCTest.h不能被发现。

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

我注意到XCTest.framework不再处于“链接库与二进制”构build阶段列表,但这很好,因为当我用Xcode 6创build一个项目时,它显示库自动链接。

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

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

注意:在Xcode 7中创build的项目可能不需要。

CocoaPods在这里和这里有一个修复


为了解决这个任何CocoaPod依赖关系,你需要添加以下任何需要XCTest的Pod目标FRAMEWORK_SEARCH_PATHS(如Kiwi,Specta,FBSnapshotTestCase等)。

$(PLATFORM_DIR)/Developer/Library/Frameworks

截图

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

这对Xcode的早期版本不是有害的,所以应该是安全的。

我在项目周围移动文件。 所有你需要做的就是select你的testing文件xxxTests.m等,并在file inspectorselecttarget作为test而不是作为一个正常的目标。

我注意到XCTest只能用于testing目标(在XCode 6中)。 如果您使用XCTest作为其他目标(无论出于何种原因),则会看到XCTest.h not found错误。

@squarefrog有正确的答案,但是你必须每次更新你的豆荚时手动继续

如果你把它添加到你的podfile中,它会自动为你添加额外的path。 例如,如果您想为Specta添加$(PLATFORM_DIR)/Developer/Library/FrameworksFRAMEWORK_SEARCH_PATHS

 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 

当您在testing目标之外添加了XCTest正在使用的文件时,会出现此错误。 要在AppCode中修复此问题,您可以右键单击任何可疑文件并select“pipe理目标”,然后确保仅检查testing目标。

一段时间后,我从构build阶段导入了XCTest框架,并解决了这个问题,我也面临同样的问题。

构build阶段 – > XCTest.Framework>清理并运行。 我希望这会对一些人有所帮助

供您参考…将XCTest导入到现有项目中

截至写作时,最新版本的Cocoapods(0.33.1)没有解决这个问题。

但最尖端的版本呢。

按照本指南从源头上设置最新版本的Cocoapods。 我打电话给我的pod-dev (在指南中介绍),将它与gem安装版本的pod区分开来。

这种方法的好处是你的Podfile不需要额外的脚本。 你只需要记得做一个pod-dev install而不是通常的pod install

这是我find的最简单的解决方法。 没有项目变化是必要的。 这个改变将持续到您的下一次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 

在一个没有Cocoapods的项目上(所以不直接回答OP的问题,但对未来可能对我或其他人有帮助),我们也遇到同样的问题。 这是通过用XCTestreplace我们以前的OCTest项目解决的。 例如,文件MyApp.xcodeproj / project.pbxproj有这个diff(缩写); - path = MyAppUnitTests.octest; sourceTree = BUILT_PRODUCTS_DIR; }; + path = MyAppUnitTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };

有一个XCTest的最好方法是从testingNagigator(左窗格中的第5个图标)添加它。

因此,新的xx.mtesting文件不会在右窗格中定位应用程序(在左侧窗格>目标,包装器扩展:应用程序中),而是一个包(包装器扩展:xctest)

  • XCTest.framework仍然在红色,
  • 由于一些修改你可以有错误'XCTest/XCTest.h' file not found ,这是因为你的文件必须针对一个应用程序。

将以下内容添加到框架searchpath中

 /Applications/Xcode6-Beta.app/Contents/Developer/Library/Frameworks