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
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.
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
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.