iOS - La compilazione non riesce con CocoaPods non riesce a trovare i file di intestazione


190

Ho un progetto iOS con CocoaPods. Tutto ha funzionato senza intoppi fino a quando un altro sviluppatore ha iniziato a lavorare sullo stesso progetto. Ha apportato alcune modifiche (solo al codice per quanto ne so) e ha creato un nuovo ramo nel repository. Ho controllato il suo ramo e ho provato a crearlo, ma sto ricevendo un errore: file ASLogger / ASLogger.h non trovato.

Anche se elimino l'intero progetto e ne eseguo una nuova copia e utilizzo "pods install". l'errore di compilazione è ancora lì. Hai idea di dove possa essere il problema? Se hai bisogno di ulteriori informazioni, basta chiedere.


3
Invece di usare lo stile con virgolette doppie, #import "ASLogger.h" l'ho provato, #import <ASLogger.h> E ha funzionato per me :)
Baig,

2
Cordiali saluti: Baigs semplice risposta risolto il mio problema senza trovare l'intestazione.
Pedroinpeace,

Risposte:


205

Aggiornare

Assicurati che le tue Podfileinclusioni link_withsu target non abbiano un file di configurazione. Cocoapods imposta il primo obiettivo solo per impostazione predefinita, altrimenti. per esempio

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

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

------ Fine aggiornamento


Nota: si prega di notare che è necessario guardare Progetto-> Informazioni-> Configurazioni per i passaggi seguenti.


Ho avuto sintomi simili e ho scoperto che il pods.xcconfigfile non veniva incluso nello specifico targetche stavo cercando di compilare. Alcune delle altre soluzioni suggerite hanno funzionato per me, ma questa sembra aver risolto parte del problema di fondo.

Pods.xcconfig non funziona

La soluzione semplice era cambiare impostare il file di configurazione per le destinazioni che non avevano un set.

Pods.xcconfig funziona


4
Per me, '' installazione pods '' imposta questo solo sul primo target. Fare come suggerito in questa risposta ha risolto il mio problema.
Troia,

1
Finalmente una soluzione: i pod sono stati aggiunti SOLO al primo target, non a vari target di rilascio test (alpha, beta, release candidate)! Grazie mille!
JOM

Utilizzando link_withper specificare il mio altro obiettivo ha funzionato per me. Grazie molto. Ho appena trascorso diverse ore su questo.
Dylan Hand,

questo ha funzionato per me! ho clonato un progetto esistente e poi ho aggiornato i pod. quindi immagino che l'aggiornamento dei pod abbia capovolto alcune impostazioni, o il dispositivo di sviluppo precedente stava usando xcode 5 o qualcosa del genere (sono su xcode 6), grazie !!!
serra

4
link_withnon è supportato in Cocoapods 1.0 o versioni successive.
Vive

90

Aggiornare

L'ho aggiornato dalla mia risposta originale, che ha ottenuto il downvote, quindi spero che questo aiuti. E se lo fa, si spera che possa riavere il mio voto.

Se le intestazioni non vengono importate, probabilmente hai un conflitto in HEADER_SEARCH_PATHS. Prova ad aggiungere $(inherited)ai percorsi di ricerca delle intestazioni nelle Impostazioni di compilazione per assicurarti che esegua il pull in qualsiasi percorso di ricerca incluso nel file .xcconfig dai tuoi CocoaPods.

Questo dovrebbe aiutare in caso di conflitti e far importare correttamente l'origine.


2
Ho riscontrato un problema: i file pod non venivano rilevati nell'app e "problema svn ostruito cartella" che si verifica quando hai eliminato o spostato le sottodirectory .svn: Soluzione: seguendo i passaggi seguenti: 1. Disinstallare CocoaPods solo dall'app. xcodeproj file esiste (di cui: stackoverflow.com/questions/16427421/... ) 2.Installed podfiles di nuovo (di cui: raywenderlich.com/12139/introduction-to-cocoapods ) 3. $ (ereditato) flag aggiunto in target 'HEADER_SEARCH_PATHS' e "OTHER_LDFLAGS" dell'app.
Alphonse R. Dsouza,

1
Potrebbe anche essere necessario aggiungere $ (ereditato) all'impostazione FRAMEWORK_SEARCH_PATHS.
George,

1
@ AlphonseR.Dsouza la tua soluzione ha funzionato per me - ha aggiunto $ (ereditato) a OTHER_LDFLAGS grazie un milione!
Nika Kasradze,

3
$ (ereditato) dovrebbe essere aggiunto nelle impostazioni del progetto o di destinazione?
skypirate,

Ho avuto un problema simile, non avevo esperienze passate con i pod. Anche nel Podfile, non ho menzionato 2 obiettivi. Sì, avevo 2 obiettivi. Dopo aver menzionato il secondo obiettivo e aver aggiornato il file Pod, il terminale ha indicato alcuni avvertimenti simili al tuo suggerimento di aggiungere $ ereditato. L'ho fatto e ha funzionato perfettamente.
Jasmeet,

78

1.Controllare

costruire impostazioni -> Percorso di ricerca -> Percorsi di ricerca dell'intestazione utente ->

  • "$ {PODS_ROOT} /" ricorsivo

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine

2.Controllare lo stile di importazione (PUNTO CHIAVE), se è podfilestato impostato

use_frameworks!

Nel tuo File-Bridging-Header.h, al formattatore dovrebbe piacere questo

#import "MBProgressHUD.h"

altrimenti dovrebbe essere inferiore

#import <MBProgressHUD.h>

3.Questo deve essere un lavoro! fidati di me


1
La maggior parte degli errori scompare. Tuttavia, cosa devo fare quando una dipendenza ha una dichiarazione di importazione come: #import <EARestrictedScrollView / EARestrictedScrollView.h>. Quindi il compilatore mi dice di scrivere invece #import EARestrictedScrollView.h. Ma non riesco a modificare il mio pod.
productioncoder

62

File di intestazione, sarai la mia morte ...

Finalmente ha funzionato aggiungendo (comprese le virgolette)

"${PODS_ROOT}/BuildHeaders"

alla voce Percorsi di ricerca intestazione utente e selezionando "ricorsivo".


6
Nota che le virgolette sono molto importanti qui. Senza di loro, non riuscivo a farlo funzionare.
DiscDev

5
+1 ho già avuto $(inherited)(non funzionava) ma l'aggiunta di questo ha funzionato per me.
Ho rovinato il

Non ho capito cosa stai cercando di dire. : / Potresti per favore elaborare?
rohan-patel,

Un altro trucco utile è spazzare via l'area di lavoro e la directory pods e installare nuovamente pod. Questa è generalmente una soluzione più completa.
averydev,

1
Ciò ha infine aiutato AppCode a trovare correttamente tutte le importazioni di file di intestazione. Senza questo, ha funzionato in xCode, ma non in AppCode. Grazie!
Sarsonj,

52

Ho scoperto che ${PODS_HEADERS_SEARCH_PATHS}manca e non è definito nel mio ramo di sviluppo git, quindi ho aggiunto i "$(SRCROOT)/Pods/Headers/"percorsi di ricerca dell'intestazione con ricorsivo

Questo va bene per me


Questa è stata la risposta per me, ho aggiornato i cocoapodi e penso che abbia fatto sparire i PODS_HEADERS_SEARCH_PATHS. La mia soluzione era simile a questa ma ho usato "$ (PODS_ROOT) / Headers"
Andrew Aitken,

Le altre risposte non hanno funzionato per me, ma questa ha funzionato. $(SRCROOT)/Pods/Headers
Noterò

@ Ciao Ciao, dove devo aggiungere $ (SRCROOT) / Pods / Headers /? Lo
apprezzo

1
@VAAA Target> Impostazioni build> Percorso di ricerca intestazione
Hlung

penso che questa sia la risposta giusta cosa dovrebbe essere accettato, cosa ne pensi @Filip Majernik
Ratul Sharker

35

Entrambe le altre risposte non hanno aiutato qui. Ho trovato altri 2 problemi che potrebbero risolverlo:

MODIFICA Puoi controllare un link simbolico in questo modo: crea un file di testo chiamato 'check' senza estensione. copia queste righe in esso:

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

Quindi vai al terminale, passa alla cartella in cui si trova il file di controllo e digita

bash check

Grazie mille! La prima voce lo ha risolto per me. I pod sono stati impostati solo per il primo obiettivo nel nostro progetto. Questo compilato bene, ma l'altro obiettivo no. Quindi ho aggiunto anche la configurazione Pods e ora il problema è scomparso.
mwidmann,

Non vedo "Pod" nelle Configurazioni. Questo significa che il mio link simbolico è rotto?
Adamski,

35

Ecco cosa ha funzionato per me:

Vai alla scheda Target> "Impostazioni build" e trova l'impostazione "Percorsi di ricerca intestazione utente".

Impostare su "$ (BUILT_PRODUCTS_DIR)" e selezionare la casella di controllo "Ricorsivo".

Ora il target creato cercherà nella directory di build condivisa dell'area di lavoro per individuare i file di intestazione collegabili.

====

AGGIORNARE

Di recente ho avuto un problema simile (anche se leggermente diverso). Si è scoperto che Xcode non è riuscito a trovare i pod perché avevo aperto il .xcodeprojfile anziché il .xcworkspacefile. Potrebbe aiutare gli altri in futuro.


1
Questo ha funzionato per me, ma solo dopo aver lasciato Xcode, eseguito pod installe riaperto.
Ken M. Haggerty,

@Snowcrash quale target? l'obiettivo del pod o l'obiettivo principale del progetto?
VAAA,

19

Se nessuno dei precedenti ha funzionato per te e stai riscontrando questo errore perché sei appena passato al use_frameworks!tuo Podfile, continua a leggere:

Ho provato tutte le soluzioni sopra e molto di più prima di sapere che non si tratta affatto dei percorsi delle intestazioni di ricerca nel mio caso particolare; è quello quando passi ause_frameworks! nel tuo Podfile non hai più bisogno di includere framework nella tua intestazione ponte, e in effetti Xcode genererà l'errore molto inutile "impossibile trovare l'intestazione".

Quello che devi fare è rimuovere tutte le importazioni dal file di intestazione ponte e utilizzare invece Swift import Modulenei tuoi singoli file Swift secondo necessità, proprio come faresti per i framework Swift.

E se stai usando una delle intestazioni del framework nelle tue classi Obj-C (nel mio caso abbiamo una classe di convenienza che ha usato l'FBSDK) devi cambiarla da un'importazione locale a globale (questo significa cambiare #import "Module.h"in #import <Module/Module.h>, che dovrebbe completarsi automaticamente per te quando inizi a digitare il nome del framework. Nel mio caso lo era <AFNetworking/AFHTTPRequestOperationManager.h>).

Modifica: da allora ho imparato che fare un @import Moduleusa il file ombrello che è ancora più sicuro.


16

Hai provato a importare lo stile Cocoapods?

#import <ASLogger.h>

Le informazioni sul sito non sono molto chiare, ho inviato una richiesta pull:

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

Aggiornamento: hanno raccolto la mia richiesta :)


Invece di usare lo stile con virgolette doppie, #import "ASLogger.h" l'ho provato, #import <ASLogger.h> E ha funzionato per me :)
Baig,

L'ho provato prima e ha funzionato per me, ma a volte si verificano problemi diversi quando non funziona. Puoi anche usare il formato <Podname / Filename.h> almeno in alcune situazioni.
funroll

Sì, ha funzionato anche per me! Nessuna quantità di pulizia ed eliminazione dei dati derivati ​​lo ha risolto, ma ha funzionato.
PostCodeism,

10

Il wiki fornisce un consiglio su come risolvere questo problema:

Se Xcode non riesce a trovare le intestazioni delle dipendenze:

Controlla se i file di intestazione del pod sono correttamente collegati in modo corretto in Pod / Intestazioni e non stai eseguendo l'override di HEADER_SEARCH_PATHS (vedi # 1). Se Xcode non riesce ancora a trovarli, come ultima risorsa puoi anteporre le tue importazioni, ad es. #Import "Pods / SSZipArchive.h".


14
Qualcuno potrebbe approfondire esattamente come "Controllare se i file di intestazione del pod sono correttamente collegati in modo corretto in Pod / Header" per favore?
Dave Collins,

si prega di vedere la mia risposta sopra per come controllare un
collegamento

Si prega di consultare anche la risposta di brainray sulle configurazioni prima di manipolare le dichiarazioni di importazione.
Rog,

sì, alcuni pod si collegano a una directory non valida, come $(PROJECT_DIR)/Pods/Headers/Public/xxx/ios/xxx.h, c'è un extra di ioscartella ...
Dong Ma,

9

Ero l'unico sviluppatore del team a riscontrare lo stesso problema, ha funzionato perfettamente per tutti, quindi ho capito che doveva essere il mio ambiente. Ho provato agit clone dello stesso progetto in un'altra directory e si è compilato perfettamente, poi ho capito che doveva essere qualcosa di caching Xcode per il percorso del mio progetto da qualche parte, che "da qualche parte" è la cartella DerivedData, basta rimuoverlo e fare una build pulita del tuo progetto, ha funzionato per me.

Puoi ottenere il percorso e persino aprire la cartella in finder andando a:

Xcode -> Preferenze -> Posizioni -> ** DerivedData


1
Nel mio caso il problema è apparso dopo l'aggiornamento dei pod, quindi ho pensato che nei cocoapodi dovessi cercare il problema. Ho provato tutte le soluzioni qui senza fortuna e finalmente ho cancellato DerivedData - e mi ha aiutato! grazie
Varrry,

3

Aggiornerò quanto segue nelle mie impostazioni di Build e non ho riscontrato errori. Per verificare queste sono le cose mentre aggiorni i tuoi cocoapodi.

Costruisci impostazioni

Abilita codice bit - SÌ (se si utilizza bitcode)

Preprocessore macro - $ (ereditato)

Altro flag linker - objc, -lc ++, $ (ereditato)

Costruisci solo architettura

Debug: Sì

Relese - No

Percorso di ricerca

Percorso di ricerca del framework - $ (ereditato) $ (PROJECT_DIR)

Percorso di ricerca della libreria - $ (ereditato)

Percorso di ricerca dell'intestazione - $ (ereditato)


2

Se si sono verificati errori di costruzione dopo una " installazione pod " o un " aggiornamento pod ", è possibile che uno dei pod sia stato creato con XCode 6.3 mentre si sta ancora utilizzando una versione precedente.

Nel mio caso ho dovuto aggiornare il mio OSX da Mavericks a Yosemite per avere Xcode 6.3 e risolvere il problema


Ciao @omaty, è questa l'unica soluzione? Attualmente sto correndo su Mavericks con Xcode 6.2
goelv

1
Ciao @goelv nel mio caso è stata l'unica soluzione che ho trovato. Ero come te sotto Mavericks e Xcode 6.2.
Omaty,

Penso che anche io abbia lo stesso problema. Il mio compagno di squadra ha Xcode 6.3 in Yosemite e funziona bene per lui, mentre sto lottando per sbarazzarmi del problema dell'intestazione non trovato in Mavericks in Xcode 6.2.
Sagar S. Kadookkunnan,

1
Seguito: ho anche aggiornato la macchina a Yosemite e Xcode 6.3.1, ora sono in grado di costruire senza problemi.
Sagar S. Kadookkunnan,

1

per me il problema era nel valore dei flag di altri linker. Per qualche ragione non avevo citazioni tra bandiere come -l"xml2" -l"Pods-MBProgressHUD".


Ho avuto problemi con Cocoapod di Localytics. Sotto Other Linker Flagsho trovato due voci: -|Localyticse |-PodsLocalytics. Ho rimosso quelli e poi sono stato in grado di compilare.
Chris,

1

Ho dovuto scaricare lo zip dall'hub git e trascinare i file mancanti nel Finder nei percorsi corrispondenti in Pod / ...


1

Ciò che ha funzionato per me è stato selezionare il progetto Pods, trovare e selezionare il framework di destinazione con l'intestazione mancante nella directory di destinazione del progetto Pod e impostare "Costruisci solo architettura attiva" su "No" sotto "Architetture" nelle impostazioni di costruzione del target.


1

Ho lo stesso problema, ma le soluzioni precedenti non possono funzionare. L'ho risolto facendo questo:

  1. Rimuovi l'intero progetto
  2. Esegui git clona il progetto ed esegui il bund exec exec pod install
  3. cd the peoject ed esegui remote add upstream your-remote-rep-add
  4. git fetch upstream
  5. git checkout master
  6. git merge upstream / master

E poi funziona.


1

Per me, ciò che è stato risolto era l'obiettivo di distribuzione iOS per il mio progetto Pods era inferiore al mio progetto stesso. Una volta reso lo stesso del mio progetto è stato in grado di trovare il file di intestazione.


Fra ! meriti 1000 voti. sono rimasto bloccato per 4 ore e la tua soluzione mi ha aiutato. grazie mille grazie mille!
warzone_fz,

0

Ero sul seme GM di Xcode 5.0 e non riuscivo a far funzionare nessuna di queste risposte. Ho provato ogni singola risposta su SO su più domande diverse sulle importazioni di intestazione con cocoapods.

FINALMENTE ho trovato una soluzione che ha funzionato per me : ho aggiornato a Xcode 5.0 tramite Mac AppStore (installato sulla parte superiore del seed GM) e ora le importazioni di intestazione funzionano come previsto.

Avevo ancora una versione beta di Xcode 5 sul mio sistema e l'ho anche cancellata. Forse era una combinazione delle due cose, ma spero che questo aiuti qualcun altro.


0

Questa è stata la risposta per me, ho aggiornato i cocoapodi e penso che abbia fatto sparire i PODS_HEADERS_SEARCH_PATHS. La mia soluzione era simile a questa ma ho usato "$ (PODS_ROOT) / Headers" - Andrew Aitken

Grazie mille per questa risposta Ho avuto difficoltà a cercare modi per risolvere il mio problema. Grazie mille.


0

Nessuna delle risposte mi ha aiutato (avevo i miei pod collegati a tutti i target, ho configurato correttamente le configurazioni, ho impostato correttamente i percorsi di ricerca "$ (ereditato)", ecc ...).

Il problema è scomparso da solo dopo aver aggiornato cocoapods alla versione di debug più recente utilizzando il comando di installazione / aggiornamento standard:

   gem install cocoapods --pre

o:

   sudo gem install cocoapods --pre

(se sudo è stato usato durante l'installazione).

Deve essere stato un bug di cocoapodi.


0

Una soluzione semplice è: 1. Elimina la cartella Pods e il file Podfile.lock. Ma non eliminare Podfile 2. Eseguire il comando seguente nella cartella principale del progetto:

pod install

Ho risolto il mio problema con questa soluzione.
Dobiho,

0

Ecco un altro motivo: tutti i percorsi dell'intestazione sembravano a posto, ma continuavamo a riscontrare un errore nel file precompilato (.pch) nel tentativo di leggere un'intestazione del pod

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

Osservando l'output di build non elaborato, ho finalmente notato che l'errore stava infrangendo la nostra destinazione di estensione OS OS, non la destinazione principale che stavamo costruendo, perché stavamo anche importando il file di intestazione precompilata .pch nelle destinazioni Watch OS e non funzionava Là. Assicurati che le impostazioni di destinazione del tuo OS Watch di accompagnamento non provino a importare il file .pch (specialmente se imposti tale importazione dall'impostazione di destinazione principale, come ho fatto io!)


0

Ho scoperto che includere la libreria come installazione pod aiuta direttamente le librerie dinamiche. Ad esempio, per Firebase:

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

O per ASLogger:

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

Cambiare o hardcoding HEADER_SEARCH_PATHSnon mi ha aiutato. Se l'errore si ripresenta, non è necessariorm -rf node_modules né eliminare il file pod ecc., Ho trovato utile svuotare la cache.

Per reagire-nativo, corro

    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

Per Xcode rimuovo le cartelle in ~/Library/Developer/Xcode/DerivedData


0

Penso che una soluzione definitiva sia quella di andare Build settings -> Search Path -> User Header Search Paths, trovare il percorso della tua libreria e percorrerlo in un Finder. Assicurarsi che esista tutto il percorso, incluso il percorso di importazione.

Per me il mio percorso è stato più breve rispetto a un tutorial. Nel tutorial era qualcosa di simile #import <SDK/path/to/sdk/File.h>, ma si scopre che è giusto#import <SDK/File.h>


-1

Ho un'altra soluzione funzionante qui,

  1. Esci da Xcode
  2. Apri Xcode e pulisci progetto
  3. Crea prima il progetto Pods
  4. Costruisci progetto


-2

Ho risolto questi problemi per Xcode 8.2.1 mediante il framework drag and drop che desidero utilizzare.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.