Почему статический файл заголовка библиотеки не найден для архивации?
Я могу построить для отладки просто отлично. Я трижды проверил, что статическая библиотека включена в настройки фаз сборки для проекта. Я также пробовал другие вещи, такие как заголовок include paths и т.д. Безрезультатно.
Когда я пытаюсь построить IPA для тестового полета, я получаю сообщение об ошибке:
#import <MBProgressHUD/MBProgressHUD.h>
Я уже успел создать IPA, но ранее не использовал/не использовал статическую библиотеку MBProgressHUD.
Я могу включить файл заголовка и кода вручную вместо статической привязки его, но я предпочитаю знать, что происходит здесь.
Спасибо.
PS - Я использовал инструкции "Статическая библиотека", приведенные https://github.com/jdg/MBProgressHUD
Ответы
Ответ 1
С помощью других вопросов SO (fooobar.com/questions/62652/...) мне удалось включить заголовочный файл.
По-видимому, процесс сборки архива каким-то образом отличается от процесса сборки отладки. Добавив "$(BUILD_ROOT)/../IntermediateBuildFilesPath/UninstalledProducts"
в конструкцию сборки "Контент заголовка пользователя", она была успешно построена.
Мне все же хотелось бы понять, почему это не работает, как я ожидаю. У меня есть подозрение, что проект построен для автоматического включения файлов заголовков для отладки и выпуска сборок, но как-то не для архивных сборок. Это странно, потому что я думал, что архивные сборки наследуются либо от параметров отладки, либо от версии из настроек схемы Xcode.
Любая дополнительная информация приветствуется.
Ответ 2
По умолчанию Xcode помещает сборки в $(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
, это означает, например, build/Release-iphoneos
. Это папка, в которую встроены продукты и где будут скопированы заголовки.
Когда мы дублируем конфигурацию Release, чтобы сказать, что это называется "App Store", Xcode теперь встраивается в build/App Store-iphoneos
. Проблема в том, что статические библиотеки все еще строятся с их конфигурацией Release, в папку сборки выпуска.
Поскольку конфигурация App Store (для меня, по крайней мере) доступна только для простого переключения между профилями подготовки, мое решение состоит в том, чтобы изменить "Путь готовых продуктов для каждой конфигурации" для конфигурации App Store на $(BUILD_DIR)/Release$(EFFECTIVE_PLATFORM_NAME)
, чтобы Конфигурация App Store также встроена в папку создания выпуска.
Ответ 3
Ответ Даниэла Тьюлла будет работать, но вместо изменения "Пула продуктов сборки для каждой конфигурации" вы можете обновить конфигурацию проекта статической библиотеки, чтобы включить конфигурацию "App Store" или любую другую именованную конфигурацию, для которой создается цель вашего приложения против, что является дубликатом конфигурации Release. Таким образом, статическая библиотека выведет ее в библиотеку и заголовки/включит файлы в соответствующий каталог, который будет разрешен макросом $(BUILD_DIR)/$(CONFIGURATION) $(EFFECTIVE_PLATFORM_NAME), используемым в "Пути для сборки готовых продуктов" "; и walllaaaaa... заголовки публичной библиотеки теперь могут быть правильно решены Xcode. Поэтому, чтобы подвести итог, если у вас есть конфигурация с именем "App Store" в вашей целевой программе и ваша ссылка на статическую библиотеку, которая экспортирует заголовки, убедитесь, что проект статической библиотеки также включает конфигурацию "App Store", и вы будете одним счастливый турист.