Structure du projet CocoaPods pour les tests unitaires avec des composants privés

J'utilise CocoaPods pour un projet avec la structure suivante:

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 => '../' 

Ce n'est pas inhabituel. Par exemple, AFNetworking suit une structure similaire. Ce qui est différent, c'est le besoin d'exposer un certain set d'en-têtes uniquement aux tests unitaires.

Cependant, je ne pouvais pas find un moyen simple de le faire. La méthode suivante fonctionne, mais elle n'est pas propre dans le sens où elle nécessite une intervention chirurgicale sur le Podspec public.

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 => '../' 

Y a-t-il un moyen plus simple? Si non, est-ce parce que quelque chose ne va pas avec ce que j'essaie d'accomplir, ou simplement parce que CocoaPods ne répond pas à ce cas d'utilisation?

Vous pouvez directement modifier la cible de test dans votre projet Exemple pour inclure les en-têtes privés dans les paths de search d'en-tête. Il suffit d'aller dans votre cible de test d'unité, et sous Search Paths -> Chemins de search d'en-tête , ajoutez:

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

Dans vos files de test unitaires, vous pouvez inclure les en-têtes comme suit:

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

plutôt que le #import <Example/PrivateHeaderForComponent1.h>

L'inconvénient est que vous faites des suppositions sur la façon dont CocoaPods expose les files dans le directory Pods, mais je préfère le faire que de changer mon file public podspec.