Проблемы компиляции, сборки или архивирования с Xcode 4 (и зависимостями)

Этот вопрос развивался в течение последних нескольких недель, чтобы охватить более общие проблемы с xcode4 (и проекты обновления с более старых версий xcode).

Однако многие из проблем могут быть решены, следуя тому же набору инструкций.

Если у вас есть какие-либо из следующих проблем, попробуйте методы в принятом ответе:

  • Xcode 4 не может заархивировать приложение
  • Xcode 4 создает непригодный архив
  • Xcode 4 не создает.ipa
  • Xcode 4 не может скомпилироваться из-за ошибок препроцессора
  • Xcode 4 не может найти заголовки
  • Полный код Xcode 4 не работает
  • Зависимости проекта не будут компилироваться
  • Добавление зависимости вызывает любую из перечисленных выше проблем.

Оригинальный вопрос

Заголовок: "файл лексической проблемы или проблемы препроцессора не найден" в Xcode 4

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

In file included from /Volumes/Development/Path/LBProject/LBProject/LBProject-Prefix.pch:15:
In file included from /Volumes/Development/Path/LBProject/LBFDefines.h:23:
In file included from /Volumes/Development/Path/LBProject/Classes/LBProjectAppDelegate.h:11:
In file included from /Volumes/Development/Path/LBProject/LBProject/../FKNDirectory/FKNDirectoryManager.h:10:
/Volumes/Development/Path/LBProject/LBProject/../FKNDirectory/FKNDataModel.h:11:9: fatal error: 'Merchant.h' file not found [1]
 #import "Merchant.h"
         ^
1 error generated. 

Xcode выдает ошибку

lexical or preprocessor issue file not found 

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

Обновление: user header пути поиска установлены на ${BUILT_PRODUCTS_DIR} во всех конфигурациях. Он прекрасно работает с любой конфигурацией, кроме случаев архивирования.

Обновление 2: Merchant.h класс Core Data, который генерируется автоматически и, следовательно, внутри .xcdatamodeld пакет, однако все заголовки копируются в общедоступный каталог заголовков при сборке библиотеки.

14 ответов

Решение

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

  1. Проверьте правильность "путей к заголовкам пользователя" (добавьте "" к путям для пробелов, как в вашем проекте, так и в зависимостях)
  2. Установите "Всегда искать пути пользователя" на ДА
  3. Создайте групповой вызов "Индексирование заголовков" в своем проекте и перетащите заголовки в эту группу, НЕ добавляйте ни к каким целям при появлении соответствующего запроса. Это включает любые заголовки внутри вашего .xcdatamodeld, вам нужно будет щелкнуть правой кнопкой мыши и просмотреть содержимое пакета, чтобы найти их.
  4. Для всех зависимостей установите для параметра "Пропустить установку" значение "Да".
  5. Перемещение любых "общедоступных" заголовков на этапах сборки в "Проект"
  6. Установите параметр сборки "Каталог установки" на вашей цели на $(LOCAL_APPS_DIR)
  7. Измените настройку целевой сборки "проверять все исходные файлы на включенные" на ДА. ( ссылка)
  8. В более новых версиях Xcode (> 4.2) вы можете прочитать этот вопрос, связанный с рабочими пространствами.
  9. Вручную удалите файлы project.xcworkspace из всех ссылочных проектов

У меня была такая же проблема в XCode 4: "Проблема с Lexical или препроцессором MyFile.h не найдена". Однако MyFile.m не был статической библиотекой, а был просто стандартным классом. И MyFile.m и MyFile.h были правильно включены и проиндексированы в проекте.

Итак... Я вышел из XCode и Simulator, затем перезапустил их, и проблема исчезла.

Я обнаружил, что проблема исчезла, когда я изменил настройку целевой сборки "проверять все исходные файлы на наличие включений" с "нет" на "да".

Я смог решить эту проблему без каких-либо изменений в настройках сборки, просто скопировав файлы.h в каталог проекта в программе поиска. Я НЕ добавлял их в проект вообще. Просто наличия их в каталоге файловой системы проекта было достаточно, чтобы неявные ссылки XCode работали должным образом. Подробнее здесь.

У меня была странная проблема, как это. Изменение "Сканировать все файлы ресурсов..." на Да не помогло. Я взглянул на пути поиска по фреймворку и заметил, что

  • $(Наследуется)
  • "$(SRCROOT)"
  • "$(SRCROOT) / мой / исправить / путь"

Это казалось правильным, но все еще терпело неудачу. Затем я попытался изменить порядок порядка 2 и 3, и вдруг все получилось. Поэтому я не уверен, почему это был провал, но хотел добавить его в список вещей, которые стоит попробовать, если это поможет кому-то еще.

Мое решение было изменить мой

#import "HeaderFile.h"

в

#import <FrameworkName/HeaderFile.h>

и все снова заработало. Что было необычно, так это то, что он несколько раз прекращал работать после постройки.

У меня было то же самое - 2 цели в моем проекте (Project и ProjectTest of GHUnit). Когда моя схема была настроена на Project, импорт <GHUnitIOS/GHUnit.h> была проблема "файл проблемы лексического или препроцессора не найден". Но когда я поставил в качестве схемы ProjectTest, все было в порядке. Итак, я добавил GHUnitIOS.framework в проекте тоже.

Проблема решилась сама собой, когда я установил

Настройки сборки-> Проект-> Поиск путей к Да

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

Добавим еще вариант: у меня было два экземпляра foo.m в Compile Source фаза сборки, которая как-то вызвала "Заголовок не найден" для foo.h,

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

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

Еще один шанс:

В рабочей области проекта: смотрите в Target для раздела Build Phases. Как написано во многих руководствах, для копирования всех ваших заголовков в другое место необходим этап копирования файлов, так как iOS Framework не может содержать файлы заголовков для совместного использования (это мой случай).

Выберите для этих Копировать файлы в качестве пункта назначения "Каталог продуктов". Или другой каталог, например, где будут располагаться заголовки.

Это сработало для меня. Вероятно, сборка для каталога Archive (или Release) сильно отличается от ожидаемой при сборке Debug .

Также проверьте в настройках вашего рабочего пространства ваш каталог сборки.

XD

Для меня эта проблема возникла после того, как я добавил новые файлы в проект; пустой.m и.h, полученный из NSObject. Вот как я решил это:

  1. Закрытый и перезапущенный xCode
  2. Удалил два новых файла через XCode
  3. Перекомпилировано успешно

Затем я снова добавил их, и это тоже сработало.

Определенно ошибка в xCode...

Другие вопросы по тегам