CocoaPods project structure for unit testing with private components

Viewed 950

I am using CocoaPods for a project with the following structure:

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

Tests/Podfile

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

This is not unusual. For example, AFNetworking follows a similar structure. What is different is the need to expose a certain set of headers only to the unit tests.

However, I could not figure out a straightforward way to do this accomplish this. The following method works, but it is not clean in the sense that it requires surgery on the public 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

Tests/Podfile

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

Is there a simpler way? If not, is it because there is something wrong with what I am trying to accomplish, or simply because CocoaPods does not cater to this use case yet?

1 Answers
Related