在使用 Cocoapods 的项目中执行单元测试时,“两个都实现了 Class X”
Posted
技术标签:
【中文标题】在使用 Cocoapods 的项目中执行单元测试时,“两个都实现了 Class X”【英文标题】:"Class X is implemented in both" when executing unit tests in a project that use Cocoapods 【发布时间】:2015-10-20 09:52:07 【问题描述】:我向使用 Cocoapods 的现有项目添加了一个单元测试目标。
当我开始测试时,它运行 ios 模拟器,我在 Xcode 的控制台上收到了一堆警告:
Class PodsDummy_Pods 在两者中都实现 /Users/me/Library/Developer/CoreSimulator/Devices/604372F1-E934-445C-B8F6-3D8C86AA8E41/data/Containers/Bundle/Application/2A1BCAE6-5127-4288-B0E7-15588A1C09D1/MyAPP..app/MyApp。 和 /Users/me/Library/Developer/Xcode/DerivedData/MyApp-fzjqljiyaapspvaylhszcbkhtijd/Build/Products/Debug-iphonesimulator/MyAppTests.xctest/MyAppTests。 将使用两者之一。哪一个是未定义的。
我的项目使用的 pod 中包含的每个类都会出现此错误消息。
项目最后抛出EXC_BAD_ACCESS
当我在 Xcode 的控制台中输入bt
时,这个错误就像一个无限循环:
帧#130498:0x000000012626e897 MyAppTests`___lldb_unnamed_function42$$MyAppTests + 135
有什么建议吗?
【问题讨论】:
我没有答案,但我假设您尝试过清理和重建? 是的,我尝试过硬清理和重建,但我仍然有这个问题。 你有什么解决办法吗? 看到这个答案***.com/questions/33127896/… 你终于找到答案了吗?我刚刚遇到了它,这让我发疯了。 【参考方案1】:终于找到解决这个问题的方法了!在我这边,我的 swift 框架单元测试遇到了这个问题。我的 Podfile 是这样的:
def import_gtm
send :pod, 'GoogleTagManager', '~> 5.0.8'
end
target 'MyFramework' do
# Comment the next line if you're not using Swift and don't want to use dynamic frameworks
use_frameworks!
# Pods for MyFramework
import_gtm
end
target 'MyFrameworkTests' do
use_frameworks!
# Pods for testing
end
尽管我的测试执行正确,但我有大量的日志,就像 OP 一样。在阅读了这个Github issue 之后,我将我的 Podfile 更改为以下内容:
def import_gtm
send :pod, 'GoogleTagManager', '~> 5.0.8'
end
target 'MyFramework' do
# Comment the next line if you're not using Swift and don't want to use dynamic frameworks
use_frameworks!
# Pods for MyFramework
import_gtm
target 'MyFrameworkTests' do
inherit! :search_paths
end
end
我终于摆脱了所有这些警告日志!在重建之前尝试清理(cmd + alt + shift + K)或删除DerivedData文件夹内容:
rm -rf ~/Library/Developer/Xcode/DerivedData/*
我希望这会有所帮助!
【讨论】:
以上是关于在使用 Cocoapods 的项目中执行单元测试时,“两个都实现了 Class X”的主要内容,如果未能解决你的问题,请参考以下文章
iOS 单元测试在 CocoaPods Google Maps SDK 上失败