Problemas de compilar, construir ou arquivar com o Xcode 4 (e dependências)

96

Esta questão evoluiu nas últimas semanas para cobrir questões mais gerais com (e projetos de atualização de formas mais antigas s).

No entanto, muitos dos problemas podem ser resolvidos seguindo o mesmo conjunto de instruções.

Se você tiver algum dos seguintes problemas, tente os métodos na resposta aceita:

  • Xcode 4 falha ao arquivar um aplicativo
  • Xcode 4 cria um arquivo inutilizável
  • Xcode 4 não cria um .ipa
  • O Xcode 4 falha ao compilar devido a erros do pré-processador
  • Xcode 4 não consegue encontrar cabeçalhos
  • O código completo do Xcode 4 não está funcionando
  • Dependências do projeto não compilam
  • Adicionar uma dependência causa qualquer um dos problemas acima

Questão Original

Título: "arquivo de problema léxico ou pré-processador não encontrado" no Xcode 4

Eu tenho um projeto no Xcode 4 que irá construir bem e rodar no dispositivo e no simulador, mas ao tentar arquivar erros ao procurar por arquivos de cabeçalhos associados a uma biblioteca estática:

In file included from /Volumes/Development/Path/LBProject/LBProject/LBProject-Prefix.pch:15:
In file included from /Volumes/Development/Path/LBProject/LBFDefines.h:23:
In file included from /Volumes/Development/Path/LBProject/Classes/LBProjectAppDelegate.h:11:
In file included from /Volumes/Development/Path/LBProject/LBProject/../FKNDirectory/FKNDirectoryManager.h:10:
/Volumes/Development/Path/LBProject/LBProject/../FKNDirectory/FKNDataModel.h:11:9: fatal error: 'Merchant.h' file not found [1]
 #import "Merchant.h"
         ^
1 error generated. 

Xcode dá o erro

lexical or preprocessor issue file not found 

Muito pesquisando no Google mostrou que muitas pessoas estão tendo esse problema, mas nenhuma solução. Qualquer um conseguiu uma correção ou mesmo uma pista.

Atualizar: Os user headercaminhos de pesquisa são definidos ${BUILT_PRODUCTS_DIR}em todas as configurações. Ele constrói bem usando qualquer configuração, exceto durante o arquivamento.

Atualização 2: Merchant.h é uma classe de dados principais gerada automaticamente e, portanto, dentro do .xcdatamodeldpacote; no entanto, os cabeçalhos são todos copiados para o diretório de cabeçalhos públicos quando a biblioteca é construída.

Richard Stelling
fonte

Respostas:

119

NB: As etapas a seguir resolverão 90% dos problemas de arquivo do Xcode, entretanto, a partir dos comentários, é sugerido que você tente sair do Xcode primeiro. Isso pode economizar horas de ajustes de configuração.

  1. Verifique se os "caminhos do cabeçalho do usuário" estão corretos (adicione "" aos caminhos para espaços, tanto no seu projeto quanto nas dependências)
  2. Defina "Sempre pesquisar caminhos de usuário" como SIM
  3. Crie uma chamada de grupo "Indexando cabeçalhos" em seu projeto e arraste os cabeçalhos para este grupo, NÃO adicione a nenhum destino quando solicitado. Isso inclui quaisquer cabeçalhos dentro do seu .xcdatamodeld , você precisará clicar com o botão direito e visualizar o conteúdo do pacote para localizá-los.
  4. Para todas as dependências, defina a configuração de compilação "Ignorar instalação" como "Sim"
  5. Movendo quaisquer cabeçalhos "Públicos" nas fases de construção para "Projeto"
  6. Defina a configuração de compilação "Diretório de instalação" em seu destino para$(LOCAL_APPS_DIR)
  7. Altere a configuração de compilação de destino "verificar todos os arquivos de origem para inclusões" para SIM. ( link )
  8. Com as versões mais recentes do Xcode (> 4.2), você pode querer ler esta questão relacionada aos espaços de trabalho.
  9. Exclua manualmente os arquivos project.xcworkspace de todos os projetos referenciados
Richard Stelling
fonte
28
A última sugestão é tudo que eu preciso para corrigir esse problema. Feche e reabra o Xcode.
Chris Miles
1
Sim, a mesma coisa para mim, só tive que reiniciar o Xcode. Aconteceu depois que renomeei e movi arquivos no projeto.
Maurizio
Eu também. Nada mais frustrante do que um bug que não deveria existir. É bom ter resolvido tão facilmente.
maxedison
3
Nota para usuários do Three20 migrando projetos antigos de xcode3 para xcode4: você (pode) ter que alterar xcode Preference / locations / advanced / -> Locais especificados pelo destino. Consulte stackoverflow.com/questions/5261447/… para mais
Ben G
1
Caramba no número 1. As aspas! O ambiente $ (SRC_ROOT) é claro, "pode" resolver com um caminho com espaços. Não foi possível descobrir por que compactar meu projeto e extrair em outro lugar resultou em uma falha de compilação!
Erik Kerber
13

Eu tive o mesmo problema no XCode 4: "Problema léxico ou pré-processador MyFile.h não encontrado". No entanto, MyFile.m não era uma biblioteca estática, apenas uma classe padrão. E MyFile.m e MyFile.h foram incluídos corretamente e indexados no projeto.

Então ... Saí do XCode e do Simulador, reiniciei-os e o problema desapareceu.

Richardsun
fonte
Eu tive uma situação semelhante, mas o erro indesejado exibido devido à referência incorreta a uma propriedade não relacionada que estava na mesma classe (basicamente esqueci de usar self.) - estranho.
JARC
11

Descobri que o problema foi embora quando alterei a configuração de compilação de destino "verificar todos os arquivos de origem para inclusões" de não para sim.

doc taco
fonte
6

Consegui resolver esse problema sem nenhuma alteração nas configurações de compilação, simplesmente copiando os arquivos .h para o diretório do Projeto no localizador. Eu NÃO os adicionei ao projeto. Apenas tê-los no diretório do sistema de arquivos do projeto parecia ser suficiente para permitir que o link implícito do Xcode funcionasse corretamente. Mais detalhes aqui .

David Avendasora
fonte
+1 Eu adicionei um link para a pergunta na qual ele aceitou a resposta, obrigado pela informação!
Richard Stelling
4

Eu tive um problema estranho como este. Alterar "Verificar todos os arquivos de recursos ..." para Sim não ajudou. Dei uma olhada no Framework Search Paths e percebi que

  • $ (herdado)
  • "$ (SRCROOT)"
  • "$ (SRCROOT) / meu / correto / caminho"

Parecia certo, mas ainda estava falhando. Em seguida, tentei reorganizar a ordem de 2 e 3 e de repente tudo ficou bem. Não tenho certeza de por que foi esse hickup, mas queria adicioná-lo à lista de coisas para tentar, caso ajude outra pessoa.

tonto
fonte
4

Minha solução foi mudar meu

#import "HeaderFile.h"

para

#import <FrameworkName/HeaderFile.h>

e tudo começou a funcionar novamente. O que era incomum era que ele havia parado de funcionar repentinamente depois de construir algumas vezes.

Slcott
fonte
Tentei de tudo o mais com meu subprojeto e essa foi a única coisa que funcionou. Obrigado.
dirkoneill de
Você ainda deve usar aspas duplas para bibliotecas estáticas. Os colchetes angulares pesquisam os caminhos do cabeçalho do sistema e não pesquisam os caminhos dos cabeçalhos do usuário, a menos que você também habilite a opção Sempre pesquisar caminhos do usuário , o que você não deve fazer se não precisar.
devios1
2

O problema se resolveu quando eu configurei

Build Settings-> Project-> Search Paths to Yes

Karolyn
fonte
2

Eu tive o mesmo - 2 metas em meu projeto ( Projeto e Teste de ProjetoGHUnit ). Quando meu esquema foi configurado para Projeto , a importação de <GHUnitIOS/GHUnit.h>era um problema de “arquivo de problema léxico ou pré-processador não encontrado” . Mas quando eu defini como um esquema ProjectTest , tudo estava OK. Então, eu adicionei GHUnitIOS.frameworkno Project também.

Boa vida
fonte
Eu tive o problema oposto. Veja minha resposta: stackoverflow.com/a/16783389/629014
slcott
1

Parece que seus caminhos de pesquisa de cabeçalho estão incorretos, não foram configurados corretamente nas configurações de compilação para o esquema ativo. Verifique-os e atualize sua pergunta com a configuração atual.

Joshua Nozzi
fonte
1

Estou tendo problemas semelhantes no simulador, mas não no dispositivo e meus campos de caminho de pesquisa de cabeçalho estão vazios (parece ser o padrão). Mas a alteração dos espaços de trabalho parece ter resolvido o problema. Talvez você possa tentar criar um novo espaço de trabalho, adicionar seu projeto a ele e ver se isso ajuda. Agora estou investigando o porquê.

Norman G
fonte
1

Eu estava recebendo o erro "arquivo não encontrado" para um arquivo .h específico em meu projeto. Resolvi o problema removendo esse arquivo .h do projeto (selecionando "Remover referências") e adicionando-o novamente.

cduhn
fonte
1

Adicionando mais variante: eu tinha duas instâncias de foo.mna Compile Sourcefase de construção, o que causou "Cabeçalho não encontrado" para foo.h.

espaço livre
fonte
1

Outra chance:

No projeto do espaço de trabalho: observe no Destino a seção Fases de construção. Como muitos manuais dizem, você precisa ter uma fase de compilação de arquivos de cópia para copiar todos os seus cabeçalhos para outro lugar, pois o iOS Framework não pode conter arquivos de cabeçalho para serem compartilhados (este é o meu caso).

Escolha para a opção Copiar arquivos como destino "Diretório de produtos". Ou outro diretório seu, onde os cabeçalhos ficarão.

Isso funcionou para mim. Provavelmente, a construção para o diretório Archive (ou Release) é muito diferente do esperado na construção para Debug.

Verifique também nas configurações do espaço de trabalho o diretório de construção.

XD

SubstanceMX
fonte
0

Para mim, esse problema ocorreu depois que adicionei novos arquivos ao projeto; um .m e .h em branco derivados de NSObject. Veja como resolvi isso:

  1. XCode fechado e reiniciado
  2. Excluiu os dois novos arquivos via XCode
  3. Recompilado com sucesso

Eu então os adicionei novamente e também funcionou.

Definitivamente um bug no xCode ...

g-dog
fonte