Compile, construa ou arquive problemas com o Xcode 4 (e dependencies)

Essa questão evoluiu nas últimas semanas para cobrir problemas mais gerais com o xcode4 (e a atualização de projetos de xcode s antigos).

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

Se você tiver algum dos seguintes problemas, tente os methods na resposta aceita:

  • O Xcode 4 falha ao arquivar um aplicativo
  • O Xcode 4 cria um arquivo inutilizável
  • O Xcode 4 não cria um .ipa
  • O Xcode 4 falha na compilation devido a erros de pré-processador
  • O Xcode 4 não consegue encontrar headers
  • O código completo do Xcode 4 não está funcionando
  • Dependências de projetos não compilarão
  • Adicionar uma dependência causa algum dos problemas acima

Pergunta 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 executado no dispositivo e simulador, mas ao tentar arquivar erros ao procurar arquivos de headers 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 mostrou muitas pessoas estão tendo esse problema, mas nenhuma solução. Alguém tem uma correção ou até mesmo uma pista.

Atualização: os caminhos de pesquisa de user header são definidos como ${BUILT_PRODUCTS_DIR} em todas as configurações. Ele constrói bem usando qualquer configuração, exceto quando arquivar.

Atualização 2: Merchant.h é uma class Core Data que é gerada automaticamente e, portanto, dentro do pacote .xcdatamodeld , no entanto, os headers são todos copiados para o diretório de headers públicos quando a biblioteca é criada.

NB: Os passos abaixo irão resolver 90% dos seus problemas com o arquivo Xcode, no entanto, a partir dos comentários, sugerimos que você tente encerrar o Xcode primeiro. Isso pode economizar horas de ajustes.

  1. Verifique se os “caminhos de header do usuário” estão corretos (Adicione “” a caminhos para espaços, tanto em seu projeto quanto em dependencies)
  2. Defina “Sempre pesquisar caminhos do usuário” para YES
  3. Crie uma chamada em grupo “Cabeçalhos de indexação” em seu projeto e arraste os headers para esse grupo, NÃO adicione a nenhum destino quando solicitado. Isso inclui quaisquer headers dentro do seu .xcdatamodeld , você precisará clicar com o botão direito do mouse e visualizar o conteúdo do pacote para encontrá-los.
  4. Para todas as dependencies, defina a configuração de compilation “Ignorar instalação” como “Sim”
  5. Mover todos os headers “Public” em “Build Phases” para “Project”
  6. Definir a configuração de compilation “Diretório de instalação” no seu destino para $(LOCAL_APPS_DIR)
  7. Altere a configuração de construção de destino “varrer todos os arquivos de origem para includes” para YES. ( link )
  8. Com versões mais recentes do Xcode (> 4.2) você pode querer ler esta questão relacionada a espaços de trabalho.
  9. Exclua manualmente os arquivos project.xcworkspace de todos os projetos referenciados

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

Então … eu saí do XCode e do Simulador, então reiniciei e o problema desapareceu.

Descobri que o problema desapareceu quando alterei a configuração de compilation de destino “varrer todos os arquivos de origem para includes” de não para sim.

Consegui resolver esse problema sem nenhuma alteração nas configurações de compilation 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 o suficiente para permitir que o link implícito do Xcode funcionasse corretamente. Mais detalhes aqui .

Eu tive um problema estranho como esse. Alterar “Verificar todos os arquivos de resources …” para Sim não ajudou. Eu dei uma olhada no Framework Search Paths e notei que eu tinha

  • $ (herdado)
  • “$ (SRCROOT)”
  • “$ (SRCROOT) / meu / correto / caminho”

Parecia certo, mas ainda estava falhando. Então, tentei reorganizar a ordem de 2 e 3 e, de repente, ela ficou boa. Então, não tenho certeza por que isso foi o hickup, mas queria adicioná-lo à lista de coisas para tentar no caso de ajudar alguém.

Minha solução foi mudar meu

 #import "HeaderFile.h" 

para

 #import  

e tudo começou a funcionar novamente. O que era incomum era que ele parou de funcionar de repente depois de construir algumas vezes.

O problema se resolveu quando defini

Construir Configurações-> Projeto-> Buscar Caminhos para Sim

Eu tive o mesmo – 2 alvos no meu projeto ( Projeto e ProjectTest de GHUnit ). Quando meu esquema foi configurado para Project , a importação de era problema de “arquivo de problema léxico ou pré-processador não encontrado” . Mas quando eu defini como um esquema ProjectTest , tudo estava bem. Então, eu adicionei GHUnitIOS.framework no Project também.

Parece que seus caminhos de pesquisa de header estão incorretos e não estão configurados corretamente nas configurações de criação do esquema ativo. Verifique-os e atualize sua pergunta com a configuração atual.

Estou tendo problemas semelhantes no simulador, mas não o dispositivo e meus campos de caminho de pesquisa de header estão vazios (parece ser padrão). Mas alterar 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 porque.

Eu estava recebendo esse erro “arquivo não encontrado” para um arquivo .h particular no meu projeto. Eu resolvi o problema removendo o arquivo .h do projeto (selecionando “Remover referências”) e adicionando-o novamente.

Adicionando mais variante: Eu tive duas instâncias de foo.m na fase de Compile Source , que causou “Header not found” para foo.h

Outra chance:

No projeto de espaço de trabalho: observe no Target para as Fases de Construção da seção. Como muitos manuais dizem, é necessário ter uma Fase de Criação de Arquivos de Cópia para copiar todos os seus headers para outro local, já que o iOS Framework não pode conter arquivos de header a serem compartilhados (esse é o meu caso).

Escolha a opção Copiar arquivos como destino “Diretório de produtos”. Ou outro diretório do seu gosto, onde os headers residirão.

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

Além disso, verifique em seu espaço de trabalho as configurações do diretório de criação.

XD

Para mim, esse problema ocorreu depois que eu adicionei novos arquivos ao projeto; um .m em branco e .h derivado de NSObject. Aqui está como eu resolvi isso:

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

Eu então re-adicionei-os depois e também funcionou.

Definitivamente um bug no xCode …