Тому я замислювався над тим же питанням і використовуючи деякі ідеї з попередніх публікацій, деякі з яких публікують додатки 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