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

Eri*_*ber 80 xcode ios 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>
Run Code Online (Sandbox Code Playgroud)

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

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

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

squ*_*rog 139

注意:在Xcode 7中创建的任何项目可能都不需要这样.

CocoaPods在这里这里有一个解决方案


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

$(PLATFORM_DIR)/Developer/Library/Frameworks

截图

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

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

  • 这似乎不适用于xcode 6 GM中的KIM ..? (6认同)
  • 我不同意"与Xcode 7无关".我在Xcode 7.1中遇到了问题.在我按照上面的指示添加了框架搜索路径后,问题就消失了.我认为在Xcode 7中启动的项目不会有问题,但这里的问题是在较新的Xcode中构建较旧的项目. (3认同)

Jak*_*lář 38

我正在一个项目中移动文件.您所要做的就是选择您的测试文件xxxTests.m等,然后file inspector选择targetas test而不是常规目标.

  • 对我有用的简单答案。我在重命名文件时遇到了问题,这就是我的解决方案。 (2认同)

Mus*_*afa 17

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

  • 什么是修复? (5认同)
  • 那么...解决方法是什么? (2认同)

dea*_*rne 11

@squarefrog有正确的答案,但每次更新你的pod时你都必须手动完成:(

如果将其添加到podfile,它将自动为您添加额外路径.例如,如果你想添加$(PLATFORM_DIR)/Developer/Library/FrameworksFRAMEWORK_SEARCH_PATHSSpecta:

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
Run Code Online (Sandbox Code Playgroud)


Tas*_*iwa 10

添加了在测试目标之外使用XCTest的文件时,会出现此错误.要在AppCode中修复此问题,您可以右键单击任何可疑文件并选择"管理目标",然后确保仅选中测试目标.


Eri*_*ber 0

重新审视我的老问题,从 Xcode 11 开始你可以设置

ENABLE_TESTING_SEARCH_PATHS = YES
Run Code Online (Sandbox Code Playgroud)

在你的目标中