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) i release
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):
# Get a reference to the folder which contains the configuration subfolders.
CONFIGURATIONS_FOLDER=Firebase
# Get a refernce to the filename of a 'GoogleService-Info.plist' file.
GOOGLESERVICE_INFO_PLIST=GoogleService-Info.plist
# Get a reference to the 'GoogleService-Info.plist' for the current configuration.
GOOGLESERVICE_INFO_PLIST_LOCATION=${PROJECT_DIR}/${TARGET_NAME}/${CONFIGURATIONS_FOLDER}/${CONFIGURATION}/${GOOGLESERVICE_INFO_PLIST}
# Check if 'GoogleService-Info.plist' file for current configuration exist.
if [ ! -f $GOOGLESERVICE_INFO_PLIST_LOCATION ]
then
echo "No '${GOOGLESERVICE_INFO_PLIST}' file found for the configuration '${CONFIGURATION}' in the configuration directory '${PROJECT_DIR}/${TARGET_NAME}/${CONFIGURATIONS_FOLDER}/${CONFIGURATION}'."
exit 1
fi
# Get a reference to the destination location for the GoogleService-Info.plist.
GOOGLESERVICE_INFO_PLIST_DESTINATION=${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app
# Copy 'GoogleService-Info.plist' for current configution to destination.
cp "${GOOGLESERVICE_INFO_PLIST_LOCATION}" "${GOOGLESERVICE_INFO_PLIST_DESTINATION}"
echo "Successfully coppied the '${GOOGLESERVICE_INFO_PLIST}' file for the '${CONFIGURATION}' configuration from '${GOOGLESERVICE_INFO_PLIST_LOCATION}' to '${GOOGLESERVICE_INFO_PLIST_DESTINATION}'."
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.
# Ignore project level GoogleService-Info.plist
/[Project Name]/GoogleService-Info.plist