CocoaPods项目结构,用于使用私有组件进行单元测试

时间:2013-12-13 06:38:05

标签: ios cocoapods project-structure

我正在将CocoaPods用于具有以下结构的项目:

Example/
Example/PublicUmbrellaHeader.h
Example/PrivateHeaderForComponent1.h
Example/PrivateHeaderForComponent2.h
Example.podspec
Tests/
Tests/Podfile
Tests/Tests/UnitTestForPrivateComponent1.m
Tests/Tests/UnitTestForPrivateComponent2.m

测试/ Podfile

pod 'Example', :path => '../'

这并不罕见。例如,AFNetworking遵循类似的结构。 的不同之处在于需要仅将一组标题暴露给单元测试。

然而,我无法找到一种直截了当的方法来实现这一目标。该 以下方法有效,但在需要手术的意义上它并不干净 公众Podspec

Example.podspec

s.public_header_files = 'Example/PublicUmbrellaHeader.h'
s.default_subspec = 'Public'
s.subspec 'Public'
s.subspec 'Tests' do |ss|
   ss.public_header_files = 'Example/*.h'
end

测试/ Podfile

pod 'Example', :path => '../'
pod 'Example/Tests', :path => '../'

有更简单的方法吗?如果没有,是因为我想要完成的事情有什么问题,或者仅仅是因为CocoaPods不适合这个用例呢?

1 个答案:

答案 0 :(得分:3)

您可以直接修改Example项目中的测试目标,以在Header搜索路径中包含私有标头。只需进入单元测试目标,然后在搜索路径 - >>下标题搜索路径,添加:

$(inherited) "${PODS_ROOT}/Headers/Private/Example"

在单元测试文件中,您可以包含如下标题:

#import "PrivateHeaderForComponent1.h"
#import "PrivateHeaderForComponent2.h"

而不是典型的#import <Example/PrivateHeaderForComponent1.h>

缺点是您正在假设CocoaPods如何布置Pods目录中的文件,但我宁愿这样做也不要改变我的公共podspec文件。