iOS - kompilacja kończy się niepowodzeniem, ponieważ CocoaPods nie może znaleźć plików nagłówkowych

190

Mam projekt iOS korzystający z CocoaPods. Wszystko działało sprawnie, dopóki inny programista nie zaczął pracować nad tym samym projektem. Wprowadził pewne zmiany (tylko o ile wiem, tylko w kodzie) i utworzył nowy oddział w repozytorium. Sprawdziłem jego gałąź i próbowałem ją zbudować, ale pojawia się błąd: nie znaleziono pliku ASLogger / ASLogger.h.

Nawet jeśli usunę cały projekt i zrobię nową kopię i użyję opcji „zainstaluj strąki”. błąd kompilacji nadal występuje. Czy masz pojęcie, gdzie może być problem? Jeśli potrzebujesz więcej informacji, po prostu zapytaj.

Filip Majernik
źródło
3
Zamiast używać podwójnego stylu środki, #import „ASLogger.h” Próbowałem tego, #import <ASLogger.h> A on pracował dla mnie :)
Baig
2
FYI: Prosta odpowiedź Baigsa rozwiązała mój problem ze znalezieniem nagłówka.
Pedroinpeace

Odpowiedzi:

205

Aktualizacja

Upewnij się, że Podfilezawiera link_withon cele brakujących plik konfiguracyjny. W przeciwnym razie Cocoapods domyślnie ustawia pierwszy cel . na przykład

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

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

------ Zakończ aktualizację


Uwaga: Należy pamiętać, że należy zapoznać się z Projektem-> Informacje-> Konfiguracje, aby wykonać poniższe kroki.


Miałem podobne objawy i stwierdziłem, że pods.xcconfigplik nie został uwzględniony w konkretnym target, który próbowałem zbudować. Niektóre inne sugerowane rozwiązania działały dla mnie, ale wydawało się, że dotyczyły one części problemu.

Pods.xcconfig nie działa

Prostym rozwiązaniem była zmiana zestawu plików konfiguracyjnych dla celów, które nie miały jednego zestawu.

Działa Pods.xcconfig

kiwa się
źródło
4
Dla mnie „instalacja strąków” ustawia to tylko na pierwszym celu. Postępowanie zgodnie z sugestią zawartą w tej odpowiedzi rozwiązało mój problem.
Troy
1
Wreszcie rozwiązanie: kapsułki dodano TYLKO do pierwszego celu, a nie do różnych docelowych wersji testowych (alfa, beta, kandydat do wydania)! Wielkie dzięki!
JOM
Używanie link_withdo określenia mojego innego celu działało dla mnie. Wielkie dzięki. Właśnie spędziłem nad tym kilka godzin.
Dylan Hand
to zadziałało dla mnie! Sklonowałem istniejący projekt, a następnie zaktualizowałem strąki. więc zgaduję, że aktualizacja kapsuły przerzuciła niektóre ustawienia, albo previos dev używał xcode 5 lub coś takiego (jestem na xcode 6), dzięki !!!
szklarnia
4
link_withnie jest obsługiwany w Cocoapods 1.0 lub wyższej.
Vive
90

Aktualizacja

Zaktualizowałem to od czasu mojej pierwotnej odpowiedzi, która otrzymała opinię, więc mam nadzieję, że to pomoże. A jeśli tak, mam nadzieję, że odzyska mój głos.

Jeśli nagłówki nie są importowane, prawdopodobnie występuje konflikt w pliku HEADER_SEARCH_PATHS. Spróbuj dodać $(inherited)do ścieżek wyszukiwania nagłówka w Ustawieniach kompilacji, aby upewnić się, że pobiera ona wszystkie ścieżki wyszukiwania zawarte w pliku .xcconfig z twoich CocoaPods.

Powinno to pomóc w przypadku wszelkich konfliktów i poprawnie zaimportować źródło.

Bill Burgess
źródło
2
Wystąpił problem: pliki pod nie były wykrywane w aplikacji i „problem z zablokowanym folderem svn”, który występuje po usunięciu lub przeniesieniu podkatalogów .svn: Rozwiązanie: wykonując następujące czynności: 1. Odinstaluj CocoaPods tylko z aplikacji. Plik xcodeproj istnieje (odniesienie: stackoverflow.com/questions/16427421/... ) 2. Znowu zainstalowano pliki podf (skierowane: raywenderlich.com/12139/introduction-to-cocoapods ) 3. Dodano flagę $ (dziedziczoną) w celu „HEADER_SEARCH_PATHS” i „OTHER_LDFLAGS” aplikacji.
Alphonse R. Dsouza
1
Konieczne może być również dodanie $ (odziedziczone) do ustawienia FRAMEWORK_SEARCH_PATHS.
George
1
@ AlphonseR.Dsouza Twoje rozwiązanie zadziałało dla mnie - dodałem $ (odziedziczone) do OTHER_LDFLAGS dzięki milionowi!
Nika Kasradze,
3
$ (odziedziczony) należy dodać w ustawieniach projektu lub ustawieniach docelowych?
skypirate
Miałem podobny problem, nie miałem wcześniejszych doświadczeń ze strąkami. Również w Podfile nie wspomniałem o 2 celach. Tak, miałem 2 cele. Kiedy wspomniałem o drugim celu i zaktualizowałem plik kapsuły, terminal podał pewne ostrzeżenie podobne do twojej sugestii, aby dodać $ dziedziczone. Zrobiłem to i działało idealnie.
Jasmeet,
78

1.Sprawdź

Ustawienia kompilacji -> Ścieżka wyszukiwania -> Ścieżki wyszukiwania nagłówka użytkownika ->

  • Rekursywny „$ {PODS_ROOT} /”

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj

2. Sprawdź styl importu (KLUCZOWY PUNKT), jeśli podfilezostał ustawiony

use_frameworks!

W twoim File-Bridging-Header.h, formatyzatorowi powinno się to podobać

#import "MBProgressHUD.h"

inaczej powinno być poniżej

#import <MBProgressHUD.h>

3. To musi być praca! Zaufaj mi

Albert.Qing
źródło
1
Większość błędów znika. Jednak co mam zrobić, gdy zależność zawiera instrukcję importu, taką jak: #import <EARestrictedScrollView / EARestrictedScrollView.h>. Następnie kompilator każe mi zamiast tego napisać #import EARestrictedScrollView.h. Ale nie mogę modyfikować kapsuły.
produkcji
62

Pliki nagłówkowe, będziesz moją śmiercią ...

Wreszcie udało się go uruchomić, dodając (w tym cytaty)

"${PODS_ROOT}/BuildHeaders"

do wpisu Ścieżki wyszukiwania nagłówka użytkownika i zaznaczenie „rekurencyjne”.

averydev
źródło
6
Pamiętaj, że cytaty są tutaj bardzo ważne. Bez nich nie dałbym rady.
DiscDev
5
+1 miałem już $(inherited)(nie działało), ale dodanie tego działało dla mnie.
iwasrobbed
Nie dostałem tego, co próbujesz powiedzieć. : / Czy mógłbyś prosić o rozwinięcie?
rohan-patel
Inną przydatną sztuczką jest zdmuchnięcie obszaru roboczego i katalogu strąków i zainstalowanie pod. Jest to na ogół bardziej kompletne rozwiązanie.
averydev
1
To w końcu pomogło AppCode poprawnie znaleźć wszystkie importowane pliki nagłówków. Bez tego działał w xCode, ale nie w AppCode. Dzięki!
sarsonj
52

Znalazłem, że ${PODS_HEADERS_SEARCH_PATHS}brakuje i nie jest zdefiniowany w mojej gałęzi rozwijania git, więc dodałem "$(SRCROOT)/Pods/Headers/"dla Ścieżek wyszukiwania nagłówka z rekurencyjnym

To jest dla mnie ok

aktywny
źródło
To była dla mnie odpowiedź, zaktualizowałem cocoapody i myślę, że to sprawiło, że PODS_HEADERS_SEARCH_PATHS odszedł. Moje rozwiązanie było podobne do tego, ale użyłem „$ (PODS_ROOT) / Headers”
Andrew Aitken
Inne odpowiedzi nie działały dla mnie, ale ta zadziałała. Zauważyłem, że nie $(SRCROOT)/Pods/Headers
podałem
@Hlung cześć, gdzie muszę dodać $ (SRCROOT) / Pods / Headers /? Doceń to
VAAA
1
@VAAA Target> Ustawienia kompilacji> Ścieżka wyszukiwania nagłówka
Hlung
myślę, że to właściwa odpowiedź, co należy zaakceptować, co sądzi @Filip Majernik
Ratul Sharker
35

Obie inne odpowiedzi tutaj nie pomogły. Znalazłem 2 inne problemy, które mogą to naprawić:

EDYCJA Możesz sprawdzić dowiązanie symboliczne w ten sposób: utwórz plik tekstowy o nazwie „czek” bez rozszerzenia. skopiuj do niego te linie:

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

Następnie przejdź do terminala, przejdź do folderu, w którym znajduje się plik czeku i wpisz

bash check
mózg
źródło
Dziękuję Ci bardzo! Pierwszy wpis rozwiązał to dla mnie. Strąki zostały ustawione jako pierwszy cel tylko w naszym projekcie. To dobrze się skompilowało, ale drugi cel nie. Więc dodałem do niego konfigurację Pods i teraz problem zniknął.
mwidmann
Nie widzę „Strąków” w konfiguracjach. Czy to oznacza, że ​​moje dowiązanie symboliczne jest zepsute?
Adamski
35

Oto, co zadziałało dla mnie:

Przejdź do zakładki Cel> Ustawienia kompilacji i znajdź ustawienie „Ścieżki wyszukiwania nagłówka użytkownika”.

Ustaw to na „$ (BUILT_PRODUCTS_DIR)” i zaznacz pole wyboru „Rekurencyjne”.

Teraz wbudowany cel przeszuka udostępniony katalog kompilacji obszaru roboczego w celu zlokalizowania możliwych do połączenia plików nagłówkowych.

====

AKTUALIZACJA

Miałem ostatnio podobny (choć nieco inny) problem. Okazało się, że Xcode nie mógł znaleźć kapsuł, ponieważ otworzyłem .xcodeprojplik zamiast .xcworkspacepliku. Może pomóc innym w przyszłości.

Snowcrash
źródło
1
To działało dla mnie, ale dopiero po wyjściu z Xcode, uruchomieniu pod installi ponownym otwarciu.
Ken M. Haggerty
@Snowcrash jaki cel? cel pod czy główny cel projektu?
VAAA
19

Jeśli żadne z powyższych nie zadziałało i występuje ten błąd, ponieważ właśnie przeszedłeś do use_frameworks!pliku Podfile, czytaj dalej:

Wypróbowałem wszystkie powyższe rozwiązania i wiele więcej, zanim dowiedziałem się, że w moim przypadku nie chodzi tu wcale o ścieżki nagłówków wyszukiwania; po przejściu do use_frameworks!pliku Podfile nie trzeba już uwzględniać ram w nagłówku pomostowym, a w rzeczywistości Xcode zgłasza bardzo nieprzydatny błąd „nie można znaleźć nagłówka”.

To, co musisz zrobić, to usunąć cały import z mostkowego pliku nagłówkowego i zamiast tego użyć Swift import Modulew swoich indywidualnych plikach Swift w razie potrzeby, tak jak w przypadku frameworków Swift.

ORAZ jeśli używasz któregoś z nagłówków frameworka w swoich klasach Obj-C (w moim przypadku mamy klasę wygody, która korzystała z FBSDK), musisz zmienić go z importu lokalnego na globalny (oznacza to zmianę #import "Module.h"na #import <Module/Module.h>, która powinna być automatycznie uzupełniana dla ciebie, kiedy zaczniesz wpisywać nazwę frameworku. W moim przypadku tak było <AFNetworking/AFHTTPRequestOperationManager.h>).

Edycja: Od tego czasu nauczyłem się, że robienie i @import Moduleużywa pliku parasolki, który jest jeszcze bezpieczniejszy.

Scott Fister
źródło
16

Czy próbowałeś zaimportować styl Cocoapods?

#import <ASLogger.h>

Informacje na stronie nie są do końca jasne, wysłałem żądanie ściągnięcia:

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

Aktualizacja: Wyciągnęli moją prośbę :)

Zwiąż mnie
źródło
Zamiast używać podwójnego stylu środki, #import „ASLogger.h” Próbowałem tego, #import <ASLogger.h> A on pracował dla mnie :)
Baig
Próbowałem już wcześniej i działało to dla mnie, ale czasami występują inne problemy, gdy nie działa. Możesz także użyć formatu <Podname / Filename.h> przynajmniej w niektórych sytuacjach.
funroll
Tak, to też działało dla mnie! Rozwiązano to bez czyszczenia i usuwania danych pochodnych, ale zadziałało.
PostCodeism,
10

Wiki daje porady, jak rozwiązać ten problem:

Jeśli Xcode nie może znaleźć nagłówków zależności:

Sprawdź, czy pliki nagłówków pod są poprawnie dowiązane symbolicznie w Pods / Headers i czy nie zastępujesz HEADER_SEARCH_PATHS (patrz # 1). Jeśli Xcode nadal nie może ich znaleźć, w ostateczności możesz dołączyć import, np. #Import „Pods / SSZipArchive.h”.

tilo
źródło
14
Czy ktoś mógłby wyjaśnić dokładnie, w jaki sposób „Sprawdź, czy pliki nagłówków pod są poprawnie dowiązane symbolicznie w Pods / Headers”?
Dave Collins
proszę zobaczyć moją odpowiedź powyżej, aby sprawdzić
łącze
Przeczytaj także odpowiedź mózgową na temat konfiguracji przed zmieszaniem instrukcji importu.
Rog
tak, niektóre strąki prowadzą do nieprawidłowego katalogu, na przykład $(PROJECT_DIR)/Pods/Headers/Public/xxx/ios/xxx.histnieje dodatkowy iosfolder ...
Dong Ma
9

Byłem jedynym programistą w zespole, który doświadczył tego samego problemu, działał idealnie dla wszystkich, więc zdałem sobie sprawę, że to musi być moje środowisko. Próbowałem git clonetego samego projektu w innym katalogu i skompilowałem się idealnie, a potem zdałem sobie sprawę, że musi to być pamięć podręczna Xcode dla mojej ścieżki projektu, że „gdzieś” to folder DerivedData, po prostu usuń go i wykonaj czystą kompilację swojego projekt, zadziałało dla mnie.

Możesz uzyskać ścieżkę, a nawet otworzyć folder w wyszukiwarce, przechodząc do:

Xcode -> Preferencje -> Lokalizacje -> ** Dane pochodne

bithavoc
źródło
1
W moim przypadku problem pojawił się po aktualizacji kapsułek, więc pomyślałem, że w cocoapods powinien poszukać problemu. Wypróbowałem tutaj wszystkie rozwiązania bez powodzenia i ostatecznie wyczyściłem DerivedData - i pomogło! dziękuję
Varrry
3

Zaktualizuję poniższe elementy w ustawieniach kompilacji i nie otrzymałem żadnych błędów. Aby to sprawdzić, zaktualizuj swoje cocoapody.

Ustawienia kompilacji

Włącz kod bitowy - TAK (jeśli używasz kodu bitowego)

Preprocesor makr - $ (dziedziczony)

Inna flaga linkera - objc, -lc ++, $ (dziedziczona)

Buduj tylko architekturę

Debugowanie - Tak

Relese - Nie

Wyszukaj ścieżkę

Ścieżka wyszukiwania struktury - $ (dziedziczona) $ (PROJECT_DIR)

Ścieżka wyszukiwania w bibliotece - $ (dziedziczona)

Ścieżka wyszukiwania nagłówka - $ (dziedziczona)

Surezz
źródło
2

Jeśli wystąpiły błędy kompilacji po „ instalacji pod ” lub „ aktualizacji pod ”, być może jeden z twoich modułów został zbudowany przy użyciu XCode 6.3, gdy nadal używasz poprzedniej wersji.

W moim przypadku musiałem zaktualizować OSX z indywidualnej wersji do Yosemite, aby mieć Xcode 6.3 i rozwiązać problem

Omaty
źródło
Cześć @omaty, czy to jedyne rozwiązanie? Obecnie korzystam z Mavericks z Xcode 6.2
goelv
1
Cześć @goelv w moim przypadku było to jedyne rozwiązanie, jakie znalazłem. Byłem taki jak ty w Mavericks i Xcode 6.2.
Omaty,
Myślę, że nawet ja mam ten sam problem. Mój kolega z drużyny ma Xcode 6.3 w Yosemite i działa dobrze dla niego, podczas gdy staram się pozbyć problemu z nagłówkiem, który nie został znaleziony w Mavericks w Xcode 6.2.
Sagar S. Kadookkunnan
1
Kontynuacja: zaktualizowałem również komputer do Yosemite i Xcode 6.3.1, teraz jestem w stanie budować bez żadnych problemów.
Sagar S. Kadookkunnan
1

dla mnie problem polegał na wartości flag Other Linker. Z jakiegoś powodu nie miałem cytatów w flagach takich jak -l"xml2" -l"Pods-MBProgressHUD".

beryl
źródło
Miałem problemy z Cocoapod firmy Localytics. Pod Other Linker Flagsznalazłem dwa wpisy: -|Localyticsi |-PodsLocalytics. Usunąłem je, a następnie udało mi się skompilować.
Chris
1

Musiałem pobrać zip z git hub i przeciągnąć brakujące pliki do Findera na odpowiednie ścieżki w Pod / ...

neelamc23
źródło
1

Dla mnie zadziałało wybranie projektu Pods, znalezienie i wybranie docelowej struktury z brakującym nagłówkiem w katalogu docelowym projektu Pod i ustawienie „Buduj tylko aktywną architekturę” na „Nie” w „Architekturach” w ustawieniach kompilacji celu.

Aaron
źródło
1

Mam ten sam problem, ale powyższe rozwiązania nie działają. Naprawiłem to, robiąc to:

  1. Usuń cały projekt
  2. Uruchom git, klonuj projekt i uruchom instalację pakietu exec pod pakietem
  3. cd peoject i uruchom zdalne add upstream your-remote-rep-add
  4. git fetch w górę
  5. Git Checkout Master
  6. git merge upstream / master

A potem to działa.

Azure Yu
źródło
1

Dla mnie to, co naprawiło, to cel wdrożenia iOS dla mojego projektu Pods był niższy niż sam projekt. Gdy zrobiłem to samo, co mój projekt, był w stanie znaleźć plik nagłówka.

Josh
źródło
bracie ! zasługujesz na 1000 pozytywnych opinii. Utknąłem z tym przez 4 godziny, a twoje rozwiązanie pomogło mi. dzięki dużo, dzięki bardzo!
warzone_fz
0

Byłem na starcie GM Xcode 5.0 i nie mogłem uzyskać żadnej z tych odpowiedzi do pracy. Próbowałem każdej odpowiedzi na SO na wiele różnych pytań na temat importu nagłówka w / cocoapods.

WRESZCIE znalazłem rozwiązanie, które działało dla mnie : uaktualniłem do Xcode 5.0 za pośrednictwem Mac AppStore (zainstalowany na początku GM) i teraz import nagłówków działa zgodnie z oczekiwaniami.

W dalszym ciągu miałem również wersję beta Xcode 5 w moim systemie i również ją usunąłem. Może było to połączenie tych dwóch rzeczy, ale mam nadzieję, że to pomoże komuś innemu.

DiscDev
źródło
0

To była dla mnie odpowiedź, zaktualizowałem cocoapody i myślę, że to sprawiło, że PODS_HEADERS_SEARCH_PATHS odszedł. Moje rozwiązanie było podobne do tego, ale użyłem „$ (PODS_ROOT) / Headers” - Andrew Aitken

Dziękuję bardzo za tę odpowiedź. Z trudem szukałem sposobów rozwiązania mojego problemu. Dziękuję Ci bardzo.

użytkownik1494912
źródło
0

Żadna z odpowiedzi mi nie pomogła (miałem swoje strąki połączone ze wszystkimi celami, poprawnie konfigurowałem konfiguracje, ustawiałem ścieżki wyszukiwania „$ (dziedziczone)” itp.).

Problem sam zniknął po zaktualizowaniu cocoapods do najnowszej wersji debugowania za pomocą standardowego polecenia install / update:

   gem install cocoapods --pre

lub:

   sudo gem install cocoapods --pre

(jeśli podczas instalacji użyto sudo).

To musiał być błąd cocoapods.

Łukasz
źródło
0

Jedno proste obejście: 1. Usuń folder Pods i plik Podfile.lock. Ale nie usuwaj Podfile 2. Uruchom następujące polecenie w folderze głównym projektu:

pod install
farhad rubel
źródło
Rozwiązałem problem z tym rozwiązaniem.
dobiho,
0

Oto kolejny powód: wszystkie ścieżki nagłówka wydawały się w porządku, ale nadal mieliśmy błąd w pliku prekompilowanym (.pch), który próbował odczytać nagłówek pod

(tj. #import <CocoaLumberjack / CocoaLumberjack.h>).

Patrząc na dane wyjściowe surowego kompilacji, w końcu zauważyłem, że błąd łamał nasz cel rozszerzenia OS Watch, a nie główny cel, który budowaliśmy, ponieważ importowaliśmy również wstępnie skompilowany plik nagłówka .pch do celów Watch OS i to się nie udawało tam. Upewnij się, że towarzyszące ustawienia docelowe systemu Watch Watch nie próbują importować pliku .pch (zwłaszcza jeśli ustawiłeś ten import z głównego ustawienia docelowego, tak jak ja!)

Owen Hartnett
źródło
0

Przekonałem się, że włączenie biblioteki jako instalacji pod bezpośrednio pomaga bibliotekom dynamicznym. Na przykład dla Firebase:

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

Lub dla ASLogger:

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

Zmiana lub zakodowanie na stałe HEADER_SEARCH_PATHSnie pomogło mi. Jeśli błąd się powtórzy, nie jest to koniecznerm -rf node_modules ani usuwanie pliku pod itp., Uznałem, że warto wyczyścić pamięć podręczną.

Dla Reaktywny-natywny, uruchamiam

    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

W przypadku Xcode usuwam foldery ~/Library/Developer/Xcode/DerivedData

ehacinom
źródło
0

Myślę, że najlepszym rozwiązaniem jest Build settings -> Search Path -> User Header Search Pathsznalezienie ścieżki biblioteki i przejście przez nią w Finderze. Upewnij się, że istnieje cała ścieżka, w tym ścieżka importu.

Dla mnie moja ścieżka była krótsza niż w tutorialu. W samouczku było coś takiego #import <SDK/path/to/sdk/File.h>, ale okazało się, że jest po prostu#import <SDK/File.h>

Simon Moshenko
źródło
-1

Mam tutaj inne działające rozwiązanie,

  1. Zamknij Xcode
  2. Otwórz Xcode i wyczyść projekt
  3. Najpierw zbuduj projekt Pods
  4. Zbuduj projekt
Pramod More
źródło
-2

Rozwiązałem ten problem dla Xcode 8.2.1 poprzez przeciągnięcie i upuszczenie frameworka, którego chcę użyć.

Dhruv Narayan Singh
źródło