Używam schematu kompilacji dla produktu i jednego dla przemieszczania (z 2 różnymi identyfikatorami pakietów) i próbuję użyć oddzielnego GoogleService-Info.plist dla każdego schematu. Czy istnieje sposób, aby ręcznie wybrać plik plist do użycia podczas inicjowania GCM (i logowania goole)? A może można uniknąć używania plist i przeprowadzić konfigurację ręcznie?
Dzięki!
ios
google-cloud-messaging
google-signin
nwaxgui
źródło
źródło
Odpowiedzi:
Detale
Przetestowano na:
Rozwiązanie
Kod
źródło
configure(options:)
. github.com/firebase/quickstart-ios/issues/5-r
, więcej informacji: polecenie cp w systemie Linux / UnixOdpowiedź @inidona zadziałała dla mnie. Po przekonwertowaniu go na Swift
dla Swift 2.3:
dla Swift 3.0:
dla Swift 4.0:
źródło
GoogleService-Info.plist
pliki w różnych lokalizacjach, czy też możesz mieć dwa pliki o różnych nazwach. Czy mógłbyś podać więcej informacji na temat rzeczywistych nazw plików i ich lokalizacji?Sprawdź ten artykuł: https://medium.com/@brunolemos/how-to-setup-a-different-firebase-project-for-debug-and-release-environments-157b40512164
W Xcode utwórz dwa katalogi wewnątrz projektu:
Debug
iRelease
. UmieśćGoogleService-Info.plist
tam każdy plik.Na
AppDelegate.m
wewnątrzdidFinishLaunchingWithOptions
metody, należy umieścić kod:Cel C
Szybki 4
Przeciągnij i upuść oba foldery
Debug
iRelease
doBuild Phases > Copy Bundle Resources
:Otóż to :)
źródło
Analytics
frameworkiem, nie możesz powiedzieć, który.plist
jest ładowany.Debug
&Release
? Ponieważ kiedy próbuję to zrobić, zawsze kończy się na tym,already configured crash.
że postępowałem zgodnie z najnowszymi instrukcjami z oficjalnego dokumentu Firebase. DziękiMyślę, że możesz użyć tego sposobu, aby dynamicznie skonfigurować GoogleService-Info.plist i używać różnych nazw dla różnych identyfikatorów pakietów.
ciao Andreas
źródło
Could not locate configuration file: 'GoogleService-Info.plist'
Zauważyłem, że Google oczekuje, że nazwa pliku to GoogleServiceInfo.plist w kodzie:
kluczowe jest to
Więc po prostu skopiowałem ten sam plik i umieściłem go w różnych katalogach i powiązałem z różnymi celami:
źródło
Jeśli
GoogleService-Info.plist
ma inną nazwę, wpłynie to na wyniki analizy. Firebase ostrzeże Cię o tym. https://github.com/firebase/firebase-ios-sdk/issues/230#issuecomment-327138180 . Z tego powodu żadne z tych rozwiązań wykonawczych nie zapewni najlepszych wyników analizy.Istnieją dwa rozwiązania, które nie zadziałają z Analytics.
Użyj innego celu dla każdego schematu i powiąż każdą wersję
GoogleService-Info.plist
z własnym celem. Zobacz Członkostwo docelowe w Inspektorze plików po prawej stronie w Xcode. Aby uzyskać więcej informacji, zobacz to pytanie .Użyj skryptu fazy kompilacji, aby skopiować poprawną wersję programu
GoogleService-Info.plist
do katalogu kompilacji. Używam innego identyfikatora pakietu na potrzeby przemieszczania i produkcji. Dzięki temu mogę równolegle zainstalować obie wersje aplikacji. Oznacza to również, że za pomocą poniższego skryptu mogę nazwać moje różneGoogleService-Info.plist
pliki za pomocą identyfikatora pakietu. Na przykład:GoogleService-Info-com.example.app.plist
GoogleService-Info-com.example.app.staging.plist
Tworzenie skryptu fazy
Uwaga: będziesz musiał zmienić ustawienia,
PATH_TO_CONFIG
aby dostosować je do swoich potrzeb.źródło
Późno, ale myślę, że muszę opublikować tę odpowiedź, aby pomóc nowym programistom. Znalazłem bardzo dobry artykuł, który rozwiązuje mój problem i obiecuję, że może on również pomóc :)
Sprawdź ten artykuł, który również rozwiązuje Twój problem.
Krok 1:
Skopiuj plik GoogleService-Info.plist odpowiadający środowisku programistycznemu Firebase do katalogu Dev . Podobnie skopiuj plik GoogleService-Info.plist odpowiadający środowisku produkcyjnemu Firebase do katalogu Prod . Pamiętaj, aby odznaczyć opcję „W razie potrzeby kopiuj elementy” i wszystkie cele w sekcji „Dodaj do celów” .
Krok 2:
W nawigatorze projektu Xcode wybierz miejsce docelowe aplikacji. Przejdź do zakładki Fazy budowy u góry, a następnie dodaj fazę nowego skryptu uruchamiania . Nazwij fazę „Skonfiguruj środowisko Firebase GoogleService-Info.plist” lub nadaj jej nazwę i umieść ją przed krokiem „Kopiuj zasoby pakietu” .
Krok 3:
Zaimplementuj skrypt powłoki, który skopiuje odpowiednią GoogleService-Info.plist do pakietu aplikacji na podstawie konfiguracji kompilacji. Skopiuj i wklej następujący skrypt powłoki do właśnie utworzonej fazy uruchamiania skryptu:
źródło
Nie możesz uniknąć używania plist w Firebase. Najlepszym rozwiązaniem, jakie do tej pory znalazłem, byłoby dodanie obu plików i nadanie im nazwy
i
Następnie z kodu możesz wywołać właściwy plik. W ten sposób aplikacja nie ulegnie awarii, jeśli nie masz pliku. Wystarczy zamienić FILENAME na GoogleService-Info_prod lub GoogleService-Info_stage.
źródło
To jest moje rozwiązanie!
I to wszystko!
źródło
Ta odpowiedź jest bardzo zainspirowana odpowiedzią @abbood , ale jest nieco bardziej szczegółowa, jak to zrobić.
Dla każdego celu, np. Dev, stg, prod:
GoogleService-Info.plist
do osobnego folderu o nazwie docelowejAdd files to "your app"
GoogleService-Info.plist
, upewnij się,Copy items if needed
iCreate groups
są wybrane, sprawdź tylko odpowiedni cel z listy celów, a następnie naciśnijAdd
Otóż to. Teraz powinieneś mieć coś podobnego do tej struktury
Kiedy zbudujesz cel,
GoogleService-Info.plist
zostanie użyty właściwy .źródło
Oto jak to zrobić w Xamarin C #:
Pamiętaj o uwzględnieniu przestrzeni nazw Firebase:
źródło
Myślę, że nie da się tego osiągnąć bez użycia
GoogleService-Info.plist.
Ponieważ zanim zaczniesz integrować swoją aplikację na iOS z komponentami Google Sign-In, musisz pobrać zależności i skonfigurować swój projekt Xcode. Ten proces pokazuje, żeGoogleService-Info.plist
ma na to duży wpływ.Tak więc rozwiązania i pomysł w tym pytaniu SO mogą pomóc w rozwiązaniu problemu. Właśnie przeniosłem główną kopię pliku
GoogleService-Info plist
aplikacji do 2 oddzielnych folderów, a następnie skorzystałem z funkcji „Kopiuj pliki” w fazach kompilacji na każdym miejscu docelowym, aby zaimportować docelową listę docelową do folderu Zasoby.Sprawdź również to pytanie SO , może dać ci więcej informacji / pomysłów na twój problem.
źródło
W Xcode 9.2 potrzebowałem plików dla obu celów, które miały nazywać się „googleServiceInfo.plist”, ale były umieszczone w różnych katalogach, z katalogiem / plikiem dla każdego celu określonym w „Fazy kompilacji”, „Kopiuj zasoby pakietu”.
Powyższe nie było moim ulubionym rozwiązaniem, ale wcześniej próbowałem używać różnych nazw plików zgodnie z odpowiedzią @ inidona, przekonwertowanych na Swift 4:
Niestety nie poprawiło to komunikatów o błędach Firebase. W tym pytaniu: Firebase iOS SDK - użycie pliku konfiguracyjnego innego niż GoogleService-Info.plist generuje ostrzeżenie konsoli, że oryginalny plakat został naprawiony poprzez aktualizację Firebase Pod, ale nie potwierdziłem tego.
źródło
Rozwiązałem to w ten sposób:
źródło
Jeśli ktoś z was popadnie w błąd i Xcode narzeka
po zastosowaniu odpowiedzi @Knight Fighter możesz chcieć:
GoogleService-Info.plist
źródło
Zastanawiałem się więc nad tym samym pytaniem i wykorzystałem kilka pomysłów z wcześniejszych postów, z których niektóre publikują aplikacje
GoogleServices-Info.plist
dla wszystkich środowisk we wszystkich aplikacjach i jest to trochę niepokojące.Wymyśliłem rozszerzalne rozwiązanie, które kopiuje
GoogleSerives-Info.plist
plik w czasie kompilacji. Co więcej, to podejście może obsługiwać dowolną liczbę środowisk z możliwością dostosowywania i jest zgodne z prostą konwencją, co ułatwia zarządzanie.Przede wszystkim mam trzy środowiska
debug
(do uruchamiania w symulatorze i urządzeniu do debugowania i aktywnego cięcia kodu),staging
(do wdrożenia w celu przetestowania lotu) irelease
do produkcji.Krok pierwszy to utworzenie konfiguracji:
Wybierz „Produkt” -> „Schemat” -> „Edytuj schemat” i skopiuj / utwórz nowy zgodnie z wymaganiami. Przejdź przez każdy schemat i przypisz jego odpowiednią konfigurację z listy rozwijanej „Konfiguracja kompilacji” w każdej z kategorii:
Idę o krok dalej i odznaczam opcję „uruchom” dla schematów, które mają być dystrybuowane, tj. Wydawania i przemieszczania, i odwrotnie, odznaczam opcję „archiwizuj” w celu debugowania. Powinieneś zrobić to, co ma dla ciebie sens.
W fazach kompilacji dodaj następujący skrypt uruchamiania (
CONFIGURATIONS_FOLDER
zmienną można dostosować według potrzeb - po prostu upewnij się, że używasz tej samej nazwy folderu w następnym kroku):W wybranym folderze konfiguracji („Firebase” w powyższym przykładzie) zagnieźdź foldery dla każdej konfiguracji o dokładnie takiej samej nazwie, jak jej odpowiednia konfiguracja (z uwzględnieniem wielkości liter), w których umieść odpowiednie
GoogleServices-Info.plist
pliki w następujący sposób:Wreszcie, chciałbym również upewnić się, że poziom główny
GoogleServices-Info.plist
nie zostanie dodany do projektu przez przypadek, więc dodaję następujący plik do mojego .gitignore.źródło
Załóżmy, że mamy zestaw dwóch konfiguracji
develop
iproduction
. Musisz zrobić dwie rzeczy:Skrypt uruchamiania należy umieścić przed
FirebaseCrashlytics
skryptem.Możesz zainicjować firebase tak jak wcześniej dla pojedynczego schematu:
FirebaseApp.configure()
źródło