Cela fait quelques jours que je me frappe la tête contre un mur, mais malgré plusieurs 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 utilisent les pods Firebase.
J'utilise Xcode 7.3.1 et Cocoapods 1.0.1. Mise à jour: Le problème reste 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 manquant 'Firebase'
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 à la fois dans ... MyApp ... et ... MyAppTests ... L'un des deux sera utilisé. Lequel n'est pas défini
La solution pour moi était de mettre à jour les cocoapods vers la version 1.1.0.rc.2.
Sudo gem install cocoapods --pre
J'ai eu le même problème. Je l'ai résolu en déplaçant pod 'Firebase'
vers ma cible de test. Changez votre Podfile en ceci:
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
Il est important de noter que cela permet à tous ceux qui consultent votre dépôt de faire simplement un pod update
comme d'habitude sans avoir à copier des fichiers .xcconfig
ou un autre hackery 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 génère sa propre valeur pour le paramètre afin que CocoaPods ne détecte pas cette modification afin de la reporter sur la cible de test. Vous pouvez résoudre ce problème de deux manières:
Localisez 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 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 de AKM, ceci a été remplacé par ${PODS_ROOT}/Firebase/Core/Sources
dans la version 3.14.0
Le problème est enregistré dans le projet firebase ici:
https://github.com/firebase/firebase-ios-sdk/issues/58
Il y a 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 corrigé par la mise à niveau vers CocoaPods 1.4.0 ou une version ultérieure, ce qui constitue une meilleure solution.
Au moment où j'écris ce (novembre 2017) cocoapods 1.4.0 est toujours en version bêta, vous devez donc demander explicitement la version bêta pour l'installer:
gem install cocoapods --pre
Ceci, puis un pod install
ont résolu le problème de l'exécution de mes tests.
Trois étapes avant que je puisse obtenir que cela fonctionne:
CocoaPods: 1.5.0 Swift 4 Firebase: 4.13.0
Étape 1: Assurez-vous d’ajouter le bloc cible suivant dans votre podfile.
# 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 de YourAppTests Project Navigator. Recherchez la ligne du chemin de recherche d'en-tête et ajoutez-la à Debug la ligne suivante
$ (hérité) $ {PODS_ROOT}/Firebase/Core/Sources
Étape 3: En terminal:
pod update
J'avais un problème similaire. En termes de votre question, j'ai copié le contenu de mon fichier MyApp.<configuration>.xcconfig
dans mon fichier MyAppTests.<configuration>.xcconfig
. J'ai nettoyé et construit les tests, et cela a fonctionné.
Ajoutez "$ {PODS_ROOT}/Firebase/Core/Sources" à votre cible Tests uniquement sous Paramètres de construction -> Chemins de recherche d'en-tête
L'ajout de ${SRCROOT}/Pods/Firebase/CoreOnly/Sources
dans 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 être exécutés et l'erreur disparaîtra.