iOS - falha na compilação com o CocoaPods não é possível encontrar os arquivos de cabeçalho

190

Eu tenho um projeto iOS usando CocoaPods. Tudo estava funcionando bem até que outro desenvolvedor começou a trabalhar no mesmo projeto. Ele fez algumas alterações (apenas no código, até onde eu sei) e fez uma nova ramificação no repositório. Fiz o check-out do seu ramo e tentei construí-lo, mas estou recebendo um erro: O arquivo ASLogger / ASLogger.h não foi encontrado.

Mesmo que eu exclua todo o projeto e faça uma nova cópia e use 'pods install'. a falha de compilação ainda está lá. Você tem alguma idéia de onde o problema pode estar? Se você precisar de mais informações, basta perguntar.

Filip Majernik
fonte
3
Em vez de usar o estilo de aspas duplas, #import "ASLogger.h" Eu tentei isso, #import <ASLogger.h> E funcionou para mim :)
Baig
2
FYI: A resposta simples de Baigs resolveu meu problema ao não encontrar o cabeçalho.
11556 Pedroinpeace

Respostas:

205

Atualizar

Verifique se suas Podfileinclusões link_withnos destinos estão ausentes em um arquivo de configuração. Cocoapods define apenas o primeiro alvo por padrão, caso contrário. por exemplo

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

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

------ Finalizar atualização


Nota: Observe que você deve procurar em Projeto-> Informações-> Configurações as etapas abaixo.


Tive sintomas semelhantes e descobri que o pods.xcconfigarquivo não estava sendo incluído no específico targetque estava tentando criar. Algumas das outras soluções sugeridas funcionaram para mim, mas esta parecia abordar parte do problema subjacente.

Pods.xcconfig não está funcionando

A solução simples foi alterar o conjunto do arquivo de configuração para os destinos que não tinham um conjunto.

Pods.xcconfig funcionando

balança
fonte
4
Para mim, '' pods install '' define isso apenas no primeiro destino. O procedimento sugerido nesta resposta resolveu meu problema.
Troy
1
Finalmente, uma solução: os pods foram adicionados SOMENTE ao primeiro alvo, não a vários alvos de lançamento de teste (alfa, beta, candidato a lançamento)! Muito obrigado!
JOM 16/10
Usar link_withpara especificar meu outro destino funcionou para mim. Muito Obrigado. Passei várias horas nisso.
Dylan Mão
isso funcionou para mim! clonei um projeto existente e atualizei os pods. então eu estou supondo que a atualização dos pods inverteu algumas configurações, ou o previos dev estava usando o xcode 5 ou algo assim (estou no xcode 6), obrigado !!!
estufa
4
link_withnão é suportado no Cocoapods 1.0 ou superior.
Vive
90

Atualizar

Eu atualizei isso desde a minha resposta original, que obteve o voto negativo, então espero que isso ajude. E se isso acontecer, espero que receba meu voto de volta.

Se os cabeçalhos não estiverem sendo importados, você provavelmente terá um conflito no HEADER_SEARCH_PATHS. Tente adicionar $(inherited)aos caminhos de pesquisa do cabeçalho nas Configurações de compilação para garantir que ele atraia os caminhos de pesquisa incluídos no arquivo .xcconfig dos seus CocoaPods.

Isso deve ajudar com qualquer conflito e importar sua fonte corretamente.

Bill Burgess
fonte
2
Eu tinha enfrentado um problema: os arquivos de pod não estavam sendo detectados no aplicativo e 'svn obstrected folder issue', que ocorre quando você excluiu ou moveu os subdiretórios .svn: Solução: seguindo as etapas: 1. Desinstale o CocoaPods do aplicativo apenas. existe o arquivo xcodeproj (referido: stackoverflow.com/questions/16427421/… ) 2. Podfiles instalados novamente (referido: raywenderlich.com/12139/introduction-to-cocoapods ) 3. O sinalizador $ (herdado) adicionado no destino 'HEADER_SEARCH_PATHS' e 'OTHER_LDFLAGS' do aplicativo.
Alphonse R. Dsouza
1
Você também pode precisar adicionar $ (herdado) à sua configuração FRAMEWORK_SEARCH_PATHS.
George
1
@ AlphonseR.Dsouza sua solução funcionou para mim - adicionou $ (herdado) a OTHER_LDFLAGS, graças a um milhão!
Nika Kasradze
3
$ (herdado) deve ser adicionado nas configurações do projeto ou nas configurações de destino?
skypirate
Eu tive um problema semelhante, não tinha experiência anterior com pods. Também no Podfile, eu não mencionei dois alvos. Sim, eu estava tendo 2 alvos. Depois que mencionei o segundo destino e atualizei o arquivo Pod, o terminal declarou algum aviso semelhante à sua sugestão para adicionar $ herdados. Eu fiz e funcionou perfeitamente.
Jasmeet
78

1.Verifique

configurações de construção -> Caminho de pesquisa -> Caminhos de pesquisa de cabeçalho do usuário ->

  • "$ {PODS_ROOT} /" recursivo

insira a descrição da imagem aqui

insira a descrição da imagem aqui

insira a descrição da imagem aqui insira a descrição da imagem aqui

2.Verifique o estilo de importação (PONTO CHAVE), se o seu podfiletiver definido

use_frameworks!

No seu File-Bridging-Header.h, o formatador deve gostar deste

#import "MBProgressHUD.h"

mais deve estar abaixo

#import <MBProgressHUD.h>

3. Isso deve ser trabalho! Confie em mim

Albert.Qing
fonte
1
A maioria dos erros desaparece. No entanto, o que devo fazer quando uma dependência tiver uma declaração de importação como: #import <EARestrictedScrollView / EARestrictedScrollView.h>. Em seguida, o compilador diz para eu escrever #import EARestrictedScrollView.h. Mas não consigo modificar meu pod.
productioncoder
62

Arquivos de cabeçalho, você será a minha morte ...

Finalmente funcionou adicionando (incluindo aspas)

"${PODS_ROOT}/BuildHeaders"

à entrada Caminhos de pesquisa do cabeçalho do usuário e marque 'recursivo'.

averydev
fonte
6
Observe que as aspas são muito importantes aqui. Sem eles, eu não poderia fazê-lo funcionar.
DiscDev 29/09
5
+1 que eu já tinha $(inherited)(não estava funcionando), mas adicionar isso funcionou para mim.
precisa saber é o seguinte
Não recebeu o que você está tentando dizer. : / Poderia, por favor, elaborar?
rohan-patel
Outro truque útil é afastar o diretório da área de trabalho e dos pods e instalar o pod de forma renovada. Geralmente, essa é uma solução mais completa.
averydev
1
Isso finalmente ajudou o AppCode a encontrar corretamente todas as importações de arquivos de cabeçalho. Sem isso, funcionou no xCode, mas não no AppCode. Obrigado!
sarsonj
52

Descobri que ${PODS_HEADERS_SEARCH_PATHS}está faltando e não está definido no meu ramo de desenvolvimento git, então adicionei "$(SRCROOT)/Pods/Headers/" para os Caminhos de pesquisa de cabeçalho com recursividade.

Tudo bem para mim

mactive
fonte
Esta foi a resposta para mim, atualizei os cocoapods e acho que isso fez o PODS_HEADERS_SEARCH_PATHS desaparecer. Minha solução foi semelhante a essa, mas usei "$ (PODS_ROOT) / Headers"
Andrew Aitken
As outras respostas não funcionaram para mim, mas esta funcionou. Observarei que não incluí o ", então meu caminho de pesquisa de cabeçalho fica assim$(SRCROOT)/Pods/Headers
Blakedallen
@ Olá, onde eu tenho que adicionar $ (SRCROOT) / Pods / Headers /? Aprecie
VAAA
1
@VAAA Target> Configurações de compilação> Caminho de pesquisa do cabeçalho
Hlung
acho que esta é a resposta certa, o que deve ser aceito, o que você acha @Filip Majernik
Ratul Sharker
35

As duas outras respostas não ajudaram aqui. Encontrei 2 outros problemas que podem corrigi-lo:

EDIT Você pode verificar um link simbólico da seguinte maneira: crie um arquivo de texto chamado 'check' sem uma extensão. copie estas linhas para ele:

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

Em seguida, vá para o terminal, vá para a pasta onde está o seu arquivo de cheque e digite

bash check
raio cerebral
fonte
Muito obrigado! A primeira entrada resolveu isso para mim. Pods foi definido apenas para o primeiro destino em nosso projeto. Isso compilou bem, mas o outro alvo não. Então, eu adicionei a configuração dos Pods a ele também e agora o problema se foi.
precisa saber é o seguinte
Não vejo 'Pods' nas configurações. Isso significa que meu link simbólico está quebrado?
Adamski 21/10
35

Aqui está o que funcionou para mim:

Vá para a guia Target> "Build Settings" e encontre a configuração "User Header Search Paths".

Defina isso como "$ (BUILT_PRODUCTS_DIR)" e marque a caixa de seleção "Recursiva".

Agora, o destino criado pesquisará o diretório de construção compartilhado da área de trabalho para localizar os arquivos de cabeçalho vinculáveis.

====

ATUALIZAR

Eu tive um problema semelhante (embora um pouco diferente) recentemente. Acabou que o Xcode não conseguiu encontrar os Pods porque eu havia aberto o .xcodeprojarquivo e não o .xcworkspacearquivo. Pode ajudar os outros no futuro.

Snowcrash
fonte
1
Isso funcionou para mim, mas somente depois de sair do Xcode, executar pod installe reabrir.
Ken M. Haggerty
@Snowcrash what Target? o destino do pod ou o principal objetivo do projeto?
precisa saber é
19

Se nenhuma das opções acima funcionou para você e você está encontrando esse erro porque acabou de mudar para use_frameworks! no seu Podfile, continue lendo:

Eu tentei todas as soluções acima e muito mais antes de aprender que não se trata de caminhos de cabeçalho de pesquisa no meu caso específico; é que quando você muda parause_frameworks! seu Podfile, não precisa mais incluir estruturas no cabeçalho da ponte e, de fato, o Xcode lançará o erro "inútil para encontrar o cabeçalho".

O que você precisa fazer é remover todas as importações do seu arquivo de cabeçalho de ponte e, em vez disso, use o Swift import Moduleem seus arquivos individuais do Swift, conforme necessário, exatamente como faria nas estruturas do Swift.

E se você estiver usando algum dos cabeçalhos de estrutura em suas classes de Obj-C (no meu caso, temos uma classe de conveniência que usou o FBSDK), é necessário alterá-lo de uma importação local para global (isso significa alterar #import "Module.h"para #import <Module/Module.h>, que deve ser preenchido automaticamente para você quando você começar a digitar o nome do framework. No meu caso, foi <AFNetworking/AFHTTPRequestOperationManager.h>).

Edit: Eu já aprendi que fazer um @import Moduleusa o arquivo guarda-chuva que é ainda mais seguro.

Scott Fister
fonte
16

Você tentou importar o estilo Cocoapods?

#import <ASLogger.h>

As informações no site não são muito claras, enviei uma solicitação de recebimento:

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

Atualização: Eles puxaram meu pedido :)

Me amarre
fonte
Em vez de usar o estilo de aspas duplas, #import "ASLogger.h" Eu tentei isso, #import <ASLogger.h> E funcionou para mim :)
Baig
Eu tentei isso antes e funcionou para mim, mas às vezes ocorre um problema diferente quando não funciona. Você também pode usar o formato <Podname / Filename.h> em pelo menos algumas situações.
funroll
Sim, isso funcionou para mim também! Nenhuma quantidade de limpeza e exclusão dos dados derivados os resolveu, mas isso funcionou.
PostCodeism
10

O wiki dá um conselho sobre como resolver este problema:

Se o Xcode não conseguir encontrar os cabeçalhos das dependências:

Verifique se os arquivos do cabeçalho do pod estão vinculados corretamente em Pods / Headers e se você não está substituindo o HEADER_SEARCH_PATHS (consulte o item 1). Se o Xcode ainda não conseguir encontrá-los, como último recurso, você pode preceder suas importações, por exemplo, #import "Pods / SSZipArchive.h".

tilo
fonte
13
Alguém poderia elaborar exatamente como "Verificar se os arquivos do cabeçalho do pod estão corretamente vinculados com links simbólicos em Pods / Headers", por favor?
Dave Collins
por favor, veja a minha resposta acima para saber como verificar um link simbólico
brainray
Consulte também a resposta da brainray sobre configurações antes de alterar suas declarações de importação.
Rog
Sim, algumas vagens estão ligando para um diretório inválido, como $(PROJECT_DIR)/Pods/Headers/Public/xxx/ios/xxx.h, há um extra de iospasta ...
Dong Ma
9

Eu era o único desenvolvedor da equipe que estava enfrentando esse mesmo problema, que funcionava perfeitamente para todos, então eu percebi que tinha que ser o meu ambiente. Eu tentei git cloneo mesmo projeto em outro diretório e ele compilou perfeitamente, então eu percebi que tinha que ser um cache do Xcode para o caminho do meu projeto em algum lugar, que "algum lugar" é a pasta DerivedData, basta removê-lo e fazer uma compilação limpa do seu projeto, funcionou para mim.

Você pode obter o caminho e até abrir a pasta no localizador, acessando:

Xcode -> Preferências -> Locais -> ** DerivedData

bithavoc
fonte
1
No meu caso, o problema apareceu após a atualização dos pods, então pensei em cocoapods deve procurar o problema. Eu tentei todas as soluções aqui sem sorte e finalmente limpei o DerivedData - e isso ajudou! obrigado #
31416 Varrry
3

Atualizarei os itens abaixo nas minhas configurações de compilação e não obtive nenhum erro. Para verificar estas são as coisas ao atualizar seus cocoapods.

Configurações de compilação

Ativar código de bits - SIM (se você estiver usando código de bits)

Pré-processador de macro - $ (herdado)

Outro sinalizador de vinculador - objc, -lc ++, $ (herdado)

Construir apenas arquitetura

Depuração - Sim

Relese - Não

Caminho de pesquisa

Caminho de pesquisa da estrutura - $ (herdado) $ (PROJECT_DIR)

Caminho de pesquisa da biblioteca - $ (herdado)

Caminho de pesquisa do cabeçalho - $ (herdado)

Surezz
fonte
2

Se você teve os erros de construção após uma " instalação de pod " ou uma " atualização de pod ", pode ser que um de seus pods tenha sido criado com o XCode 6.3 enquanto você ainda está usando uma versão anterior.

No meu caso, eu tive que atualizar meu OSX de mavericks para Yosemite para ter o Xcode 6.3 e resolver o problema

Omaty
fonte
Oi @omaty, esta é a única solução? Eu estou atualmente em execução no Mavericks com o Xcode 6.2
goelv
1
Olá @goelv no meu caso, foi a única solução que encontrei. Eu era como você no Mavericks e no Xcode 6.2.
Omaty
Eu acho que até eu tenho o mesmo problema. Meu companheiro de equipe tem o Xcode 6.3 em Yosemite e funciona bem para ele, enquanto estou lutando para me livrar do problema de cabeçalho não encontrado no Mavericks no Xcode 6.2.
Sagar S. Kadookkunnan
1
Acompanhamento: Também atualizei a máquina para Yosemite e Xcode 6.3.1. Agora, sou capaz de construir sem problemas.
Sagar S. Kadookkunnan
1

para mim, o problema estava no valor dos sinalizadores Other Linker. Por alguma razão, eu não tinha aspas em bandeiras como -l"xml2" -l"Pods-MBProgressHUD".

berílio
fonte
Eu estava tendo problemas com o Cocoapod da Localytics. Em Other Linker Flagseu encontrei duas entradas: -|Localyticse |-PodsLocalytics. Eu os removi e depois consegui compilar.
Chris
1

Eu tive que baixar o zip do git hub e arrastar os arquivos ausentes para o Finder nos caminhos correspondentes no Pod / ...

neelamc23
fonte
1

O que funcionou para mim foi selecionar o projeto Pods, localizar e selecionar a estrutura de destino com o cabeçalho ausente no diretório de destino do projeto Pod e definir "Build Active Architecture Only" como "No" em "Architectures" nas configurações de construção do destino.

Aaron
fonte
1

Eu tenho o mesmo problema, mas as soluções acima não podem funcionar. Eu o corrigi fazendo o seguinte:

  1. Remova o projeto inteiro
  2. Execute git clone o projeto e execute a instalação do pod de exec do pacote configurável
  3. cd o peoject e execute remote add upstream your-remote-rep-add
  4. git buscar a montante
  5. mestre de verificação geral do git
  6. git mesclar upstream / master

E então funciona.

Azure Yu
fonte
1

Para mim, o que corrigiu o objetivo de implantação do iOS para o meu projeto de Pods foi menor que o meu próprio projeto. Depois que fiz o mesmo que o meu projeto, ele foi capaz de encontrar o arquivo de cabeçalho.

Josh
fonte
Mano ! você merece 1000 votos positivos. Fiquei preso por isso por 4 horas e sua solução me ajudou. muito obrigado, muito obrigado!
warzone_fz 03/06
0

Eu estava na semente GM do Xcode 5.0 e não consegui obter nenhuma dessas respostas para funcionar. Eu tentei todas as respostas no SO em várias perguntas diferentes sobre importações de cabeçalho com cocoapods.

FINALMENTE, encontrei uma solução que funcionou para mim : atualizei para o Xcode 5.0 através do Mac AppStore (instalado na parte superior da semente GM) e agora as importações de cabeçalho estão funcionando conforme o esperado.

Eu também ainda tinha uma versão beta do Xcode 5 no meu sistema e a excluí também. Talvez tenha sido uma combinação das duas coisas, mas espero que isso ajude outra pessoa.

DiscDev
fonte
0

Esta foi a resposta para mim, atualizei os cocoapods e acho que isso fez o PODS_HEADERS_SEARCH_PATHS desaparecer. Minha solução foi semelhante a essa, mas usei "$ (PODS_ROOT) / Headers" - Andrew Aitken

Muito obrigado por esta resposta. Tive dificuldade em procurar maneiras de resolver meu problema. Muito obrigado.

user1494912
fonte
0

Nenhuma das respostas me ajudou (eu tinha meus pods vinculados a todos os destinos, construí as configurações corretamente, definimos corretamente os caminhos de pesquisa "$ (herdados)", etc ...).

O problema desapareceu por si só depois que eu atualizei o cocoapods para a versão mais recente e depurada usando o comando padrão install / update:

   gem install cocoapods --pre

ou:

   sudo gem install cocoapods --pre

(se sudo foi usado durante a instalação).

Deve ter sido bug de cocoapods.

Lukasz
fonte
0

Uma solução simples é: 1. Exclua a pasta Pods e o arquivo Podfile.lock. Mas não exclua o Podfile 2. Execute o seguinte comando na pasta raiz do projeto:

pod install
farhad rubel
fonte
Corrigi o meu problema com esta solução.
Dobiho 11/11
0

Aqui está outro motivo: todos os caminhos do cabeçalho pareciam bons, mas ainda havia um erro no arquivo pré-compilado (.pch) ao tentar ler um cabeçalho do pod

(por exemplo, #import <CocoaLumberjack / CocoaLumberjack.h>).

Olhando para a saída bruta da compilação, finalmente notei que o erro estava quebrando nosso alvo de extensão do Watch OS, não o principal destino que estávamos construindo, porque também estávamos importando o arquivo de cabeçalho pré-compilado .pch nos destinos do Watch OS e estava falhando há. Verifique se as configurações de destino do Watch OS que acompanham não tentam importar o arquivo .pch (especialmente se você definir essa importação da configuração de destino principal, como eu fiz!)

Owen Hartnett
fonte
0

Descobri que incluir a biblioteca como uma instalação de pod diretamente ajuda bibliotecas dinâmicas. Por exemplo, para Firebase:

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

Ou para o ASLogger:

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

Mudar ou codificar permanentemente HEADER_SEARCH_PATHSnão me ajudou. Se o erro persistir, não é necessáriorm -rf node_modules excluir nem excluir o arquivo pod, etc., achei útil limpar o cache.

Para react-native, eu 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

Para o Xcode, removo pastas do ~/Library/Developer/Xcode/DerivedData

ehacinom
fonte
0

Penso que uma solução definitiva é acessar Build settings -> Search Path -> User Header Search Paths, encontrar o caminho da sua biblioteca e percorrê-lo em um localizador. Verifique se existe todo o caminho, incluindo o caminho de importação.

Para mim, meu caminho foi mais curto do que em um tutorial. No tutorial, era algo como #import <SDK/path/to/sdk/File.h>, mas acontece que é apenas#import <SDK/File.h>

Simon Moshenko
fonte
-1

Eu tenho outra solução trabalhada aqui,

  1. Sair do Xcode
  2. Abra o Xcode e limpe o projeto
  3. Primeiro crie o projeto Pods
  4. Projeto de Compilação
Pramod Mais
fonte
-2

Resolvi esses problemas para o Xcode 8.2.1 arrastando e soltando a estrutura que eu quero usar.

Dhruv Narayan Singh
fonte