Итак, я размышлял над тем же вопросом и использовал некоторые идеи из предыдущих сообщений, некоторые из которых публикуют приложения GoogleServices-Info.plist
для всех сред во всех приложениях, и это немного беспокоит.
Я придумал расширяемое решение, которое копирует GoogleSerives-Info.plist
файл во время сборки. Более того, этот подход может поддерживать столько сред, сколько вам нужно, с возможностью настройки и соблюдением простых соглашений, что упрощает управление.
Прежде всего, у меня есть три среды: debug
(для работы в симуляторе и отладки устройства и активной резки кода), staging
(для развертывания в тестовом полете) иrelease
для производства.
Шаг первый - создать вашу конфигурацию (ы):
Выберите «Продукт» -> «Схема» -> «Изменить схему» и продублируйте / создайте новую по мере необходимости. Просмотрите каждую схему и назначьте ей соответствующую конфигурацию из раскрывающегося списка «Конфигурация сборки» в каждой из категорий:
Я делаю еще один шаг и снимаю отметку с «запускать» для схем, которые необходимо распространить, т.е. выпуск и постановка, и, наоборот, снимаю отметку с «архив» для отладки. Вы должны делать то, что имеет для вас смысл.
На этапах сборки добавьте следующий сценарий запуска ( CONFIGURATIONS_FOLDER
переменную можно настроить по желанию - просто убедитесь, что вы используете то же имя папки на следующем шаге):
# 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}'."
В выбранной вами папке конфигураций («Firebase» в приведенном выше примере) вложите папки для каждой конфигурации, названной точно так же, как ее соответствующая конфигурация (с учетом регистра), внутри которых поместите соответствующие GoogleServices-Info.plist
файлы следующим образом:
И последнее, но не менее важное: я также хотел бы убедиться, что корневой уровень GoogleServices-Info.plist
не добавлен в проект случайно, поэтому я добавляю следующее в свой .gitignore.
# Ignore project level GoogleService-Info.plist
/[Project Name]/GoogleService-Info.plist