使用Cocoapods进行Xcode单元测试
过去几天里,我一直在用这种方式将我的头撞在墙上,但尽管有多个Google/SO/Github搜索,我无法找到解决我遇到的问题的解决方案!使用Cocoapods进行Xcode单元测试
我想要做的是为我的应用程序创建一些单元测试,它使用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类我得到
Missing required module 'Firebase'
误差在@testable import MyApp
或者:
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 <-FirebaseClassName-> is implemented in both ...MyApp... and ...MyAppTests... One of the two will be used. Which one is undefined
我有同样的问题。我通过将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
的问题是,火力地堡做的CocoaPods后一些特别的东西用头搜索路径生成用于设定自己的价值因此,为了实现它的CocoaPods不拿起这种变化超过测试目标。你可以解决两个方面,这一个:
-
找到
MyAppTests.<configuration>.xcconfig
在文件浏览,并添加以下到HEADER_SEARCH_PATHS
:${PODS_ROOT}/Firebase/Analytics/Sources
[*] 查找头搜索路径的设置,然后将相同的值添加到列表中的选项1中。您不需要将其设置为递归。
*按AKM的评论,这个变更为${PODS_ROOT}/Firebase/Core/Sources
版本3.14.0
我也有类似的问题。根据您的问题表达,我将我的MyApp.<configuration>.xcconfig
文件的内容复制到我的MyAppTests.<configuration>.xcconfig
文件中。我清理并构建了测试,并且工作正常。
这是唯一的解决方案,为我工作。谢谢!我正在考虑在Podfile中做一个安装后处理,这样做 – SauloT
尝试改变继承:complete
,如:
target 'MyAppTests' do
inherit! :complete
end
重要的是它允许任何人检查出你的回购只是做一个pod update
像往常一样,而无需复制.xcconfig
文件或其他两轮牛车刚刚建立。
这也有“Class ...在...中实现...”“问题 –
为我工作!谢谢 – cromandini
它使编译时错误消失,但在运行时导致此错误:clang:error:linker命令失败,退出代码1(使用-v查看调用) – CMont
的问题记录在火力项目在这里:
https://github.com/firebase/firebase-ios-sdk/issues/58
有一种变通方法:
Add "${PODS_ROOT}/Firebase/Core/Sources" to your Tests target only under Build Settings -> Header Search Paths
但这也是通过升级到CocoaPods 1.4.0或更高版本来解决的,这是一个更好的解决方案。
当时我在写这(十一月2017)的CocoaPods 1.4.0仍处于测试阶段,所以要安装它,你需要明确要求测试:
gem install cocoapods --pre
这解决了这个问题我跑试验。
我当时只使用Firebase Analytics。在转向Google分析之后,所有事情都像魅力一样。 – marosoaie
我还没有尝试过他自己,但我可能会尝试手动添加Firebase而不使用可可豆荚:https://firebase.google.com/docs/ios/setup#frameworks – Jonny