7

我刚刚开始使用 cocoapods 来管理我的 iOS 项目的依赖关系。目前我正在尝试使用 GHIOSUnit 集成单元测试。我遵循了他们的所有指示并尝试了他们的样本测试,这一切都像魅力一样。

项目设置 1 在此处输入图像描述

但是,当我开始使用我的实际项目文件进行测试时,问题就开始了。

我将 AFNetworking 用于客户端服务器通信,每当我访问名为“CRLClient”的共享客户端(AFHTTPClient 的包装器)时,它都会给我未定义的符号错误。

Undefined symbols for architecture armv7:
  "_OBJC_METACLASS_$_AFHTTPClient", referenced from:
      _OBJC_METACLASS_$_CRLClient in CRLClient.o
  "_OBJC_CLASS_$_AFJSONRequestOperation", referenced from:
      objc-class-ref in CRLClient.o
  "_OBJC_CLASS_$_AFHTTPClient", referenced from:
      _OBJC_CLASS_$_CRLClient in CRLClient.o
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)

管理依赖的 pod 文件是这样的

workspace 'Storyboards.xcworkspace'
platform :ios, '5.0'
pod 'AFNetworking', '1.1.0'
target :UnitTests, :exclusive => true do
pod 'GHUnitIOS', '0.5.6'
end

实际的项目目标构建良好,并与 AFNetworking 完美配合。

PS 我需要添加所有要测试的文件以添加到 UnitTest 目标中。那么在构建阶段添加“目标依赖”有什么作用呢?

在此处输入图像描述 在此处输入图像描述

简而言之,

  1. 如何在不同目标之间共享公共依赖关系?
  2. 如果我仍然必须将每个文件添加到新目标,添加目标依赖项真的会做什么?
4

1 回答 1

18

通过使用

target :UnitTests, :exclusive => true do
  pod 'GHUnitIOS', '0.5.6'
end

您是说您想要链接到目标的唯一库主要UnitTestsGHUnit说您也不想AFNetworking被链接。问题是您似乎还将您的AFHTTPClient子类导入到UnitTests它无法找到它试图链接到的 AFNetworking 组件的地方。

要解决此问题,您应该能够删除独占呼叫

target :UnitTests do
  pod 'GHUnitIOS', '0.5.6'
end

有了这个,您将GHUnit只链接到您的UnitTests目标,但将链接AFNetworking到两者。“默认情况下,目标将包括在块之外定义的依赖项,除非给出 :exclusive => true 选项。” (从这里

于 2013-03-21T13:02:58.870 回答