Każde z rozwiązań tego problemu, które widziałem, wydawało mi się albo nieeleganckie (kopiowanie nagłówków do projektu aplikacji) lub nadmiernie uproszczone do tego stopnia, że działają tylko w trywialnych sytuacjach.
Krótka odpowiedź
Dodaj następującą ścieżkę do ścieżek wyszukiwania nagłówków użytkownika
„$ (BUILD_ROOT) /../ IntermediateBuildFilesPath / UninstalledProducts”
Dlaczego to działa?
Najpierw musimy zrozumieć problem. W normalnych okolicznościach, to znaczy podczas uruchamiania, testowania, profilowania lub analizowania, Xcode buduje projekt i umieszcza dane wyjściowe w katalogu Build / Products / Configuration / Products, który jest dostępny za pośrednictwem $ BUILT_PRODUCTS_DIR makra .
Większość poradników dotyczących bibliotek statycznych zaleca ustawienie ścieżki do folderu nagłówków publicznych na $ TARGET_NAME , co oznacza, że plik lib staje się $ BUILT_PRODUCTS_DIR /libTargetName.a, a nagłówki są umieszczane w $ BUILT_PRODUCTS_DIR / TargetName. Dopóki Twoja aplikacja zawiera $ BUILT_PRODUCTS_DIR w swoich ścieżkach wyszukiwania, import będzie działał w 4 sytuacjach podanych powyżej. Jednak to nie zadziała podczas próby archiwizacji.
Archiwizacja działa trochę inaczej
Podczas archiwizowania projektu Xcode używa innego folderu o nazwie ArchiveIntermediates. W tym folderze znajdziesz / YourAppName / BuildProductsPath / Release-iphoneos /. To jest folder, na który wskazuje $ BUILT_PRODUCTS_DIR podczas archiwizacji. Jeśli zajrzysz tam, zobaczysz, że istnieje dowiązanie symboliczne do zbudowanego pliku biblioteki statycznej, ale brakuje folderu z nagłówkami.
Aby znaleźć nagłówki (i plik lib), musisz przejść do IntermediateBuildFilesPath / UninstalledProducts /. Pamiętasz, kiedy powiedziano ci, aby ustawić opcję Pomiń instalację na TAK dla bibliotek statycznych? Taki jest efekt, jaki ma ustawienie podczas tworzenia archiwum.
Uwaga dodatkowa: jeśli nie ustawisz opcji pomijania instalacji, nagłówki zostaną umieszczone w jeszcze innej lokalizacji, a plik lib zostanie skopiowany do archiwum, uniemożliwiając eksport pliku .ipa, który można przesłać do App Store .
Po wielu poszukiwaniach nie udało mi się znaleźć żadnego makra, które dokładnie odpowiada folderowi UninstalledProducts, stąd potrzeba skonstruowania ścieżki z „$ (BUILD_ROOT) /../ IntermediateBuildFilesPath / UninstalledProducts”
Podsumowanie
W przypadku biblioteki statycznej upewnij się, że pomijasz instalację i że Twoje publiczne nagłówki są umieszczone w $ TARGET_NAME.
W przypadku aplikacji ustaw ścieżki wyszukiwania nagłówków użytkownika na „$ (BUILT_PRODUCTS_DIR)”, co działa dobrze w przypadku zwykłych kompilacji, oraz na „$ (BUILD_ROOT) /../ IntermediateBuildFilesPath / UninstalledProducts”, co działa w przypadku kompilacji archiwalnych.