Ciascuna delle soluzioni che ho visto a questo problema è sembrata inelegante (copiando le intestazioni nel progetto dell'applicazione) o eccessivamente semplificata al punto che funzionano solo in situazioni banali.
La risposta breve
Aggiungi il seguente percorso ai percorsi di ricerca dell'intestazione utente
"$ (BUILD_ROOT) /../ IntermediateBuildFilesPath / UninstalledProducts"
Perché funziona?
Innanzitutto, dobbiamo capire il problema. In circostanze normali, vale a dire quando si esegue, si verifica, si profila o si analizza, Xcode crea il progetto e inserisce l'output nella directory Build / Products / Configuration / Products, disponibile tramite la macro $ BUILT_PRODUCTS_DIR .
La maggior parte delle guide relative alle librerie statiche consiglia di impostare il percorso della cartella delle intestazioni pubbliche su $ TARGET_NAME , il che significa che il file lib diventa $ BUILT_PRODUCTS_DIR /libTargetName.a e le intestazioni vengono inserite in $ BUILT_PRODUCTS_DIR / TargetName. Finché la tua app include $ BUILT_PRODUCTS_DIR nei suoi percorsi di ricerca, le importazioni funzioneranno nelle 4 situazioni sopra indicate. Tuttavia, questo non funzionerà quando si tenta di archiviare.
L'archiviazione funziona in modo leggermente diverso
Quando archivi un progetto, Xcode utilizza una cartella diversa chiamata ArchiveIntermediates. All'interno di quella cartella troverai / YourAppName / BuildProductsPath / Release-iphoneos /. Questa è la cartella a cui punta $ BUILT_PRODUCTS_DIR quando si esegue un archivio. Se guardi lì, vedrai che c'è un collegamento simbolico al file della libreria statica creata ma manca la cartella con le intestazioni.
Per trovare le intestazioni (e il file lib) devi andare su IntermediateBuildFilesPath / UninstalledProducts /. Ricordi quando ti è stato detto di impostare Skip Install su YES per le librerie statiche? Bene, questo è l'effetto che l'impostazione ha quando crei un archivio.
Nota a margine: se non lo imposti per saltare l'installazione, le intestazioni verranno inserite in un'altra posizione e il file lib verrà copiato nel tuo archivio, impedendoti di esportare un file .ipa che puoi inviare all'App Store .
Dopo molte ricerche, non sono riuscito a trovare alcuna macro che corrispondesse esattamente alla cartella UninstalledProducts, da qui la necessità di costruire il percorso con "$ (BUILD_ROOT) /../ IntermediateBuildFilesPath / UninstalledProducts"
Sommario
Per la tua libreria statica, assicurati di saltare l'installazione e che le tue intestazioni pubbliche siano inserite in $ TARGET_NAME.
Per la tua app, imposta i percorsi di ricerca dell'intestazione utente su "$ (BUILT_PRODUCTS_DIR)", che funziona bene per build regolari, e "$ (BUILD_ROOT) /../ IntermediateBuildFilesPath / UninstalledProducts", che funziona per build di archivio.