Tenho batido minha cabeça contra a parede com isso nos últimos dias, mas apesar das várias pesquisas no Google / SO / Github, não consigo encontrar uma solução para os problemas que estou tendo!
Tudo o que estou tentando fazer é criar alguns testes de unidade para meu aplicativo que usa pods do Firebase.
Estou usando o Xcode 7.3.1 e o Cocoapods 1.0.1. Atualização: o problema permanece com o Xcode 8.0
Com este podfile:
platform :ios, '9.0'
use_frameworks!
inhibit_all_warnings!
target 'MyApp' do
pod 'Firebase'
pod 'Firebase/Auth'
pod 'Firebase/Database'
pod 'Firebase/Storage'
target 'MyAppTests' do
inherit! :search_paths
end
end
Na minha aula de XCTest eu recebo
Módulo obrigatório 'Firebase' ausente
erro em @testable import MyApp
Alternativamente com este podfile:
platform :ios, '9.0'
use_frameworks!
inhibit_all_warnings!
def common_pods
pod 'SwiftyTimer'
pod 'Firebase'
pod 'Firebase/Auth'
pod 'Firebase/Database'
pod 'Firebase/Storage'
end
target 'MyApp' do
common_pods
end
target 'MyAppTests' do
common_pods
end
Os testes são construídos, mas meu console está repleto de avisos, por exemplo:
A classe <-FirebaseClassName-> é implementada em ... MyApp ... e ... MyAppTests ... Um dos dois será usado. Qual é indefinido
Respostas:
Eu tive o mesmo problema. Eu resolvi passando
pod 'Firebase'
para o meu alvo de teste. Altere seu Podfile para este:fonte
pod install
.pod install
para atualizar as dependências do projeto;)Tente alterar a herança para
:complete
, como em:É importante ressaltar que permite que qualquer outra pessoa que esteja verificando seu repositório faça o de
pod update
costume, sem ter que copiar.xcconfig
arquivos ou outro hackery apenas para construir.fonte
Exemplo
fonte
O problema é que o Firebase faz algo especial com os Caminhos de pesquisa de cabeçalho depois que o CocoaPods gera seu próprio valor para a configuração, para que o CocoaPods não pegue essa alteração para transportá-la para o destino de teste. Você pode resolver isso de duas maneiras:
Localize
MyAppTests.<configuration>.xcconfig
no navegador de arquivos e adicione o seguinte aHEADER_SEARCH_PATHS
:${PODS_ROOT}/Firebase/Analytics/Sources
[*]Encontre a configuração para Caminhos de pesquisa de cabeçalho em Configurações de compilação e adicione o mesmo valor da opção 1 à lista. Você não deve precisar defini-lo como recursivo.
* De acordo com o comentário de AKM, isso mudou para
${PODS_ROOT}/Firebase/Core/Sources
na versão 3.14.0fonte
${PODS_ROOT}/Firebase/Core/Sources
inherit! :search_paths
ao destino de teste noPodfile
.Três etapas antes que eu pudesse fazer isso funcionar:
CocoaPods: 1.5.0 Swift 4 Firebase: 4.13.0
Etapa 1: certifique-se de adicionar o seguinte bloco de destino em seu podfile.
Etapa 2: Na guia Configurações de compilação do Navegador do projeto YourAppTests. Encontre a linha Header Search Path e adicione a Debug a seguinte linha
Etapa 3: na execução do terminal:
fonte
O problema é registrado no projeto firebase aqui:
https://github.com/firebase/firebase-ios-sdk/issues/58
Existe uma solução alternativa:
mas isso também é corrigido com a atualização para CocoaPods 1.4.0 ou posterior, que é uma solução melhor.
No momento em que estou escrevendo isto (novembro de 2017), o cocoapods 1.4.0 ainda está em beta, portanto, para instalá-lo, você precisa solicitar explicitamente o beta:
Isso e depois fazer um
pod install
resolveu o problema ao executar meus testes.fonte
pod install
após a atualização?pod install
resolveu meu problema! Muito obrigado!A solução para mim foi atualizar o cocoapods para a versão 1.1.0.rc.2.
sudo gem install cocoapods --pre
fonte
Tentei todos os itens acima e encontrei vários erros diferentes, originalmente começando com
Missing required module 'Firebase'
, e depois recebendo"Class ... is implemented in both ... "
ou problemas de linker se eu tentasse adicionar pods do Firebase ao meu destino de teste.A solução que funcionou para mim foi:
$(inherited) non-recursive
$(SRCROOT)/Pods/Headers/Public recursive
$(SRCROOT)/Pods/Firebase recursive
Neste ponto, limpar a pasta de construção, reconstruir e executar novamente os testes funcionou para mim. Espero que isso ajude alguém!
fonte
Adicionar
${SRCROOT}/Pods/Firebase/CoreOnly/Sources
aos "caminhos de pesquisa de cabeçalho" do destino de teste de unidade corrigiu o problema. Passos:Depois disso, os testes podem ser executados e o erro desaparecerá.
fonte
Eu tive um problema parecido. Com base na sua pergunta, copiei o conteúdo do meu
MyApp.<configuration>.xcconfig
arquivo para o meuMyAppTests.<configuration>.xcconfig
arquivo. Limpei e construí os testes e funcionou.fonte
Adicione "$ {PODS_ROOT} / Firebase / Core / Sources" ao seu destino de testes apenas em Build Settings -> Header Search Paths
fonte
Como @Will mencionou um problema em torno dos caminhos de pesquisa de cabeçalho após a instalação do CocoaPods.
Eu tenho um projeto com vários destinos onde pod 'Firebase' incorporado em um módulo separado, digamos
MyProject-Shared
. Pod Firebase em 'Podfile' instalado apenas para o destino 'MyProject-Shared'. Outros módulos que desejam usar 'MyProject-Shared' não podem ser compilados devido a um erro:'faltando módulo obrigatório "Firebase"'
O truque no meu caso era adicionar o seguinte caminho de pesquisa de cabeçalho ausente nas configurações de compilação de cada destino fazendo referência ao Analytics-Framework :
"${PODS_ROOT}/Firebase/CoreOnly/Sources"
Por favor, veja a foto abaixo:
Espero que economize seu tempo.
fonte
Um método mais simples que também funciona:
fonte
Missing required module Firebase
SEM solução CocoaPodsPara aqueles que encontram o mesmo problema, mas NÃO usam CocoaPods:
Se você estiver usando Firebase, do que você tem alguma pasta contendo
Firebase.h
emodule.modulemap
arquivo. Por exemplo -YOUR_PROJECT_DIR/Linking
Se o objetivo do projeto principal está funcionando corretamente, você deve ir para ProjectSettings -> Alvos. Selecione o alvo de teste. Pesquise
User headers
e adicione o caminho aYOUR_PROJECT_DIR/Linking
. Selecione arecursive
opção e você deve estar pronto para ir.Veja a captura de tela para mais detalhes:
fonte