Xcode 4 не может найти общедоступные заголовочные файлы из статической зависимости библиотеки - PullRequest
91 голосов
/ 05 апреля 2011

Альтернативные названия для облегчения поиска

  • Xcode не может найти заголовок
  • Отсутствует .h в Xcode
  • Xcode .h файл не найден
  • Файл лексического или препроцессорного файла не найден

Я работаю над проектом приложения для iOS, созданным в Xcode 3. Теперь я перешел в Xcode 4, мой проект создаетчисло статических библиотек.

Эти статические библиотеки также объявляют публичные заголовки, и эти заголовки используются кодом приложения.В Xcode 3.x заголовки были скопированы (как фаза сборки) в public headers directory, затем в проекте приложения public headers directory был добавлен в headers search list.

Под Xcode 4 каталог сборкиперемещен в ~/Library/Developer/Xcode/DerivedData/my-project.

Проблема в том, как мне сослаться на это новое местоположение в настройках поиска по заголовкам?Кажется, что:

  • public headers directory относится к каталогу DerivedData, но каталог
  • headers search относится к чему-то другому (возможно, к месту проекта)

Как настроить целевой объект статической библиотеки для разработки под iOS в Xcode 4, который обеспечит доступность заголовочных файлов клиентам, которые используют статическую библиотеку при попытке компилировать в качестве зависимости?

Ответы [ 17 ]

1 голос
/ 05 ноября 2015

Ни один из ответов выше не работал для меня на Xcode 7, но они дали мне хорошую идею, хотя.Для парней, борющихся с Xcode 7, я исправил это, добавив следующее в Пути поиска заголовка пользователя (включая кавычки)

"$(BUILT_PRODUCTS_DIR)/usr/local/include"

Измените относительную часть URL usr/local/include в соответствии с тем, что есть в 'Public Header FolderНастройка пути для статической библиотеки

1 голос
/ 08 мая 2013

С риском показать, что я идиот ... Я страдаю от того, что XCode отказывается найти мои файлы .h весь день.

Тогда я понял.

Поскольку я использовал «XCode 4», я «разумно» решил поместить все свои проекты в подпапки папки « XCode 4 projects ».

Эти пробелы в имени папки испортили XCode!

Переименование этой папки в " XCode_4_Projects " вернуло радость (и меньше ругательства) в мою жизнь.

Напомните мне еще раз, какой год это год?

Возможно, кто-то может сказать разработчикам Apple ...

0 голосов
/ 07 февраля 2018

Обновление: Xcode 9

Приведенные выше ответы не работали для меня с использованием Xcode 9, но этот ответ работал для меня идеально.Я добавил $(OBJROOT)/UninstalledProducts/$(PLATFORM_NAME)/include к своим "путям поиска заголовка", и Xcode действительно связал заголовок моей статической библиотеки без проблем.

0 голосов
/ 18 августа 2017

Вот что решило ту же проблему для меня.

У меня есть цель приложения и цель расширения iMessage.Затем у меня было 2 SDK (мой собственный), с которыми App Target связывает.

Проблема заключалась в том, что моя цель iMessage также использовала 2 моих SDK (отдельные проекты), но они не связывалисьих в этапах сборки -> связать двоичные файлы с библиотеками.Мне пришлось добавить туда 2 SDK в iMessage Target, чтобы соответствовать цели моего приложения, и теперь она архивируется.

Итак, мораль этой истории такова: если у вас есть несколько целей, таких как расширения, убедитесь, чточто все ваши цели связаны с нужными им библиотеками.Он был в состоянии построить и развернуть на симуляторе и устройстве, но не архивировать.

0 голосов
/ 15 мая 2016

Это связанная проблема, которая привела меня к этому вопросу, поэтому я добавляю свое решение строго для документации / это может сэкономить еще несколько часов потливости

DropboxSDK.h файл неfound

После нескольких дней попыток заставить VES скомпилировать для iOS я столкнулся с этой проблемой.DropboxSDK.h определенно был в пределах досягаемости search headers Я даже добавил его в framework headers путь поиска, include d непосредственно к .h и пошел на все, чтобы попытаться найти DropboxSDK.h найденный.

Решение

EXPLICITY перетащите файл DropboxSDK.framework в Project Navigation кода Xcode и убедитесь, что Copy Files if needed отмечен.Также убедитесь, что ваша цель отмечена, как необходимо.

Предупреждение

Установка явного расположения фреймворка в build phases не сработала для меня.Мне пришлось перетащить .framework в Xcode и убедиться, что файлы скопированы в мой проект.

# mbp2015 # xcode7 # ios9

0 голосов
/ 27 июля 2016

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

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

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

Мой выбор наконец заключался в простом использовании фреймворков - всегда - как рекомендовано Apple (видео WWDC).

Это так просто и делает ту же самую работу в конце!

Еще одно довольно элегантное решение, которое, кажется, работает, это использование Private Cocoapods.Cocoapods выполняет всю работу по настройке, копирует заголовки и т. Д.

0 голосов
/ 02 апреля 2013

Избавьте себя от неприятностей и сделайте это = создайте новую учетную запись пользователя на вашем Mac - откройте проект под новой учетной записью пользователя - все проблемы исчезнут.Экономьте свое время и сохраняйте здравомыслие.все эти занудные ответы не помогают !!

Удачи

...