Chacune des solutions que j'ai vues à ce problème a semblé soit inélégante (copier les en-têtes dans le projet de l'application) soit trop simplifiée au point qu'elles ne fonctionnent que dans des situations triviales.
La réponse courte
Ajoutez le chemin suivant à vos chemins de recherche d'en-tête utilisateur
"$ (BUILD_ROOT) /../ IntermediateBuildFilesPath / UninstalledProducts"
Pourquoi ça marche?
Premièrement, nous devons comprendre le problème. Dans des circonstances normales, c'est-à-dire lorsque vous exécutez, testez, profilez ou analysez , Xcode construit votre projet et place la sortie dans le répertoire Build / Products / Configuration / Products, qui est disponible via la macro $ BUILT_PRODUCTS_DIR .
La plupart des guides concernant les bibliothèques statiques recommandent de définir le chemin du dossier des en-têtes publics sur $ TARGET_NAME , ce qui signifie que votre fichier lib devient $ BUILT_PRODUCTS_DIR /libTargetName.a et vos en-têtes sont placés dans $ BUILT_PRODUCTS_DIR / TargetName. Tant que votre application inclut $ BUILT_PRODUCTS_DIR dans ses chemins de recherche, les importations fonctionneront dans les 4 situations ci-dessus. Cependant, cela ne fonctionnera pas lorsque vous essayez d'archiver.
L'archivage fonctionne un peu différemment
Lorsque vous archivez un projet, Xcode utilise un dossier différent appelé ArchiveIntermediates. Dans ce dossier, vous trouverez / YourAppName / BuildProductsPath / Release-iphoneos /. C'est le dossier vers lequel pointe $ BUILT_PRODUCTS_DIR lorsque vous effectuez une archive. Si vous regardez là-dedans, vous verrez qu'il y a un lien symbolique vers votre fichier de bibliothèque statique construit mais le dossier avec les en-têtes est manquant.
Pour trouver les en-têtes (et le fichier lib), vous devez accéder à IntermediateBuildFilesPath / UninstalledProducts /. Rappelez-vous quand on vous a dit de définir Ignorer l'installation sur OUI pour les bibliothèques statiques? Eh bien, c'est l'effet de ce paramètre lorsque vous créez une archive.
Remarque: si vous ne le configurez pas pour ignorer l'installation, vos en-têtes seront placés dans un autre emplacement et le fichier lib sera copié dans votre archive, vous empêchant d'exporter un fichier .ipa que vous pouvez soumettre à l'App Store .
Après de nombreuses recherches, je n'ai trouvé aucune macro qui correspond exactement au dossier UninstalledProducts, d'où la nécessité de construire le chemin avec "$ (BUILD_ROOT) /../ IntermediateBuildFilesPath / UninstalledProducts"
Résumé
Pour votre bibliothèque statique, assurez-vous que vous ignorez l'installation et que vos en-têtes publics sont placés dans $ TARGET_NAME.
Pour votre application, définissez les chemins de recherche de vos en-têtes utilisateur sur "$ (BUILT_PRODUCTS_DIR)", ce qui fonctionne bien pour les builds standards, et "$ (BUILD_ROOT) /../ IntermediateBuildFilesPath / UninstalledProducts", qui fonctionne pour les builds d'archives.