CocoaPods project structure for unit testing with private components

无人久伴 提交于 2019-12-06 04:44:40

问题


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:


You can directly modify the test target in your Example project to include the private headers in the Header Search Paths. Just go into your Unit Test target, and under Search Paths -> Header Search Paths, add:

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

In your unit test files, you can include the headers like so:

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

rather than the typical #import <Example/PrivateHeaderForComponent1.h>

The downside is you're making assumptions about how CocoaPods lays out the files in the Pods directory, but I would rather do that than change my public podspec file.



来源:https://stackoverflow.com/questions/20560540/cocoapods-project-structure-for-unit-testing-with-private-components

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!