Je me suis cogné la tête contre un mur avec cela ces derniers jours, mais malgré de multiples recherches Google / SO / Github, je ne trouve pas de solution aux problèmes que je rencontre!
Tout ce que j'essaie de faire est de créer des tests unitaires pour mon application qui utilise des pods Firebase.
J'utilise Xcode 7.3.1 et Cocoapods 1.0.1. Mettre à jour: problème persiste avec Xcode 8.0
Avec ce 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
Dans ma classe XCTest, je reçois
Module requis 'Firebase' manquant
erreur à @testable import MyApp
Alternativement avec ce 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
Les tests se construisent mais ma console est jonchée d'avertissements, par exemple:
La classe <-FirebaseClassName-> est implémentée dans les deux ... MyApp ... et ... MyAppTests ... Un des deux sera utilisé. Lequel n'est pas défini
Réponses:
J'ai eu le même problème. Je l'ai résolu en passant
pod 'Firebase'
à ma cible de test. Changez votre Podfile comme suit:la source
pod install
.pod install
pour mettre à jour les dépendances du projet;)Essayez de changer l'héritage en
:complete
, comme dans:Surtout, cela permet à toute autre personne qui vérifie votre dépôt de faire
pod update
comme d'habitude sans avoir à copier des.xcconfig
fichiers ou autre piratage juste pour construire.la source
Exemple
la source
Le problème est que Firebase fait quelque chose de spécial avec les chemins de recherche d'en-tête après que CocoaPods ait généré sa propre valeur pour le paramètre afin que CocoaPods ne prenne pas en compte ce changement afin de le reporter à la cible de test. Vous pouvez résoudre ce problème de deux manières:
Recherchez
MyAppTests.<configuration>.xcconfig
dans le navigateur de fichiers et ajoutez ce qui suit àHEADER_SEARCH_PATHS
:${PODS_ROOT}/Firebase/Analytics/Sources
[*]Recherchez le paramètre pour les chemins de recherche d'en-tête dans les paramètres de construction et ajoutez la même valeur que dans l'option 1 à la liste. Vous ne devriez pas avoir besoin de le définir comme récursif.
* Selon le commentaire d'AKM, cela a changé
${PODS_ROOT}/Firebase/Core/Sources
en version 3.14.0la source
${PODS_ROOT}/Firebase/Core/Sources
inherit! :search_paths
à la cible de test dans lePodfile
.Trois étapes avant que je puisse faire fonctionner cela:
CocoaPods: 1.5.0 Swift 4 Firebase: 4.13.0
Étape 1: assurez-vous d'ajouter le bloc cible suivant dans votre fichier pod.
Étape 2: Dans l'onglet Paramètres de construction du navigateur de projet YourAppTests. Recherchez la ligne du chemin de recherche d'en-tête et ajoutez au débogage la ligne suivante
Étape 3: Dans l'exécution du terminal:
la source
Le problème est enregistré dans le projet Firebase ici:
https://github.com/firebase/firebase-ios-sdk/issues/58
Il existe une solution de contournement:
mais cela est également résolu par la mise à niveau vers CocoaPods 1.4.0 ou version ultérieure, ce qui est une meilleure solution.
Au moment où j'écris ceci (novembre 2017), cocoapods 1.4.0 est toujours en version bêta, donc pour l'installer, vous devez demander explicitement la version bêta:
Ceci et ensuite faire un a
pod install
résolu le problème en exécutant mes tests.la source
pod install
après la mise à niveau?pod install
résolu mon problème! Merci beaucoup!La solution pour moi était de mettre à jour les cocoapodes vers la version 1.1.0.rc.2.
sudo gem install cocoapods --pre
la source
J'ai essayé tout ce qui précède et j'ai rencontré diverses erreurs, commençant à l'origine par
Missing required module 'Firebase'
, puis obtenant"Class ... is implemented in both ... "
problèmes d' ou de liaison si j'essayais d'ajouter des pods Firebase à ma cible de test.La solution qui a fonctionné pour moi était de:
$(inherited) non-recursive
$(SRCROOT)/Pods/Headers/Public recursive
$(SRCROOT)/Pods/Firebase recursive
À ce stade, nettoyer le dossier de construction, reconstruire puis réexécuter les tests a fonctionné pour moi. J'espère que cela aide quelqu'un!
la source
L'ajout
${SRCROOT}/Pods/Firebase/CoreOnly/Sources
aux "chemins de recherche d'en-tête" de la cible de test unitaire a résolu le problème. Pas:Après cela, les tests peuvent s'exécuter et l'erreur disparaîtra.
la source
J'avais un problème similaire. Formulé en fonction de votre question, j'ai copié le contenu de mon
MyApp.<configuration>.xcconfig
fichier dans monMyAppTests.<configuration>.xcconfig
fichier. J'ai nettoyé et construit les tests, et cela a fonctionné.la source
Ajoutez "$ {PODS_ROOT} / Firebase / Core / Sources" à votre cible de tests uniquement sous Paramètres de construction -> Chemins de recherche d'en-tête
la source
Comme @Will a mentionné un problème concernant les chemins de recherche d'en-tête concernant les après l'installation de CocoaPods.
J'ai un projet avec plusieurs cibles où le pod 'Firebase' est intégré dans un module séparé, disons
MyProject-Shared
. Le pod Firebase sur «Podfile» est installé uniquement pour la cible «MyProject-Shared». Les autres modules qui souhaitent utiliser 'MyProject-Shared' ne peuvent pas être compilés en raison d'une erreur:'module requis "Firebase" manquant'
L'astuce dans mon cas était d'ajouter le chemin de recherche d'en-tête manquant suivant aux paramètres de construction de chaque cible faisant référence à Analytics-Framework :
"${PODS_ROOT}/Firebase/CoreOnly/Sources"
Veuillez voir la photo ci-dessous:
J'espère que cela vous fera gagner du temps.
la source
Une méthode plus simple qui fonctionne également:
la source
Missing required module Firebase
PAS de solution CocoaPodsPour ceux qui rencontrent le même problème mais n'utilisent PAS CocoaPods:
Si vous utilisez Firebase, vous avez un dossier contenant
Firebase.h
etmodule.modulemap
fichier. Par exemple -YOUR_PROJECT_DIR/Linking
Si la cible de votre projet principal fonctionne correctement, vous devez aller dans ProjectSettings -> Targets. Sélectionnez la cible de test. Recherchez
User headers
et ajoutez le chemin d'accèsYOUR_PROJECT_DIR/Linking
. Sélectionnez l'recursive
option et vous devriez être prêt à partir.Voir la capture d'écran pour plus de détails:
la source