Подтвердить что ты не робот

Xcode 4 и вложенные проекты - файлы заголовков не найдены

У меня возникло множество проблем с Xcode 4 и вложенными проектами, которые хорошо работали под Xcode 3.2. Здесь очень простой, который я не могу решить:

Я создаю фреймворк cocoa, для которого требуется другая инфраструктура cocoa, для которой у меня есть источник. Поэтому я выполняю обычные действия:

  • Перетащите файл .xcodeproj требуемой структуры в мой основной проект рамки
  • В моей основной структуре в разделе TARGETS > MyFramework > Build Phases > Зависимости целей. Добавьте цель вложенного проекта.
  • Убедитесь, что файлы заголовков вложенной структуры являются общедоступными.
  • В настройках Xcode > Местоположения > Местоположение сборки У меня установлено значение "Разместить сборки" в исходном местоположении данных (рекомендуется)
  • Построение пути продуктов для обеих целей задано как ${BUILT_PRODUCTS_DIR} и скажите, что они находятся в местоположении DerivedData/Debug (или Release)
  • Параметры архитектуры для обеих целей идентичны.

Затем я нажимаю [CMD] + B для сборки, и он сообщает мне, что он не находит файлы заголовков вложенной структуры. Когда я проверяю настройки, пути поиска заголовка пользователя содержат путь к DerivedData/Debug, а внутри есть вложенная цель рамки с файлами заголовков в версиях/A/Заголовках.

Я сижу здесь, кто-нибудь знает, что я делаю неправильно?


Проблема возникает при создании Отладки при изменении путей поиска заголовка пользователя на ${BUILT_PRODUCTS_DIR}/MyFramework.framework/Headers. Однако это не работает при построении Распространение, так как фреймворки затем используют свои настройки Release, которые заканчиваются в другом подкаталоге...


Моим временным решением также является определение конфигурации Распределение для вложенных проектов. Таким образом, заголовки найдены, и компоновщик может успешно связываться.

4b9b3361

Ответ 1

Здесь мое обобщенное знание:

Забудьте об общей записи заголовка с помощью Xcode, это PITA и не работает правильно при архивировании вашего приложения. Вместо этого, все файлы заголовков статической библиотеки на уровне проекта и расскажите о своем приложении, где его найти.

  • Устраните свою боль, убедившись, что все цели имеют одно и то же имя для конфигурации сборки (то есть добавьте конфигурацию "AdHoc" и "Развертывание" в статические библиотеки).

  • В настройках сборки укажите Контуры поиска заголовков (если вы используете #include <file.h>) или Пути поиска заголовков пользователя (если вы используете #include "file.h") в каталог проекта статической библиотеки. Если проект статической библиотеки внутри вашего каталога приложений, используйте это:

    "$(PROJECT_DIR)" (рекурсивный)

    Если у вас есть каталог, который содержит a) проект статической библиотеки и b) ваше приложение, тогда это должно работать:

    "$(PROJECT_DIR)/.." (рекурсивно включено)

  • Если подмодуль содержит скомпилированные библиотеки, установите пути поиска библиотеки в:

    "$(TARGET_BUILD_DIR)"

  • Убедитесь, что все проекты статической библиотеки, которые вы используете, имеют Пропустить установку на YES.

  • Опять же, нет общедоступных файлов заголовков (сборка фаз) Копировать заголовки) в любой из статических библиотек, иначе Xcode не сможет архивировать приложение.

  • Обязательно сообщите Xcode, когда нужно создавать статические библиотеки, как показано в этом техническом документе от Apple.


Старый ответ:

Я до сих пор не нашел реального решения этой проблемы со статическими библиотеками. Что для меня работает:

  • Создайте конфигурацию "AdHoc" для статической библиотеки
  • Добавить $(BUILT_PRODUCTS_DIR) в User Header. Пути поиска для приложения (с отметкой рекурсивный) → это используется при запуске приложения
  • В меню Xcode выберите Продукт > Создать для > Сборка для архивирования

Это работает, приложение находит файлы заголовков и строит себя, оно заканчивается в DerivedData//Build/Products/AdHoc-iphoneos/в качестве пакета приложений. Следуя этим простым инструкциям (мертвая ссылка) от TestFlightApp.com Я могу упаковать это приложение в IPA и отправить его. Просто выбрав Архив, приложение из Xcode снова не находит заголовки, даже если они действительно находятся в каталоге сборки AdHoc-iphoneos.

Ответ 2

(Начиная с Xcode 5.1)

Когда подпроект создается XCode, файлы заголовка подпроекта копируются в каталог сборки. При архивировании кажется, что этот каталог назначения копирования не добавлен в путь поиска header/include. Вы хотите перейти к настройкам сборки и добавить

$(BUILD_ROOT)/../IntermediateBuildFilesPath/UninstalledProducts/include

в "Пути поиска заголовков" для схемы, используемой для архивирования.

Если вы не уверены, какая схема используется для архивирования, перейдите в Product → Scheme → Edit Schemes и найдите Archive в левом столбце.

Ответ 3

Убедитесь, что ваша сторонняя структура добавлена ​​как "группа" в ваш основной проект, поэтому вы можете увидеть ее в своей иерархии проектов...

Ответ 4

У меня была такая же проблема, и я мог решить проблему, установив "Построение местоположения" для размещения продуктов сборки в местах, указанных целевыми объектами "

Ответ 5

У меня была эта проблема: я мог бы создавать конфигурации Debug и App Store, но не Ad Hoc. Building Ad Hoc дал мне ошибки, потому что он не мог найти файлы .h, необходимые для вложенных проектов.

Оказалось, что у меня есть устаревшее предоставление ресурсов в моей конфигурации Release. Я обновил эту ссылку на предоставление ресурсов, и теперь я могу создать Ad Hoc и использовать функцию Archive для ее упаковки.

Взял мне время, чтобы понять это! Мой разум просто не переходил от отсутствующих файлов .h к ошибкам инициализации сам по себе. =) Возможно, была ошибка или предупреждение, жалующиеся на недостающее обеспечение, но если это так хорошо было похоронено среди сотен ошибок .h.

Ответ 6

У меня была такая же проблема с конфигурацией с именем "Ad Hoc" (согласно рекомендации TestFlight на http://help.testflightapp.com/customer/portal/articles/402782-how-to-create-an-ipa-xcode-4) и основным проектом не удалось найти некоторые заголовки из вложенных проектов. Я переименовал проект в "AdHoc" (без пробелов), и проблема исчезла; кажется, что пробелы могут испортить пути поиска заголовков в некоторых случаях, хотя я не выяснил особенности того, когда это может произойти и почему.

Ответ 7

У меня возникла проблема с вложенным проектом, который построил статическую библиотеку. Я нашел этот документ на сайте яблок, который полностью спас мне жизнь.

http://developer.apple.com/library/ios/#DOCUMENTATION/Xcode/Conceptual/ios_development_workflow/AA-Developing_a_Static_Library_and_Incorporating_It_in_Your_Application/archiving_an_application_that_uses_a_static_library.html

Я так рад, что мне не пришлось гадать с производными трактами данных.

Ответ 8

Для меня это произошло после слияния GIT, что вызвало много конфликтов, один из которых связан с файлом проекта. После слияния я уверен, что структура файла проекта изменилась.

То, что я закончил, - это войти в проект "Настройки сборки", а затем искать "Всегда искать пользовательские пути" и превращать его в Yes.

Я думаю, что слияние превратило это значение в boolean на No, поэтому проект не искал нужные места для файлов заголовков.