Использовать пользовательские настройки сборки в пользовательском файле .plist
У меня есть разные конфигурации сборки (Debug, Stage, Prod), определенные для моего приложения, и я использую пользовательские настройки сборки:
![enter image description here]()
настроить вход в Facebook и другие материалы в файле Info.plist
:
![enter image description here]()
В этом сценарии нотация $(USER_DEFINED_SETTINGS)
работает.
Когда я попытался настроить Google SignIn, что требует использования дополнительного файла .plist
(GoogleService-Info.plist
), и я использовал пользовательские настройки так же, как в Файл Info.plist
не работает.
Как я могу использовать пользовательские настройки в пользовательских файлах .plist
? Если я не могу, как я могу обойти это?
Ответы
Ответ 1
It НЕ невозможно использовать пользовательские настройки в настраиваемом.plist файле, поэтому вам придется обращаться с этим другим способом.
При создании приложения вы можете скопировать свой собственный файл .plist в нужное место:
- Создайте новую папку (например:
src/Resources/GoogleServiceInfoPlists
).
- Скопируйте туда все файлы .plist для каждой среды (например: GoogleService-Info-Debug.plist, GoogleService-Info-Stage.plist и GoogleService-Info-Prod.plist).
- Добавить новый
Run Script Phase
(Xcode: Target-> Build Phases-> кнопка "+" [левый верхний angular]).
Используйте сценарий ниже, чтобы скопировать (заменить) файл .plist для данной среды в основной каталог (в моем случае это src
):
cp "${SRCROOT}/src/Resources/GoogleServiceInfoPlists/GoogleService-Info-$CONFIGURATION.plist" "${SRCROOT}/src/GoogleService-Info.plist"
Пример результата (для рабочей среды):
src/GoogleService-Info.plist
заменяется на
src/Resources/GoogleServiceInfoPlists/GoogleService-Info-Stage.plist
во время сборки.
Используемые переменные/пути:
${SRCROOT}
- предопределено, оно указывает на местоположение вашего проекта.
$CONFIGURATION
- предопределено, это ваша конфигурация сборки. По умолчанию это: Debug
, Release
. В моем случае: Debug
, Stage
, Prod
. Вы можете изменить это в Xcode: Project (не цель!) → Информация.
src
- обычно это имя проекта.
Важно:
Файл src/GoogleService-Info.plist
должен быть добавлен в проект Xcode (Build Phases-> Copy Bundle Resources), тогда как файлы /src/Resources/GoogleServiceInfoPlists/GoogleService-Info-*
не должны.
Ваш новый Run Script должен быть помещен до фазы сборки Copy Bundle Resources. В противном случае он будет скопирован слишком поздно и будет использоваться версия файла .plist по умолчанию.
Ответ 2
Создайте новую папку (например: GoogleServiceInfoPlists
).
Скопируйте туда все файлы .plist
для каждой конфигурации
например:
GoogleService-Info-Debug.plist,
GoogleService-Info-Alpha.plist,
GoogleService-Info-Beta.plist,
GoogleService-Info-Release.plist
Наконец, добавьте новый Run Script Phase
(Xcode: Target → Build Phases → кнопка "+").
Используйте сценарий ниже, чтобы скопировать файл .plist
для данной среды в каталог сборки.
сценарий:
RESOURCE_PATH=${SRCROOT}/${PRODUCT_NAME}/GoogleServiceInfoPlists/GoogleService-Info-$CONFIGURATION.plist
BUILD_APP_DIR=${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app
echo "Copying ${RESOURCE_PATH} to ${BUILD_APP_DIR}"
cp "${RESOURCE_PATH}" "${BUILD_APP_DIR}/GoogleService-Info.plist"
PS: Вам не нужно добавлять файл в проект. Просто создайте новую папку в главном каталоге.
![enter image description here]()
Ответ 3
Я поместил в свой проект два файла с тем же именем GoogleService-Info.plist.
![введите описание изображения здесь]()
Один из них находится в корне, а один находится в папке с названием "промежуточная", чтобы избежать конфликта имен в файловой системе.
![Включить plist только по одному проекту]()
Включение одной цели в одну, а другую в другую делает так, чтобы каждая цель имела уникальный файл plist с правильным именем.