Все решения этой проблемы, которые я видел, либо казались неэлегантными (копирование заголовков в проект приложения), либо чрезмерно упрощенными до такой степени, что они работают только в тривиальных ситуациях.
Краткий ответ
Добавьте следующий путь к вашим путям поиска заголовка пользователя
"$ (BUILD_ROOT) /../ IntermediateBuildFilesPath / UninstalledProducts"
Почему это работает?
Во-первых, нам нужно понять проблему. При нормальных обстоятельствах, то есть когда вы выполняете, тестируете, профилируете или анализируете, Xcode строит ваш проект и помещает выходные данные в каталог Build / Products / Configuration / Products, который доступен через макрос $ BUILT_PRODUCTS_DIR .
Большинство руководств, касающихся статических библиотек, рекомендуют установить для Пути к папке общедоступных заголовков значение $ TARGET_NAME , что означает, что ваш файл библиотеки становится $ BUILT_PRODUCTS_DIR /libTargetName.a, а ваши заголовки помещаются в $ BUILT_PRODUCTS_DIR / TargetName . Пока ваше приложение включает $ BUILT_PRODUCTS_DIR в пути поиска, импорт будет работать в четырех приведенных выше ситуациях. Однако это не сработает при попытке заархивировать.
Архивация работает немного иначе
Когда вы архивируете проект, Xcode использует другую папку под названием ArchiveIntermediates. В этой папке вы найдете / YourAppName / BuildProductsPath / Release-iphoneos /. Это папка, на которую указывает $ BUILT_PRODUCTS_DIR, когда вы делаете архив. Если вы посмотрите туда, вы увидите, что есть символическая ссылка на ваш созданный файл статической библиотеки, но папка с заголовками отсутствует.
Чтобы найти заголовки (и файл библиотеки), вам нужно перейти в IntermediateBuildFilesPath / UninstalledProducts /. Помните, когда вам сказали установить Пропустить установку на ДА для статических библиотек? Это тот эффект, который имеет настройка при создании архива.
Боковое примечание: если вы не настроите пропуск установки, ваши заголовки будут помещены в другое место, а файл lib будет скопирован в ваш архив, что не позволит вам экспортировать файл .ipa, который вы можете отправить в App Store. .
После долгих поисков я не смог найти ни одного макроса, который точно соответствует папке UninstalledProducts, поэтому необходимо создать путь с помощью "$ (BUILD_ROOT) /../ IntermediateBuildFilesPath / UninstalledProducts"
Резюме
Для вашей статической библиотеки убедитесь, что вы пропустили установку и что ваши общедоступные заголовки помещены в $ TARGET_NAME.
Для вашего приложения установите пути поиска заголовка пользователя на «$ (BUILT_PRODUCTS_DIR)», который отлично работает для обычных сборок, и «$ (BUILD_ROOT) /../ IntermediateBuildFilesPath / UninstalledProducts», который работает для сборок архивов.