Подтвердить что ты не робот

Используя Google Sign-in с двумя целями

У меня есть проблема, которую я не могу понять, и я искал везде.

Недавно я добавил приложение Google для входа в приложение, и он отлично работает с основной целью, однако, поскольку я использую несколько целей для развертывания вторичной версии моего приложения, второй идентификатор пакета не может быть добавлен на "GoogleService-Info.plist". Код входа Google относится к этому файлу по имени, поэтому я не могу просто изменить имя для каждой версии приложения, как это было сделано для других plists.

Я попытался добавить переменные среды в каждую схему и использовать ${BUNDLE_ID} в plist для изменения на основе выбранной схемы, но она не работает. Есть что-то, что мне не хватает? Как рабочее пространство с несколькими целями использует один и тот же plist с разными переменными для каждой цели?

Спасибо!

Изменить: пробовал использовать файл XCConfig, чтобы заменить статические значения в plist на переменные времени компиляции. Не повезло, вероятно, потому, что я считаю, что вход в Google напрямую связан с файлом. Я предполагаю, что любой, кто использует Google Sign-in с приложением, имеющим несколько целей (поддерживаемый рекламой или платной премией), должен иметь способ обойти это. Пожалуйста, помогите.

4b9b3361

Ответ 1

У меня была та же проблема, и я нашел довольно простое решение.

Просто скопируйте GoogleServices-Info.plist и поместите его в другую папку. Папка должна быть физически другой папкой, так как файловая система не будет принимать одинаковые имена файлов в той же папке. Поэтому создайте настоящую папку в finder и добавьте ее в XCode, не используйте группы XCode.

Затем измените целевое членство в соответствии с каждым файлом plist. Это оно!


Ответ 2

У меня была та же проблема. У меня есть четыре разные цели, которые должны были использовать один и тот же файл GoogleService-Info.plist, но с различными идентификаторами пакетов. Я наткнулся на эту , которая предоставила решение этой точной проблемы.

PlistBuddy - бесплатный инструмент, предоставляемый Apple и встроенный в OSX.

PlistBuddy может создавать и изменять файлы plist. Вот отличный учебник Fotis. Он заставляет его казаться куском пирога.

Прежде всего, вы проверяете, есть ли файл GoogleService-Info.plist в списке "Построить фазы" > "Копировать ресурсы Bundle" для каждой цели. Это должно быть уже на месте, но повторная проверка не повредит. Добавьте файл, если он отсутствует.

Следующее, что вам нужно сделать, это создать новую фазу сборки для каждой цели. Перейдите в свой проект > Цели > Выберите цель > Сформировать фазы Проверьте верхнюю левую область экрана Build Phases для кнопки +.

Добавьте новую настраиваемую фазу. (Возможно, у вас уже есть фаза Run Script, и в этом случае просто продолжайте добавлять команды после существующих команд)

Выберите Новый запуск Script Фаза, а в открывшемся окне введите команду PlistBuddy

/usr/libexec/PlistBuddy -c "Set :BUNDLE_ID ${PRODUCT_BUNDLE_IDENTIFIER}" $BUILT_PRODUCTS_DIR/$TARGET_NAME.app/GoogleService-Info.plist

Убедитесь, что имя файла .app(под Product) совпадает с вашим целевым именем, иначе это не сработает. Вы можете $TARGET_NAME.app сделать его таким же, как ваше имя project.app.

Вы можете изменить больше значений таким образом, просто добавьте еще одну новую строку в script. Вам нужно будет добавить еще две строки, чтобы изменить CLIENT_ID и REVERSE_CLIENT_ID.

/usr/libexec/PlistBuddy -c "Set :CLIENT_ID 123456789012-abcdefghijklmnopqrstuvwxyzabcdefghijklm.apps.googleusercontent.com" $BUILT_PRODUCTS_DIR/$TARGET_NAME.app/GoogleService-Info.plist
/usr/libexec/PlistBuddy -c "Set :REVERSED_CLIENT_ID com.googleusercontent.apps.123456789012-abcdefghijklmnopqrstuvwxyzabcdefghijklm" $BUILT_PRODUCTS_DIR/$TARGET_NAME.app/GoogleService-Info.plist

Вам может потребоваться очистить, чтобы он работал. Создавайте и запускайте на устройстве. Возможно, вам нужно будет проверить маленький ящик в разделе "Запуск Script", в котором говорится: "Запустите Script только при установке" при установке на устройство. Когда я отключил этот флажок, XCode продолжал ссылаться на мои старые данные Derived.

Используя PlistBuddy, вы можете изменить любое значение plist на основе цели. Надеюсь, это помогло.

Ответ 3

сделать отдельный файл plist для каждой цели и динамически переключаться между ними. для этого вы можете проверить ответы здесь