Каждое из решений, которые я видел для этой проблемы, либо казалось нелегким (копирование заголовков в проект приложения), либо чрезмерно упрощалось до такой степени, что они работали только в тривиальных ситуациях.
Краткий ответ
Добавьте следующий путь к путям поиска заголовка пользователя
"$ (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», которое работает для сборок архивов.