Использовать пользовательские настройки сборки в пользовательском файле .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 в нужное место:

  1. Создайте новую папку (например: src/Resources/GoogleServiceInfoPlists).
  2. Скопируйте туда все файлы .plist для каждой среды (например: GoogleService-Info-Debug.plist, GoogleService-Info-Stage.plist и GoogleService-Info-Prod.plist).
  3. Добавить новый Run Script Phase (Xcode: Target-> Build Phases-> кнопка "+" [левый верхний angular]).
  4. Используйте сценарий ниже, чтобы скопировать (заменить) файл .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 - обычно это имя проекта.

Важно:

  1. Файл src/GoogleService-Info.plist должен быть добавлен в проект Xcode (Build Phases-> Copy Bundle Resources), тогда как файлы /src/Resources/GoogleServiceInfoPlists/GoogleService-Info-* не должны.

  2. Ваш новый Run Script должен быть помещен до фазы сборки Copy Bundle Resources. В противном случае он будет скопирован слишком поздно и будет использоваться версия файла .plist по умолчанию.

Ответ 2

  1. Создайте новую папку (например: GoogleServiceInfoPlists).

  2. Скопируйте туда все файлы .plist для каждой конфигурации

например:

GoogleService-Info-Debug.plist, 
GoogleService-Info-Alpha.plist,
GoogleService-Info-Beta.plist,
GoogleService-Info-Release.plist
  1. Наконец, добавьте новый Run Script Phase (Xcode: Target → Build Phases → кнопка "+").

  2. Используйте сценарий ниже, чтобы скопировать файл .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 с правильным именем.