Компіляція, побудова або архівування проблем із 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 

Багато результатів Googling показало, що багато людей стикаються з цією проблемою, але рішення не існує. Будь-хто отримав виправлення чи навіть підказку.

Оновлення: На user headerшляху пошуку встановлюються ${BUILT_PRODUCTS_DIR}у всіх конфігураціях. Він добре будує, використовуючи будь-яку конфігурацію, за винятком архівації.

Оновлення 2: Merchant.h це клас основних даних, який генерується автоматично і, отже, всередині .xcdatamodeldпакету, однак усі заголовки копіюються до каталогу загальнодоступних заголовків під час побудови бібліотеки.

Відповіді:


119

Примітка. Наведені нижче дії вирішать 90% проблем із вашим архівом Xcode, однак із коментарів пропонується спробувати вийти із Xcode спочатку. Це може заощадити години налаштування.

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

28
Остання пропозиція - це все, що мені потрібно, щоб вирішити цю проблему. Закрийте та повторно відкрийте Xcode.
Кріс Майлз,

1
Так, для мене те саме, просто довелося перезапустити Xcode. Це сталося після того, як я перейменував і перемістив файли в проекті.
Мауріціо

Я також. Нічого більш неприємного, ніж помилка, яка не повинна існувати. Чудово, щоб це було вирішено так легко.
maxedison

3
Примітка для трьох20 користувачів, які переносять старі проекти з xcode3 на xcode4: вам (можливо) доведеться змінити параметри xcode / location / advanced / -> Locations, вказані цільовою метою. Див stackoverflow.com/questions/5261447 / ... для більш
Бен G

1
Святе лайно на номер 1. Цитати! Середовище $ (SRC_ROOT), звичайно, "може" вирішити шляхом із пробілами. Не вдалося зрозуміти, чому стискання мого проекту та розпакування в іншому місці призвело до помилки збірки!
Ерік Кербер

13

У мене була та сама проблема в XCode 4: "Проблему з лексичним або препроцесором MyFile.h не знайдено". Однак MyFile.m не був статичною бібліотекою, а лише стандартним класом. А MyFile.m та MyFile.h були включені належним чином та проіндексовані у проект.

Отже ... Я кинув XCode і Simulator, потім перезапустив їх, і проблема зникла.


У мене була подібна ситуація, але небажана помилка відображалася через неправильне посилання на непов’язану властивість, яка була в тому ж класі (в основному я забув використовувати self.) - дивна.
JARC

11

Я виявив, що проблема зникла, коли я змінив налаштування цільової збірки "сканувати всі вихідні файли на наявність" з ні на так.


6

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


+1 Я додав посилання на запитання, на яке він прийняв відповідь, дякую за інформацію!
Річард Стеллінг

4

У мене була така дивна проблема. Зміна "Сканувати всі файли ресурсів ..." на "Так" не допомогло. Я подивився Framework Search Paths і помітив, що мав

  • $ (успадковано)
  • "$ (SRCROOT)"
  • "$ (SRCROOT) / мій / правильний / шлях"

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


4

Моє рішення було змінити моє

#import "HeaderFile.h"

до

#import <FrameworkName/HeaderFile.h>

і все знову запрацювало. Незвичайним було те, що він кілька разів перестав працювати, коли кілька разів будував.


Я спробував все інше з моїм підпроектом, і це було єдине, що могло б спрацювати. Дякую.
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 із проекту (вибравши "Видалити посилання") та повторно додавши його.


1

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


1

Ще один шанс:

У проекті робочого простору: дивіться у розділі Ціль для розділу Фази побудови. Як сказано в багатьох посібниках, вам потрібно мати етап копіювання файлів, щоб скопіювати всі ваші заголовки в інше місце, оскільки iOS Framework не може містити файли заголовків для спільного використання (це мій випадок).

Виберіть для цих копій файли як пункт призначення пункт "Каталог товарів". Або інший каталог вашого типу, де розміщуються заголовки.

Це працювало для мене. Можливо, каталог збірки для архіву (або випуску) сильно відрізняється від очікуваного у збірці для налагодження.

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

XD


0

Для мене ця проблема виникла після того, як я додав нові файли до проекту; порожні .m та .h, отримані з NSObject. Ось як я це вирішив:

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

Потім я знову додав їх, і це також спрацювало.

Безумовно, помилка в xCode ...

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.