Obtendo “arquivo não encontrado” no Bridging Header ao importar estruturas do Objective-C para o projeto Swift

Eu tenho um projeto Swift para o qual estou tentando importar estruturas baseadas em ObjC. A estrutura está localizada em um diretório sob o caminho do projeto e é referenciada pelo projeto no Xcode. Ele também é adicionado ao “Link Binary with Libraries” na página “Build Phases” do projeto.

No entanto, por algum motivo, não consigo include o framework no arquivo Bridging-Header. Estou tendo o erro a seguir:

BridgingHeader.h:5:9: error: 'Parse/Parse.h' file not found #import  ^ :0: error: failed to import bridging header 'BridgingHeader.h' 

Coisas que eu verifiquei:

  1. O “header de compatibilidade Install Objective-C” é definido como “YES”.
  2. Os caminhos de pesquisa de header incluem o caminho para as estruturas.

Tenho certeza de que estou perdendo alguma coisa, então, se alguém tiver alguma pista, isso seria ótimo.

Encontrou uma solução:

  • A configuração “Objective-C Bridging Header” (também conhecida como SWIFT_OBJC_BRIDGING_HEADER ) deve ser definida no nível de destino e NÃO no nível do projeto. Certifique-se de excluir o valor de configuração no nível do projeto.

(para mim, parece um bug do Xcode, já que não sei por que ele conserta).

Eu tenho o mesmo problema. Eu mudei todas as minhas importações de #import "HMSegmentedControl.h" para #import por exemplo.

Eu tive que adicionar meu diretório lib nos caminhos de pesquisa de header de usuário:

configurações de destino de teste - caminho de pesquisa do cabeçalho do usuário

No meu caso, o diretório lib contém o arquivo .a library e alguns arquivos de header. Estes estão incluídos no arquivo de header de bridging. No entanto, o compilador rápido não os encontraria. Somente quando adicionei ${PROJECT_DIR}/lib ao caminho de pesquisa de header de usuário, ele criou o destino de teste.

(Estou usando o Xcode 6.2 no Mavericks 10.9.5)

Encontramos a mesma mensagem de erro, com uma causa completamente diferente.

Configuração:

  • Alvo do aplicativo, todo o código Obj-C
  • Alvo de teste de unidade com um único caso de teste rápido e um header de ponte referente ao código do aplicativo

Quando adicionamos o segundo caso de teste rápido, após uma limpeza (ou na máquina de um colega de equipe), vimos esse erro ao criar o destino do teste de unidade.

Foi corrigido adicionando uma class Obj-C falsa ao alvo de teste de unidade.

Isso de alguma forma fez o truque para mim:

  • Projeto limpo
  • Pasta de compilation limpa
  • Reinicie o Xcode

Bem, é um pouco estranho, mas eu acho que você tem que adicionar um recurso à sua fase “Copiar resources do pacote” do seu alvo de teste para fazer com que ele carregue todos os headers do seu destino de aplicativo principal. No meu caso, adicionei main.storyboard e cuidei do erro.

insira a descrição da imagem aqui

Se ajuda alguém.

No meu caso, meus arquivos obj-c foram adicionados tem uma pasta de referência (as pastas azuis no xcode) e o header não pôde encontrá-los. Acabei de adicionar os arquivos, não a pasta, do localizador ao xcode e resolvido.

Este erro apareceu ao instalar com o Cocoapods a biblioteca CocoaImageHashing. O problema era que os caminhos de pesquisa estavam errados. Então, no nível Target, em Build Settings -> Search Paths -> Header Search Paths, os caminhos eram correspondentes a pastas não existentes, por exemplo “$ {PODS_ROOT} / Headers / Public / CocoaImageHashing”, quando a estrutura de pastas Headers / Public / não existe. Eu adicionei o caminho $ {PODS_ROOT} / CocoaImageHashing e o erro desapareceu.

Eu tive um problema e corrigi-lo depois de passar 2 horas para encontrar. Meu ambiente como abaixo:

cocoapod 0.39.0

swift 2.x

XCode 7.3.1

Passos:

  1. caminho do projeto: project_name / project_name / your_bridging_header.h
  2. Na seção Swift em Build Setting, o Objective-C Bridging Header deve ser: project_name / your_bridging_header.h
  3. Em your_bridging_header.h , altere todas as declarações de .h para #import
  4. Na aula que está sendo usada your_3rd_party . Declarar importação your_3rd_party

Eu tive o mesmo problema. Para mim, o motivo foi que eu estava usando o mesmo header de ponte para o meu App e meu Today Extension. Minha extensão de hoje não inclui Parse, mas porque foi definido no header de ponte que estava tentando procurá-lo. Eu criei um novo header de ponte para minha extensão de hoje e o erro desapareceu.

Meu framework estava trabalhando antes e de repente parou de funcionar, e nenhuma dessas respostas estava funcionando para mim. Eu removi o framework em Build Phases> Link Binary With Libraries, e o re-adicionei. Começou a trabalhar novamente.

Acabei de duplicar um esquema existente e adicionei outra configuração ao projeto. Eu tive que adicionar uma configuração com o mesmo nome ao projeto da estrutura para que ela também pudesse ser construída na mesma DerivedData/($AppName)/Build/Products/($CONFIGURATION_NAME) . Caso contrário, o arquivo .framework não será criado e, portanto, não poderá ser importado.

Eu me deparei com o mesmo problema hoje ao tentar usar um pod escrito em Objective-C no meu projeto Swift, nenhuma das soluções acima parecia funcionar.

No podfile eu use_frameworks! escrito. Comentando esta linha e, em seguida, executando a pod install novamente resolvido este problema para mim e o erro foi embora.

(Atualizado em 27 de maio de 2017)

Xcode 8. Projeto Swift – importando o Objetivo C.

Coisas para saber:

  1. Arquivo de header de ponte deve ser salvo dentro da pasta do projeto. (isto é, não é salvo no mesmo nível que .xcodeproj é salvo, mas em vez disso, um nível abaixo nas pastas onde todos os seus arquivos c objectives e rápidos são salvos). Ele ainda pode encontrar o arquivo no nível superior, mas não vinculará corretamente e poderá importar arquivos do Objective C para o arquivo de header de bridging
  2. Arquivo de header de ponte pode ser nomeado qualquer coisa, contanto que seja um arquivo de header.
  3. Certifique-se de que o caminho em Configurações de compilation> Compilador Swift – Geral> Objetivo C Ponte Cabeçalho esteja apontando corretamente para o arquivo de header de ponte que você criou
  4. IMPORTANTE: se você ainda estiver recebendo “não encontrado”, tente primeiro esvaziar seu arquivo de header de ponte e apague todas as importações que você tenha gravado lá. Certifique-se de que o arquivo de header de ponte possa ser encontrado primeiro e, em seguida, comece a include as importações objetivas de c nesse arquivo. Por algum motivo, ele irá retroceder o mesmo erro “não encontrado”, mesmo se for encontrado, mas não gostar da importação que você está tentando, por algum motivo
  5. Você não deve #importar “MyBridgingHeaderFile.h” em nenhum dos seus arquivos C objectives. Isso também causará um erro “arquivo não encontrado”

Se estiver usando cocoapods, tente reinstalar os pods executando o seguinte comando.

 pod install 

Eu tive problema semelhante e apenas uma solução funcionou para mim. Eu tentei tudo sugerido, e eu sabia que eu definir o meu header de ponte bem, porque eu tinha algum outro lib trabalhando.

Quando eu copiei a biblioteca (arrastar e soltar) para o projeto, sem Cocoapods, só depois disso eu poderia importar headers sem erros.

Eu usei a biblioteca do facebook / Shimmer.

Eu tive um problema semelhante com os pods. Basicamente, tentando executar meus testes de interface do usuário, o Xcode reclamava da falta de pods. Solução para isso foi muito mais simples do que qualquer descrito acima:

  1. ir para o arquivo de projeto (principal não é um alvo)
  2. clique na aba “Info” (mais à esquerda)
  3. defina a configuração adequada do pod para o destino dos testes de interface do usuário (seção “Configurações”, logo abaixo de “Destino de implantação”)

Trabalhando!

Eu encontrei em um segmento: https://github.com/CocoaPods/CocoaPods/issues/2695

Soa um pouco como um bug para pods de cacau, mas eu posso ver as razões por que pode ser um caso complicado.

No meu caso eu só tive que sair do simulador …