XCUITest构建失败:主目标文件#import提示'NYTPhotoViewerDataSource.h'未找到
XCUITest构建失败:'NYTPhotoViewerDataSource.h'文件找不到
问题场景
首次尝试使用Xcode的XCUITest Framework进行UI测试,按教程创建了新的UI Testing Bundle目标。运行HerdBossUITests.testExample()测试时,项目构建失败,仅XCUITest目标报错,主目标可正常构建。
报错信息
/path/to/code/BaseSyncableEntity.h:13:9: 'NYTPhotoViewerDataSource.h' file not found
报错代码行
#import <Foundation/Foundation.h> #import "BaseClonableEntity.h" #import <NYTPhotoViewerDataSource.h> // <-- 此行报错 #import <QuickLook/QuickLook.h>
Podfile配置
NYTPhotoViewer通过CocoaPods引入,当前Podfile仅为主目标配置依赖:
# Uncomment this line to define a global platform for your project platform :ios, '11.0' source 'https://github.com/CocoaPods/Specs.git' target 'HerdBoss' do use_modular_headers! pod 'AFNetworking', '~> 4.0' pod 'Firebase/Analytics' pod 'Firebase/Crashlytics' pod 'NYTPhotoViewer' end
完整构建日志
ProcessPCH /path/to/builddir/Build/Intermediates.noindex/PrecompiledHeaders/ SharedPrecompiledHeaders/2970504634487531785/HerdBoss-Prefix.pch.gch /path/to/code/HerdBoss/HerdBoss-Prefix.pch normal arm64 objective-c com.apple.compilers.llvm.clang.1_0.compiler (in target 'HerdBossTests' from project 'HerdBoss') cd /Users/kenny/inaday/svn-herdboss/trunk/apps/iOS/HerdBoss Precompile of '/path/to/code/HerdBoss/HerdBoss-Prefix.pch' required by '/path/to/code/HerdBossTests/HerdBossTests.m' /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -x objective-c-header -target arm64-apple-ios12.0-simulator -fmessage-length\=0 -fdiagnostics-show-note-include-stack -fmacro-backtrace-limit\=0 -std\=gnu99 -fobjc-arc -gmodules -Wno-trigraphs -fpascal-strings -O0 -fno-common -Wno-missing-field-initializers -Wno-missing-prototypes -Wunreachable-code -Wquoted-include-in-framework-header -Wno-implicit-atomic-properties -Wno-objc-interface-ivars -Wno-arc-repeated-use-of-weak -Wimplicit-retain-self -Wduplicate-method-match -Wno-missing-braces -Wparentheses -Wswitch -Wunused-function -Wno-unused-label -Wno-unused-parameter -Wunused-variable -Wunused-value -Wempty-body -Wuninitialized -Wno-unknown-pragmas -Wno-shadow -Wno-four-char-constants -Wno-conversion -Wconstant-conversion -Wint-conversion -Wbool-conversion -Wenum-conversion -Wno-float-conversion -Wnon-literal-null-conversion -Wobjc-literal-conversion -Wshorten-64-to-32 -Wpointer-sign -Wno-newline-eof -Wno-selector -Wno-strict-selector-match -Wundeclared-selector -Wdeprecated-implementations -Wno-implicit-fallthrough -DDEBUG\=1 -DOBJC_OLD_DISPATCH_PROTOTYPES\=0 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/ SDKs/iPhoneSimulator16.4.sdk -fstrict-aliasing -Wprotocol -Wdeprecated-declarations -g -Wno-sign-conversion -Winfinite-recursion -Wcomma -Wblock-capture-autoreleasing -Wstrict-prototypes -Wno-semicolon-before-method-body -fobjc-abi-version\=2 -fobjc-legacy-dispatch -index-store-path /path/to/builddir/Index.noindex/DataStore -iquote /path/to/builddir/intermediates/HerdBossTests-generated-files.hmap -I/path/to/builddir/intermediates/HerdBossTests-own-target-headers.hmap -I/path/to/builddir/intermediates/HerdBossTests-all-target-headers.hmap -iquote /path/to/builddir/intermediates/HerdBossTests-project-headers.hmap -I/path/to/builddir/Build/Products/Debug-iphonesimulator/include -I/path/to/builddir/intermediates/DerivedSources-normal/arm64 -I/path/to/builddir/intermediates/DerivedSources/arm64 -I/path/to/builddir/intermediates/DerivedSources -F/path/to/builddir/Build/Products/Debug-iphonesimulator -F/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/ SDKs/iPhoneSimulator16.4.sdk/Developer/Library/Frameworks -F/Applications/Xcode.app/Contents/Developer/Library/Frameworks -iframework /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/ Developer/Library/Frameworks -c /path/to/code/HerdBoss/HerdBoss-Prefix.pch -MD -MT dependencies -MF /path/to/builddir/Build/Intermediates.noindex/PrecompiledHeaders/ SharedPrecompiledHeaders/2970504634487531785/HerdBoss-Prefix.pch.d -iquote /path/to/builddir/intermediates/HerdBossTests-generated-files.hmap -I/path/to/builddir/intermediates/HerdBossTests-own-target-headers.hmap -I/path/to/builddir/intermediates/HerdBossTests-all-target-headers.hmap -iquote /path/to/builddir/intermediates/HerdBossTests-project-headers.hmap -I/path/to/builddir/Build/Products/Debug-iphonesimulator/include -I/path/to/builddir/intermediates/DerivedSources-normal/arm64 -I/path/to/builddir/intermediates/DerivedSources/arm64 -I/path/to/builddir/intermediates/DerivedSources -o /path/to/builddir/Build/Intermediates.noindex/PrecompiledHeaders/ SharedPrecompiledHeaders/2970504634487531785/HerdBoss-Prefix.pch.gch --serialize-diagnostics /path/to/builddir/Build/Intermediates.noindex/PrecompiledHeaders/ SharedPrecompiledHeaders/2970504634487531785/HerdBoss-Prefix.pch.dia In file included from /path/to/code/HerdBoss/HerdBoss-Prefix.pch:18: In file included from /path/to/code/HerdBoss/Classes/BaseTableViewController.h:12: In file included from /path/to/code/HerdBoss/Classes/AppController.h:14: In file included from /path/to/code/HerdBoss/Classes/Settings.h:11: /path/to/code/HerdBoss/Classes/BaseSyncableEntity.h:12:9: fatal error: 'NYTPhotoViewerDataSource.h' file not found #import <NYTPhotoViewerDataSource.h> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1 error generated.
问题原因
XCUITest目标(HerdBossTests)未配置NYTPhotoViewer的依赖,但编译时引用了主目标的前缀头文件(HerdBoss-Prefix.pch),该前缀头间接引入了依赖NYTPhotoViewer的头文件,导致测试目标找不到对应的库文件。
主目标因在Podfile中配置了依赖,CocoaPods自动为其添加了库的搜索路径和链接设置,可正常构建;而测试目标未被纳入Podfile的依赖配置,缺少这些必要的构建参数。
解决方案
修改Podfile,将测试目标纳入依赖配置范围,有两种方式可选:
方式1:为测试目标单独配置所需依赖
如果测试目标仅需要部分主目标的依赖,可单独声明:
platform :ios, '11.0' source 'https://github.com/CocoaPods/Specs.git' target 'HerdBoss' do use_modular_headers! pod 'AFNetworking', '~> 4.0' pod 'Firebase/Analytics' pod 'Firebase/Crashlytics' pod 'NYTPhotoViewer' # 为测试目标配置依赖 target 'HerdBossTests' do inherit! :search_paths pod 'NYTPhotoViewer' end end
方式2:让测试目标继承主目标的依赖
如果测试目标需要主目标的所有依赖,可通过继承简化配置:
platform :ios, '11.0' source 'https://github.com/CocoaPods/Specs.git' target 'HerdBoss' do use_modular_headers! pod 'AFNetworking', '~> 4.0' pod 'Firebase/Analytics' pod 'Firebase/Crashlytics' pod 'NYTPhotoViewer' # 测试目标继承主目标的搜索路径和依赖 target 'HerdBossTests' do inherit! :search_paths end end
修改完成后,执行以下命令更新CocoaPods配置:
pod install
重新打开项目的.xcworkspace文件,再次运行XCUITest即可正常构建。
内容的提问来源于stack exchange,提问作者Kenny Wyland
相关产品推荐
相关产品推荐

