Кожне з вирішень цієї проблеми, яке я бачив, здавалося або неелегантним (копіювання заголовків у проект програми), або надто спрощеним до того, що вони працюють лише в тривіальних ситуаціях.
Коротка відповідь
Додайте такий шлях до своїх шляхів пошуку в заголовку користувача
"$ (BUILD_ROOT) /../ IntermediateBuildFilesPath / UninstalledProducts"
Чому це працює?
По-перше, нам слід зрозуміти проблему. За звичайних обставин, тобто під час запуску, тестування, профілювання або аналізу, Xcode створює ваш проект і розміщує вихідні дані в каталозі Build / Products / Configuration / Products, який доступний через макрос $ BUILT_PRODUCTS_DIR .
Більшість керівництв щодо статичних бібліотек рекомендують встановити для шляху до папки загальних заголовків значення $ TARGET_NAME , що означає, що ваш файл lib стає $ BUILT_PRODUCTS_DIR /libTargetName.a, а ваші заголовки розміщуються в $ BUILT_PRODUCTS_DIR / TargetName. Поки ваш додаток включає $ BUILT_PRODUCTS_DIR у свої пошукові шляхи, тоді імпорт буде працювати в 4 ситуаціях, наведених вище. Однак це не спрацює при спробі архівувати.
Архівування працює трохи інакше
Коли ви архівуєте проект, Xcode використовує іншу папку під назвою ArchiveIntermediates. У цій папці ви знайдете / YourAppName / BuildProductsPath / Release-iphoneos /. Це папка, на яку вказує $ BUILT_PRODUCTS_DIR, коли ви робите архів. Якщо ви заглянете туди, то побачите, що на ваш вбудований файл статичної бібліотеки є символічне посилання, але папка із заголовками відсутня.
Щоб знайти заголовки (і файл lib), вам потрібно перейти до IntermediateBuildFilesPath / UninstalledProducts /. Пам'ятаєте, коли вам сказали встановити Пропустити інсталяцію на ТАК для статичних бібліотек? Ну, це ефект, який має налаштування під час створення архіву.
Примітка: Якщо ви не встановите його для пропуску встановлення, ваші заголовки будуть розміщені в іншому місці, а файл lib буде скопійований у ваш архів, що заважає експортувати файл .ipa, який ви можете надіслати в App Store .
Після довгих пошуків я не зміг знайти жодного макросу, який би точно відповідав папці UninstalledProducts, отже, необхідність побудувати шлях за допомогою "$ (BUILD_ROOT) /../ IntermediateBuildFilesPath / UninstalledProducts"
Резюме
Для вашої статичної бібліотеки обов’язково пропустіть встановлення та розмістіть свої загальнодоступні заголовки в $ TARGET_NAME.
Для вашої програми встановіть шляхи пошуку в заголовку користувача на "$ (BUILT_PRODUCTS_DIR)", що добре працює для звичайних збірок, і "$ (BUILD_ROOT) /../ IntermediateBuildFilesPath / UninstalledProducts", що працює для збірок архівів.