在使用 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”的主要内容,如果未能解决你的问题,请参考以下文章

使用 Cocoapods 管理多个目标的依赖关系

iOS 单元测试在 CocoaPods Google Maps SDK 上失败

cocoapods 库的代码覆盖率 - iOS 单元测试

删除所有测试 pod 时,Cocoapods 缺少 pod 包含文件

在获得的项目上安装 Cocoapods 时遇到问题

Xcode 9.4 未显示单元测试