Проблемы компиляции, сборки или архивирования с Xcode 4 (и зависимостями) - PullRequest
96 голосов
/ 07 апреля 2011

Этот вопрос эволюционировал в течение последних нескольких недель, чтобы охватить более общие проблемы с (и проектами обновления с более старых s).

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

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

  • 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 ]

118 голосов
/ 09 апреля 2011

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

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

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

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

11 голосов
/ 27 августа 2011

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

6 голосов
/ 14 ноября 2011

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

4 голосов
/ 28 мая 2013

Мое решение состояло в том, чтобы изменить мой

#import "HeaderFile.h"

на

#import <FrameworkName/HeaderFile.h>

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

4 голосов
/ 19 октября 2011

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

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

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

2 голосов
/ 12 мая 2012

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

2 голосов
/ 08 ноября 2011

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

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

1 голос
/ 31 января 2013

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

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

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

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

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

XD

1 голос
/ 24 ноября 2011

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

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