it-swarm.com.ru

iOS - Сбой сборки с CocoaPods не может найти заголовочные файлы

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

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

181
Filip Majernik

Обновление

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

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

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

------ Завершить обновление


Примечание. Обратите внимание, что для получения информации о шагах, приведенных ниже, необходимо просмотреть «Проект-> Информация-> Конфигурации».


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

Pods.xcconfig not working

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

Pods.xcconfig working

203
waggles

Обновление

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

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

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

87
Bill Burgess

1.Check 

настройки сборки -> Путь поиска -> Пути поиска в заголовке пользователя ->

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

enter image description here

enter image description here

enter image description here enter image description here

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

use_frameworks!

В вашем File-Bridging-Header.h, форматер должен выглядеть так 

#import "MBProgressHUD.h"

остальное должно быть ниже

#import <MBProgressHUD.h>

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

74
Albert.Qing

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

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

"${PODS_ROOT}/BuildHeaders"

к записи «Пути поиска заголовка пользователя» и проверке «рекурсивно».

57
averydev

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

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

50
mactive

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

EDIT Вы можете проверить символическую ссылку следующим образом: создать текстовый файл с именем '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
35
brainray

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

Перейдите на вкладку «Цель»> «Настройки сборки» и найдите параметр «Пути поиска по заголовку пользователя». 

Установите для этого параметра значение «$ (BUILT_PRODUCTS_DIR)» и установите флажок «Рекурсивно». 

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

====

Обновление

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

35
Snowcrash

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

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

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

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

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

18
Scott Fister

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

#import <ASLogger.h>

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

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

Update: Они вытащили мою просьбу :)

16
Tieme

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

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

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

10
tilo

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

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

Xcode -> Настройки -> Местоположения -> ** DerivedData

9
bithavoc

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

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

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

Макропроцессор - $ (наследуется)

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

Построить только архитектуру

Отладка - да

Релес - Нет

Путь поиска

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

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

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

2
Surezz

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

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

2
Omaty

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

  1. Удалить весь проект
  2. Запустите git, клонируйте проект и запустите пакет exec pod install
  3. cd peoject и запустить удаленное добавление upstream your-remote-rep-add
  4. мерзавец получить вверх по течению
  5. мастер проверки
  6. git merge upstream/master

И тогда это работает.

1
Azure Yu

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

1
beryllium

Мне пришлось скачать Zip из git hub и перетащить отсутствующие файлы в Finder по соответствующим путям в Pod/...

1
neelamc23

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

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

Глядя на исходные данные сборки, я наконец-то заметил, что ошибка нарушала нашу цель расширения OS Watch, а не основную цель, которую мы строили, потому что мы также импортировали предварительно скомпилированный заголовочный файл .pch в цели Watch OS, и это не удавалось. там. Убедитесь, что прилагаемые настройки цели Watch OS не пытаются импортировать файл .pch (особенно, если вы установили этот импорт из основной настройки цели, как я!)

0
Owen Hartnett

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

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

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

0
DiscDev

Для меня сработало то, что я выбрал проект Pods, нашел и выбрал целевую платформу с отсутствующим заголовком в целевом каталоге проекта Pod и установил «Build Active Architecture Only» на «No» в «Architectures» в настройках сборки цели.

0
Aaron

Я обнаружил, что включение библиотеки в качестве модуля pod напрямую помогает динамическим библиотекам. Например, для Firebase:

pod 'RNFirebase', :path => 'path/to/node_modules/react-native-firebase/ios'

Или для ASLogger:

pod 'ASLogger', :path => 'path/to/node_modules/aslogger/ios' // path to header files

Изменение или жесткое кодирование HEADER_SEARCH_PATHS мне не помогло. Если ошибка когда-либо повторяется, нет необходимости rm -rf node_modules, ни удалять файл pod и т.д., Я нашел полезным очистить кеш.

Для реактивно-родного я бегу 

    rm -rf $TMPDIR/react-native-packager-cache-*
    rm -rf $TMPDIR/metro-bundler-cache-*
    rm -rf $TMPDIR/metro-* 
    rm -rf $TMPDIR/react-* 
    rm -rf $TMPDIR/haste-*
    rm -rf "$(getconf DARWIN_USER_CACHE_DIR)/org.llvm.clang/ModuleCache"
    npm start -- --reset-cache

Для Xcode я удаляю папки в ~/Library/Developer/Xcode/DerivedData

0
ehacinom

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

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

   gem install cocoapods --pre

или же:

   Sudo gem install cocoapods --pre

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

Должно быть, это ошибка кокоапод.

0
Lukasz

Для меня то, что исправило это, было целью развертывания iOS для моего проекта Pods, был ниже, чем сам мой проект. Как только я сделал это так же, как мой проект, он смог найти заголовочный файл.

0
Josh

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

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

0
user1494912