IOS - Сбой сборки с помощью CocoaPods не может найти файлы заголовков

У меня есть проект iOS с использованием CocoaPods. Все работало гладко, пока другой разработчик не начал работать над тем же проектом. Он внес некоторые изменения (только для кода, насколько мне известно) и создал новую ветку в репо. Я проверил его ветку и попытался ее построить, но я получаю сообщение об ошибке: файл ASLogger/ASLogger.h не найден.

Даже если я удалю весь проект и сделаю новую копию и использую установку "pods install". неудача сборки все еще существует. Вы не знаете, где проблема? Если вам нужна дополнительная информация, просто спросите.

Ответ 1

Update

Убедитесь, что ваш Podfile содержит link_with для целей, у которых отсутствует файл конфигурации. Только Cocoapods устанавливает первую цель по умолчанию. например.

platform :osx, '10.7'
pod 'JSONKit',       '~> 1.4'

link_with 'Pomo', 'Pomo Dev', 'Pomo Tests'

------ Окончание обновления


Примечание. Пожалуйста, обратите внимание, что вы должны посмотреть в Project- > Info- > Configurations для шагов ниже.


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

Pods.xcconfig not working

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

Pods.xcconfig working

Ответ 2

Update

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

Если заголовки не импортируются, у вас, вероятно, есть конфликт в HEADER_SEARCH_PATHS. Попробуйте добавить $(inherited) в пути поиска заголовка в настройках сборки, чтобы убедиться, что он тянет любые пути поиска, включенные в файл .xcconfig, из ваших CocoaPods.

Это должно помочь с любыми конфликтами и правильно импортировать исходный код.

Ответ 3

1.Проверьте

Настройки сборки → Путь поиска → Пути поиска заголовка пользователя →

  • "$ {PODS_ROOT}/" рекурсивный

введите описание изображения здесь

введите описание изображения здесь

введите описание изображения здесь введите описание изображения здесь

2.Проверьте стиль импорта (KEY POINT), если ваш podfile установил

use_frameworks!

В твоей File-Bridging-Header.h, форматировать должен понравиться

#import "MBProgressHUD.h"

else должно быть ниже

#import <MBProgressHUD.h>

3.Это должно быть! поверь мне

Ответ 4

Заголовочные файлы, вы будете смертью меня...

Наконец, он заработал, добавив (включая кавычки)

"${PODS_ROOT}/BuildHeaders"

в строку "Пути поиска заголовка пользователя" и проверку "рекурсивный".

Ответ 5

Я обнаружил, что ${PODS_HEADERS_SEARCH_PATHS} отсутствует, и он не определен в моей ветке разработки git, поэтому я добавил "$(SRCROOT)/Pods/Headers/" для путей поиска заголовков с рекурсивным

Это нормально для меня

Ответ 6

Оба других ответа здесь не помогли. Я нашел еще 2 проблемы, которые могли бы исправить:

ИЗМЕНИТЬ Вы можете проверить символическую ссылку таким образом: создать текстовый файл с именем 'check' без расширения. скопируйте эти строки в него:

file=/Users/youUserName/XcodeProjectName/Pods/BuildHeaders/SVProgressHUD/SVProgressHUD.h
if [[ ! -e $file &&  -L $file ]]; then
  echo "$file symlink is  broken!"
else
  echo "symlink works"
fi

Затем перейдите на терминал, перейдите в папку, где находится ваш файл проверки, и введите

bash check

Ответ 7

Вот что сработало для меня:

Перейдите на вкладку "Целевая задача" > "Установки" и найдите "Пути поиска заголовка пользователя".

Установите значение "$ (BUILT_PRODUCTS_DIR)" и установите флажок "Рекурсивный".

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

====

ОБНОВЛЕНИЕ

Недавно у меня была аналогичная (хотя и немного другая) проблема. Оказалось, что Xcode не смог найти Pods, потому что я открыл файл .xcodeproj, а не файл .xcworkspace. Могут помочь другим в будущем.

Ответ 8

Вы пытались импортировать стиль Cocoapods?

#import <ASLogger.h>

Информация на сайте не совсем понятна, я отправил запрос на перенос:

https://github.com/CocoaPods/cocoapods.org/pull/34

Обновление: Они вытащили мой запрос:)

Ответ 9

Если ни одно из вышеперечисленных не работает для вас, и вы обнаруживаете эту ошибку, потому что вы просто переключились на use_frameworks! в своем подфайле, прочитайте:

Я пробовал все вышеперечисленные решения и многое другое, прежде чем узнал, что это не касается путей заголовков поиска вообще в моем конкретном случае; это означает, что при переключении на use_frameworks! в вашем подфайле вам больше не нужно включать фреймворки в свой заголовок моста, и на самом деле Xcode выдает очень бесполезную ошибку "неспособность найти заголовок".

Что вам нужно сделать, так это удалить все импорт из файла заголовка моста и вместо этого использовать Swift import Module в ваших отдельных файлах Swift по мере необходимости, как и для фреймворков Swift.

И если вы используете какие-либо заголовки фреймворков в классах Obj-C (в моем случае у нас есть класс удобства, который использовал FBSDK), вам нужно изменить его из локального в глобальный импорт (это означает изменение #import "Module.h" to #import <Module/Module.h>, который должен автозаполняться для вас, когда вы начнете вводить имя фрейма. В моем случае это было <AFNetworking/AFHTTPRequestOperationManager.h>).

Изменить: с тех пор я узнал, что при использовании @import Module используется более безопасный файл зонтика.

Ответ 10

wiki дает советы о том, как решить эту проблему:

Если Xcode не может найти заголовки зависимостей:

Проверьте, правильно ли привязаны файлы заголовка pod в Pods/Headers и вы не переопределяете HEADER_SEARCH_PATHS (см. # 1). Если Xcode все еще не могут найти их, в качестве последнего средства вы можете добавить свой импорт, например #import "Pods/SSZipArchive.h".

Ответ 11

Я был единственным разработчиком в команде, испытывающим эту же проблему, он отлично работал для всех, поэтому я понял, что это должна быть моя среда. Я попробовал git clone одного и того же проекта в другом каталоге, и он скомпилировался отлично, тогда я понял, что он должен быть кешированием Xcode для моего пути к проекту где-то, что "где-то" является папкой DerivedData, просто удалите его и выполните очистку сборка вашего проекта, это сработало для меня.

Вы можете получить путь и даже открыть папку в finder, выбрав:

Xcode Предпочтения Местоположение → ** Производные данные

Ответ 12

Если у вас возникли ошибки построения после установки pod install "или" pod update ", возможно, что один из ваших модулей был создан с помощью XCode 6.3, пока вы используете предыдущую версию.

В моем случае мне пришлось обновить мой OSX от mavericks до Yosemite, чтобы иметь Xcode 6.3 и решить проблему

Ответ 13

для меня проблема была в другом значении флагов Linker. По какой-то причине у меня не было кавычек во флагах, таких как -l"xml2" -l"Pods-MBProgressHUD".

Ответ 14

Мне пришлось загрузить zip из концентратора git и перетащить недостающие файлы в Finder на соответствующие пути в Pod/...

Ответ 15

Я обновляю приведенные ниже вещи в настройках сборки и не получаю никаких ошибок. Чтобы проверить это, при обновлении ваших коко-каподов.

Настройки сборки

Включить бит-код - ДА (если вы используете биткод)

Макропроцессор - $(унаследованный)

Другой флаг компоновщика - objc, -lС++, $(унаследованный)

Архитектура сборки

Отладка - Да

Relese - No

Путь поиска

Путь поиска в каркасе - $(унаследованный) $(PROJECT_DIR)

Путь поиска библиотеки - $(унаследованный)

Путь поиска заголовка - $(унаследованный)

Ответ 16

Я был на семена GM Xcode 5.0, и я не мог получить ни один из этих ответов для работы. Я пробовал каждый ответ на SO по нескольким различным вопросам об импорте заголовков с cocoapods.

НАКОНЕЦ Я нашел решение, которое сработало для меня. Я обновил до Xcode 5.0 через Mac AppStore (установленный поверх семени GM), и теперь импорт заголовков работает должным образом.

У меня также была бета-версия Xcode 5 в моей системе, и я тоже удалил ее. Возможно, это была комбинация двух вещей, но, надеюсь, это помогает кому-то еще.

Ответ 17

Это был ответ для меня, я обновил cocoapods, и я думаю, что PODS_HEADERS_SEARCH_PATHS ушел. Мое решение было похоже на это, но я использовал "$ (PODS_ROOT)/Headers" - Andrew Aitken

Большое вам спасибо за этот ответ. Мне было трудно найти способы исправить мою проблему. Большое вам спасибо.

Ответ 18

Ни один из ответов не помог мне (у меня были мои модули, связанные со всеми целями, правильная настройка конфигураций, коррелированные пути поиска "$ (унаследованные)" и т.д.).

Проблема исчезла сама по себе после того, как я обновил cocoapods до самой новой версии отладки, используя стандартную команду установки/обновления:

   gem install cocoapods --pre

или

   sudo gem install cocoapods --pre

(если sudo использовался во время установки).

Возможно, это была ошибка cocoapods.

Ответ 19

Что сработало для меня, так это выбор проекта Pods, поиск и выбор целевой структуры с отсутствующим заголовком в целевом каталоге проекта Pod и установка "Build Active Architecture Only" на "No" в разделе "Архитектура" в настройках целевой сборки.

Ответ 20

У меня такая же проблема, но приведенные выше решения не могут работать. Я исправил это, сделав следующее:

  • Удалить весь проект
  • Выполнить git клонировать проект и запускать пакет exec pod install
  • cd peoject и запустить удаленную команду add upstream your-remote-rep-add
  • git fetch вверх по течению
  • git мастер проверки
  • git merge upstream/master

И затем он работает.

Ответ 21

Я решил эти проблемы для Xcode 8.2.1 с помощью фрейма перетаскивания, которые я хочу использовать.

Ответ 22

Вот еще одна причина: все пути заголовков казались прекрасными, но у нас все еще была ошибка в прекомпилированном (.pch) файле, пытающемся прочитать заголовок модуля

(т.е. #import < CocoaLumberjack/CocoaLumberjack.h > ).

Посмотрев на вывод raw build, я, наконец, заметил, что ошибка нарушает наш Watch Extension Target, а не главную цель, которую мы строили, потому что мы также импортировали предварительно скомпилированный заголовочный файл .chch в целевые объекты Watch OS и он терпел неудачу. Убедитесь, что ваши целевые настройки Watch OS не пытаются импортировать файл .pch(особенно если вы установили этот импорт из основного целевого параметра, как и я!)

Ответ 23

Один простой способ: 1. Удалите папку Pods и файл Podfile.lock. Но не удаляйте Podfile 2. Запустите следующую команду в корневой папке проекта:

pod install