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

96

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

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

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

  • 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пакета, однако все заголовки копируются в каталог общедоступных заголовков при создании библиотеки.

Ричард Стеллинг
источник

Ответы:

119

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

  1. Проверьте правильность "путей заголовков пользователей" (добавьте "" к путям для пробелов как в вашем проекте, так и в зависимостях)
  2. Установите "Всегда искать пути пользователей" на ДА.
  3. Создайте групповой вызов «Индексирование заголовков» в своем проекте и перетащите заголовки в эту группу, НЕ добавляйте ни к каким целям при появлении запроса. Сюда входят любые заголовки внутри вашего .xcdatamodeld , вам нужно щелкнуть правой кнопкой мыши и просмотреть содержимое пакета, чтобы найти их.
  4. Для всех зависимостей установите для параметра сборки «Пропустить установку» значение «Да».
  5. Перемещение любых заголовков «Public» на этапах сборки в «Project»
  6. Задайте для параметра сборки "Каталог установки" на вашей цели значение$(LOCAL_APPS_DIR)
  7. Измените настройку целевой сборки «сканировать все исходные файлы на наличие включений» на ДА. ( ссылка )
  8. В более новых версиях Xcode (> 4.2) вы можете прочитать этот вопрос, связанный с рабочими областями.
  9. Вручную удалите файлы project.xcworkspace из всех связанных проектов
Ричард Стеллинг
источник
28
Самое последнее предложение - это все, что мне нужно, чтобы исправить эту проблему. Закройте и снова откройте Xcode.
Крис Майлз
1
Да, то же самое для меня, просто пришлось перезапустить Xcode. Это произошло после того, как я переименовал и переместил файлы в проекте.
Маурицио
Я тоже. Нет ничего более неприятного, чем ошибка, которой не должно быть. Здорово, что это так легко разрешилось.
maxedison
3
Примечание для пользователей Three20, переносящих старые проекты с xcode3 на xcode4: вам (возможно) придется изменить настройки xcode / location / advanced / -> Locations, указанные target. См. Stackoverflow.com/questions/5261447/… для получения дополнительной информации
Ben G
1
Святая хрень по номеру 1. Цитаты! Environment $ (SRC_ROOT), конечно, "может" разрешить путь с пробелами. Не мог понять, почему заархивирование моего проекта и извлечение из другого места привело к сбою сборки!
Эрик Кербер
13

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

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

Ричардсан
источник
У меня была аналогичная ситуация, но отображалась нежелательная ошибка из-за неправильной ссылки на несвязанное свойство, которое было в том же классе (в основном я забыл использовать self.) - странный.
JARC 05
11

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

док тако
источник
6

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

Дэвид Авендасора
источник
+1 Я добавил ссылку на вопрос, на который он ответил, спасибо за информацию!
Ричард Стеллинг,
4

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

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

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

головокружение
источник
4

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

#import "HeaderFile.h"

к

#import <FrameworkName/HeaderFile.h>

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

Slcott
источник
Я попробовал все остальное в своем подпроекте, и это было единственное, что сработало. Спасибо.
dirkoneill
Вы все равно должны использовать двойные кавычки для статических библиотек. Угловые скобки ищут пути к системным заголовкам и не будут искать пути к заголовкам пользователей, если вы также не включите параметр « Всегда искать пути пользователя» , чего не следует делать, если в этом нет необходимости.
devios1
2

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

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

Каролин
источник
2

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

хорошей жизни
источник
У меня была противоположная проблема. См. Мой ответ: stackoverflow.com/a/16783389/629014
slcott
1

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

Джошуа Ноцци
источник
1

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

Норман Джи
источник
1

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

cduhn
источник
1

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

свободное место
источник
1

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

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

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

Это сработало для меня. Вероятно, каталог сборки для архива (или выпуска) сильно отличается от ожидаемого в сборке для отладки.

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

XD

SubstanceMX
источник
0

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

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

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

Однозначно ошибка в xCode ...

G-собака
источник