Przez ostatnie kilka dni walę głową w ścianę, ale pomimo wielu wyszukiwań w Google / SO / Github nie mogę znaleźć rozwiązania problemów, które mam!
Wszystko, co próbuję zrobić, to utworzyć testy jednostkowe dla mojej aplikacji, która korzysta z podów Firebase.
Używam Xcode 7.3.1 i Cocoapods 1.0.1. Aktualizacja: problem pozostaje w Xcode 8.0
W tym pliku 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
W mojej klasie XCTest dostaję
Brak wymaganego modułu „Firebase”
błąd w @testable import MyApp
Alternatywnie z tym plikiem 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
Testy się budują, ale moja konsola jest zaśmiecona ostrzeżeniami, np .:
Klasa <-FirebaseClassName-> jest zaimplementowana w obu… MyApp… i… MyAppTests… Jeden z dwóch zostanie użyty. Który jest nieokreślony
Odpowiedzi:
Miałem ten sam problem. Rozwiązałem to, przechodząc
pod 'Firebase'
do celu testowego. Zmień swój plik Podfile na ten:źródło
pod install
.pod install
w celu zaktualizowania zależności projektu;)Spróbuj zmienić dziedziczenie na
:complete
, jak w:Co ważne, pozwala każdemu, kto przegląda twoje repozytorium, po prostu zrobić tak
pod update
jak zwykle, bez konieczności kopiowania.xcconfig
plików lub innych hakerów tylko w celu kompilacji.źródło
Przykład
źródło
Problem polega na tym, że Firebase robi coś specjalnego ze ścieżkami wyszukiwania nagłówka po tym, jak CocoaPods generuje własną wartość dla ustawienia, więc CocoaPods nie wychwytuje tej zmiany, aby przenieść ją do celu testowego. Możesz rozwiązać ten problem na dwa sposoby:
Zlokalizuj
MyAppTests.<configuration>.xcconfig
w nawigatorze plików i dodaj następujące elementy doHEADER_SEARCH_PATHS
:${PODS_ROOT}/Firebase/Analytics/Sources
[*]Znajdź ustawienie Ścieżki wyszukiwania nagłówków w Ustawieniach kompilacji i dodaj do listy tę samą wartość, co w opcji 1. Nie powinieneś ustawiać go jako rekurencyjnego.
* Zgodnie z komentarzem AKM, zmieniło się to
${PODS_ROOT}/Firebase/Core/Sources
w wersji 3.14.0źródło
${PODS_ROOT}/Firebase/Core/Sources
inherit! :search_paths
do celu testowego wPodfile
.Trzy kroki, zanim to zadziała:
CocoaPods: 1.5.0 Swift 4 Firebase: 4.13.0
Krok 1: Upewnij się, że dodałeś następujący blok docelowy do pliku podfile.
Krok 2: Na karcie Ustawienia kompilacji nawigatora projektu YourAppTests. Znajdź wiersz ścieżki wyszukiwania nagłówka i dodaj do debugowania następujący wiersz
Krok 3: W trybie terminala:
źródło
Problem został odnotowany w projekcie Firebase tutaj:
https://github.com/firebase/firebase-ios-sdk/issues/58
Istnieje obejście:
ale jest to również naprawiane poprzez aktualizację do CocoaPods 1.4.0 lub nowszej, która jest lepszym rozwiązaniem.
W chwili, gdy to piszę (listopad 2017), cocoapods 1.4.0 jest nadal w wersji beta, więc aby go zainstalować, musisz wyraźnie zażądać wersji beta:
To, a następnie wykonanie
pod install
moich testów, rozwiązało problem.źródło
pod install
po aktualizacji?pod install
rozwiązał mój problem! Wielkie dzięki!Rozwiązaniem dla mnie była aktualizacja cocoapods do wersji 1.1.0.rc.2.
sudo gem install cocoapods --pre
źródło
Wypróbowałem wszystkie powyższe i napotkałem różne błędy, początkowo zaczynając od
Missing required module 'Firebase'
, a następnie otrzymując"Class ... is implemented in both ... "
lub łącząc problemy, gdy próbowałem dodać Firebase Pods do mojego celu testowego.Rozwiązaniem, które zadziałało dla mnie, było:
$(inherited) non-recursive
$(SRCROOT)/Pods/Headers/Public recursive
$(SRCROOT)/Pods/Firebase recursive
W tym momencie wyczyszczenie folderu kompilacji, ponowne kompilowanie i ponowne uruchomienie testów zadziałało. Mam nadzieję, że to komuś pomoże!
źródło
Dodanie
${SRCROOT}/Pods/Firebase/CoreOnly/Sources
do „ścieżek wyszukiwania nagłówków” celu testu jednostkowego rozwiązało problem. Kroki:Po tym testy mogą zostać uruchomione, a błąd zniknie.
źródło
Miałem podobny problem. Zgodnie z twoim pytaniem skopiowałem zawartość mojego
MyApp.<configuration>.xcconfig
pliku do mojegoMyAppTests.<configuration>.xcconfig
pliku. Wyczyściłem i zbudowałem testy i zadziałało.źródło
Dodaj „$ {PODS_ROOT} / Firebase / Core / Sources” do celu testów tylko w Ustawieniach kompilacji -> Ścieżki wyszukiwania nagłówków
źródło
Jak @Will wspomniał o problemie ze ścieżkami wyszukiwania nagłówków po instalacji CocoaPods.
Mam projekt z wieloma celami, w których pod 'Firebase' jest osadzony w oddzielnym module, powiedzmy
MyProject-Shared
. Moduł Firebase w „Podfile” zainstalowany tylko dla celu „MyProject-Shared”. Inne moduły, które chcą używać „MyProject-Shared”, nie mogą zostać skompilowane z powodu błędu:„brak wymaganego modułu„ Firebase ””
Sztuczka w moim przypadku polegała na dodaniu następującej brakującej ścieżki wyszukiwania nagłówka w ustawieniach kompilacji każdego celu, które odnoszą się do platformy Analytics :
"${PODS_ROOT}/Firebase/CoreOnly/Sources"
Zobacz zdjęcie poniżej:
Mam nadzieję, że pozwoli to zaoszczędzić czas.
źródło
Prostsza metoda, która również działa:
źródło
Missing required module Firebase
NIE rozwiązanie CocoaPodsDla tych, którzy napotykają ten sam problem, ale NIE używają CocoaPods:
Jeśli używasz Firebase, masz jakiś folder zawierający
Firebase.h
imodule.modulemap
plik. Na przykład -YOUR_PROJECT_DIR/Linking
Jeśli główny cel projektu działa poprawnie, powinieneś przejść do ProjectSettings -> Targets. Wybierz cel testowy. Wyszukaj
User headers
i dodaj ścieżkę doYOUR_PROJECT_DIR/Linking
. Wybierzrecursive
opcję i powinieneś być gotowy.Zobacz zrzut ekranu, aby uzyskać więcej informacji:
źródło