Je me suis cogné la tête contre un mur avec cela ces derniers jours, mais malgré plusieurs recherches Google / SO / Github, je ne trouve pas de solution aux problèmes que j'ai!
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. Mise à jour: le 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
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:
platform :ios, '9.0'
use_frameworks!
inhibit_all_warnings!
target 'MyApp' do
pod 'Firebase/Auth'
pod 'Firebase/Database'
pod 'Firebase/Storage'
target 'MyAppTests' do
inherit! :search_paths
pod 'Firebase'
end
end
Essayez de changer l'héritage en :complete, comme dans:
target 'MyAppTests' do
inherit! :complete
end
Surtout, cela permet à toute autre personne qui vérifie votre dépôt de faire pod updatecomme d'habitude sans avoir à copier des .xcconfigfichiers ou autre piratage juste pour construire.
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 a 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>.xcconfigdans 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/Sourcesdans la version 3.14.0
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.
# Uncomment the next line to define a global platform for your project
platform :ios, '11.3'
target 'TIMII' do
# Comment the next line if you're not using Swift and don't want to use dynamic frameworks
use_frameworks!
# Pods for TIMII
pod 'Firebase/Core'
pod 'Firebase/Database'
pod 'Firebase/Auth'
pod 'Firebase/Storage'
target 'TIMIITests' do
inherit! :search_paths
pod 'Firebase/Core'
end
end
É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
$ (hérité) $ {PODS_ROOT} / Firebase / Core / Sources
Étape 3: Dans l'exécution du terminal:
mise à jour du pod
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:
Ajoutez "$ {PODS_ROOT} / Firebase / Core / Sources" à votre cible de tests uniquement sous Paramètres de construction -> Chemins de recherche d'en-tête
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:
gem install cocoapods --pre
Ceci, puis faire un a pod installrésolu le problème lors de l'exécution de mes tests.
L'ajout ${SRCROOT}/Pods/Firebase/CoreOnly/Sourcesdans les "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 solution pour moi était de mettre à jour les cocoapodes vers la version 1.1.0.rc.2.
sudo gem install cocoapods --pre
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 des "Class ... is implemented in both ... "problèmes d' obtention 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!
J'avais un problème similaire. Formulé en fonction de votre question, j'ai copié le contenu de mon MyApp.<configuration>.xcconfigfichier dans mon MyAppTests.<configuration>.xcconfigfichier. J'ai nettoyé et construit les tests, et cela a fonctionné.
Ajoutez "$ {PODS_ROOT} / Firebase / Core / Sources" à votre cible de tests uniquement sous Paramètres de construction -> Chemins de recherche d'en-tête
Comme @Will l'a mentionné, un problème concernant les chemins de recherche d'en-tête 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.
Une méthode plus simple qui fonctionne également:
target 'MyApp' do
pod 'Firebase/Auth'
pod 'Firebase/Database'
pod 'Firebase/Storage'
target :MyAppTests
end
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.het module.modulemapfichier. 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 headerset ajoutez le chemin d'accès YOUR_PROJECT_DIR/Linking. Sélectionnez l' recursiveoption et vous devriez être prêt à partir.
Voir la capture d'écran pour plus de détails:

Jana Duggar a été ouverte sur sa recherche de l'amour. Voici tout ce qu'elle a dit sur le sujet et sa fenêtre de mariage de cinq ans.
La star d'Outlander, Sam Heughan, a récemment révélé ce qu'il retirera du tournage pour se souvenir de Jamie Fraser, le rôle qui a fait de lui une star.
"She Loves You" a été écrite en une heure, enregistrée en une journée, et a été la chanson des Beatles avec l'une de leurs meilleures performances de leur carrière.
Dolly Parton et sa grand-mère Bessie avaient une relation spéciale. Grand-mère Parton était très malade, mais cela n'a pas empêché Dolly de lui faire des farces.
Vous pensez peut-être que le chêne ou le noyer sont résistants, mais en matière de bois les plus durs au monde, ils sont loin derrière.
L'océan regorge de beauté, mais il abrite aussi certaines des créatures marines les plus terrifiantes de la planète. Nombre de ces animaux vivent dans les profondeurs obscures et sous haute pression des abysses.
Que vous affrontiez des créatures hostiles ou vous prépariez pour des affrontements PvP, connaître les meilleurs enchantements d'épée dans Minecraft peut vous donner un avantage considérable. Enchanter vos épées vous permet d'infliger plus de dégâts, d'augmenter le butin des créatures et d'accroître leur durabilité.
Quand on parle de pays socialistes, on imagine souvent un contrôle total de l'État et l'absence de propriété privée. Mais en réalité, les économies socialistes sont très diverses.
« Enfants » laisse tomber un caméo de grand nom et des nouvelles dévastatrices
Ce RAV4 est déclaré en excellent état et est prêt pour un jeu de chaises musicales.
Des images de drones ont montré des pompiers semblant lutter pour éteindre l'incendie.
Eyes of Wakanda est directement lié au MCU, ainsi que des mises à jour sur X-Men '97, What If..., Daredevil, et plus encore.
Ava Gardner a été mariée à Mickey Rooney et Frank Sintra, et a fréquenté plusieurs autres stars d'Hollywood. Voici un aperçu de l'histoire amoureuse d'Ava Gardner.
John Cleese a épousé sa femme, Jennifer Wade, en 2012. Voici tout ce qu'il faut savoir sur la femme de John Cleese, Jennifer Wade.
Craig Melvin a épousé la présentatrice sportive Lindsay Czarniak en 2011. Voici tout ce qu'il faut savoir sur la femme de Craig Melvin.
Maggie Gyllenhaal et Peter Sarsgaard se sont mariés en 2009 et partagent deux filles ensemble. Voici une chronologie complète de leur relation.
Ça me frappe tout à coup, comme c'est si souvent le cas C'est à nouveau le milieu du chemin <Non, pas celui du Pacifique, toi marron, celui du carnaval> Chaque gros titre fort… ..
En 2022, avec la sortie de GPT-3, la compétence en écriture semble devenir moins importante. Avec l'IA, les personnes ayant une mauvaise écriture peuvent également générer du personnel de qualité.
Dans le monde rapide et compétitif d'aujourd'hui, la carrière d'une personne joue un rôle important dans la croissance personnelle, la stabilité financière et la satisfaction globale de la vie. Cependant, de nombreuses personnes se retrouvent prises dans un cycle incessant de stagnation et d'insatisfaction, dépérissant progressivement dans leur vie professionnelle.
La semaine dernière, j'ai remarqué un communiqué de presse, envoyé via PressGazette (un site Web d'information britannique). L'article annonçait qu'Acast, la société d'hébergement et de publicité de podcasts de Scandi, dirigerait un consortium d'éditeurs "probablement les plus influents" du podcasting.