将${SRCROOT}/Pods/Firebase/CoreOnly/Sources
添加到单元测试目标的“标题搜索路径”中,此问题已解决。步骤:
最近几天我一直在用这种方法撞墙,但是尽管进行了多次Google / SO / Github搜索,但我找不到解决所遇到问题的方法!
[我要做的就是为我的应用程序创建一些使用Firebase容器的单元测试。
我正在使用Xcode 7.3.1和Cocoapods 1.0.1。 更新: Xcode 8.0仍然存在问题
使用此Podfile:
platform :ios, '9.0'
use_frameworks!
inhibit_all_warnings!
target 'MyApp' do
pod 'Firebase'
pod 'Firebase/Auth'
pod 'Firebase/Database'
pod 'Firebase/Storage'
target 'MyAppTests' do
inherit! :search_paths
end
end
在我的XCTest类中,我得到
缺少必需的模块'Firebase'
@testable import MyApp
处的错误
或者与此podfile:
platform :ios, '9.0'
use_frameworks!
inhibit_all_warnings!
def common_pods
pod 'SwiftyTimer'
pod 'Firebase'
pod 'Firebase/Auth'
pod 'Firebase/Database'
pod 'Firebase/Storage'
end
target 'MyApp' do
common_pods
end
target 'MyAppTests' do
common_pods
end
测试已建立,但我的控制台上满是警告,例如:
Class 在... MyApp ...和... MyAppTests ...将使用两者之一。哪一个未定义
我有同样的问题。我通过将pod 'Firebase'
移到我的测试目标来解决此问题。将您的Podfile更改为此:
platform :ios, '9.0'
use_frameworks!
inhibit_all_warnings!
target 'MyApp' do
pod 'Firebase/Auth'
pod 'Firebase/Database'
pod 'Firebase/Storage'
target 'MyAppTests' do
inherit! :search_paths
pod 'Firebase'
end
end
添加“ $ {PODS_ROOT} / Firebase / Core / Sources”仅在构建设置-> 标题搜索路径
如@Will所述,在CocoaPods安装之后,有关Header Search Paths的问题。
我有一个具有多个目标的项目,其中将Pod'Firebase'嵌入到单独的模块中,可以说MyProject-Shared
。仅针对“ MyProject-Shared”目标安装了“ Podfile”中的Firebase Pod。想要使用“ MyProject-Shared”的其他模块由于错误而无法编译:
'缺少必需的模块“ Firebase”'
在我的情况下,诀窍是在每个目标的构建设置上引用以下Analytics-Framework]:]添加以下缺少的标题搜索路径:
"${PODS_ROOT}/Firebase/CoreOnly/Sources"
希望它可以节省您的时间。
将${SRCROOT}/Pods/Firebase/CoreOnly/Sources
添加到单元测试目标的“标题搜索路径”中,此问题已解决。步骤:
此后测试可以运行,并且错误将消失。
Missing required module Firebase
否CocoaPods解决方案对于那些遇到相同问题但不使用CocoaPods的人:
[如果您使用的是Firebase,那么您将拥有一些包含Firebase.h
和module.modulemap
文件的文件夹。例如-YOUR_PROJECT_DIR/Linking
如果您的主项目目标以正确的方式工作,则应转到ProjectSettings->目标。选择测试目标。搜索User headers
,然后将路径添加到YOUR_PROJECT_DIR/Linking
。选择recursive
选项,您应该会很好。
请参见屏幕快照以获取更多详细信息:
将${SRCROOT}/Pods/Firebase/CoreOnly/Sources
添加到单元测试目标的“标题搜索路径”中,此问题已解决。步骤:
Missing required module Firebase
否CocoaPods解决方案尝试将继承更改为:complete
,如下所示:
target 'MyAppTests' do
inherit! :complete
end
重要的是,它允许其他任何人签出您的存储库,像往常一样执行pod update
,而不必复制.xcconfig
文件或其他仅用于构建的黑客工具。
[问题是,在CocoaPods为设置生成自己的值之后,Firebase对标题搜索路径做了一些特殊的设置,因此CocoaPods不会接受此更改以将其传递到测试目标。您可以通过以下两种方法之一解决此问题:
在文件导航器中找到MyAppTests.<configuration>.xcconfig
,然后将以下内容添加到HEADER_SEARCH_PATHS
:
${PODS_ROOT}/Firebase/Analytics/Sources
[*]
在“构建设置”中找到Header Search Paths的设置,并将与选项1相同的值添加到列表中。您无需将其设置为递归。
*根据AKM的评论,在3.14.0版本中此更改为${PODS_ROOT}/Firebase/Core/Sources
问题记录在此处的Firebase项目中:
https://github.com/firebase/firebase-ios-sdk/issues/58
有一种解决方法:
仅将“ $ {PODS_ROOT} / Firebase / Core / Sources”添加到“测试”目标中在构建设置->标题搜索路径下
但是通过升级到CocoaPods 1.4.0或更高版本也可以解决,这是一个更好的解决方案。
[在撰写本文时(2017年11月),cocoapods 1.4.0仍处于beta中,因此,要安装它,您需要明确要求beta:
gem install cocoapods --pre
然后执行pod install
解决了运行测试的问题。
我可以先完成此工作的三个步骤:
CocoaPods:1.5.0斯威夫特4Firebase:4.13.0
步骤1:确保将以下目标块添加到您的Podfile中。
# Uncomment the next line to define a global platform for your project
platform :ios, '11.3'
target 'TIMII' do
# Comment the next line if you're not using Swift and don't want to use dynamic frameworks
use_frameworks!
# Pods for TIMII
pod 'Firebase/Core'
pod 'Firebase/Database'
pod 'Firebase/Auth'
pod 'Firebase/Storage'
target 'TIMIITests' do
inherit! :search_paths
pod 'Firebase/Core'
end
end
步骤2:在YourAppTests项目导航器的“构建设置”选项卡中。找到“标题搜索路径”行,并添加到“调试”以下行
$(继承)$ {PODS_ROOT} / Firebase / Core / Sources
步骤3:在终端运行:
pod更新
对我来说,解决方案是将cocoapods更新到版本1.1.0.rc.2。
sudo gem install cocoapods --pre
我尝试了以上所有操作,并遇到了各种不同的错误,最初是从Missing required module 'Firebase'
开始,如果尝试将Firebase Pod添加到测试目标中,则会出现"Class ... is implemented in both ... "
或链接器问题。
对我有用的解决方案是:
$(inherited) non-recursive
$(SRCROOT)/Pods/Headers/Public recursive
$(SRCROOT)/Pods/Firebase recursive
此时,清理构建文件夹,重新构建然后重新运行对我有用的测试。希望这对某人有帮助!
我有类似的问题。关于您的问题,我将MyApp.<configuration>.xcconfig
文件的内容复制到了MyAppTests.<configuration>.xcconfig
文件中。我清理并构建了测试,并且可以正常工作。