Не удалось получить GOOGLE_APP_ID в файле Служб Google из среды сборки

Для настройки firebase я использую две конфигурации: 1.GoogleService-Info-test.plist, 2.GoogleService-Info-prdn.plist для UAT и Production. Для установки Crashlytics с использованием Firebase я следил за документацией Firebase https://firebase.google.com/docs/crashlytics/get-started?authuser=1#ios. Но когда я пытаюсь запустить, он выдает ошибку на этапе сборки при запуске скрипта.

Я пробовал без изменения имени файла конфигурации, и это сработало.

Сообщение об ошибке на этапе сборки при запуске сценария запуска структуры «Не удалось получить GOOGLE_APP_ID в файле служб Google из среды сборки».

Может ли кто-нибудь предложить лучшее решение для достижения моего требования.

почему в имени вашего файла есть -test или -prdn?

Muhammad Waqas 12.07.2019 14:42

попробуй удалить их

Muhammad Waqas 12.07.2019 14:42

добавлять по одному файлу

Muhammad Waqas 12.07.2019 14:42
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
65
3
45 145
21
Перейти к ответу Данный вопрос помечен как решенный

Ответы 21

Ответ принят как подходящий

Это один из способов, которым вы можете это сделать, разделив среды ваших проектов по целям, тем самым вы можете добавить свои разные файлы plist и просто проверить цель, к которой они принадлежат, таким образом, когда вы компилируете цель, она возьмет ее соответствующий plist-файл

Sample Image

Другой способ сделать это или посмотреть, как это сделать, называется несколькими средами с firebase, вот несколько полезных ссылок

Используйте разные GoogleService-Info.plist для разных схем сборки

https://medium.com/rocket-fuel/using-multiple-firebase-environments-in-ios-12b204cfa6c0

Это блестяще. Это должно быть частью документации FB.

barrylachapelle 02.09.2019 22:24

Не создавайте цели, используйте для этой цели «конфигурации сборки».

DanSkeel 08.11.2020 17:26

@DanSkeel, почему? Это звучит как неправильный инструмент для этой задачи

Ky. 19.11.2020 17:28

@BenLeggiero, потому что цели предназначены для совершенно разных приложений (например, приложения для часов), а не для конфигураций одного и того же приложения. Вот почему у них есть build configurations для этой цели. Главный недостаток такого подхода — в pbxproj файле для каждого исходного файла получается <numberOfTargets> повторяющихся строк, что увеличивает сложность разрешения конфликтов. Вы можете добавить пользовательский параметр сборки с именем файла конфигурации и использовать его в коде, чтобы получить правильный файл в зависимости от конфигурации сборки.

DanSkeel 19.11.2020 20:02

Отличное рассуждение! Спасибо, @DanSkeel

Ky. 20.11.2020 17:43

Другой способ — убедиться, что один plist сохраняет исходное имя GoogleService-Info.plist

Различные цели означали для меня больше работы по обновлению CI.

Это справедливо по крайней мере для Xcode 11, не тестировалось ни в каких других версиях.

Как вы можете быть уверены, что тогда он свяжет Dsym с соответствующим приложением? GOOGLE_APP_ID различаются в файлах plist, если у вас есть один идентификатор пакета для теста и один для продукта.

Romano 05.03.2020 16:33

Попробуйте понизить версию, мне помогло! Я использовал: «Ткань», «1.9.0» «Crashlytics», «3.12.0»

Все должны всегда использовать последнюю версию стабильного программного обеспечения. Программное обеспечение старой версии может содержать критические ошибки и проблемы с безопасностью.

Edgar Froes 25.01.2020 05:38

Это сработало для меня:

При установке Crashlytic с Firebase для нескольких схем может возникнуть ошибка Could not get GOOGLE_APP_ID in Google Services file from build environment. Вы можете исправить это:

  • В Build Settings добавьте пользовательское определение имени файла в User Defined:

Add file name for each scheme in User Defined

  • В Build Phases нажмите кнопку «плюс» New Run Script Phase над этапом сборки Crashlytic и введите этот код в текстовое поле. Не забудьте переименовать %YOUR_CUSTOM_PATH_TO_FOLDER% в свой путь к файлам Plist:
GOOGLE_SERVICE_INFO_PLIST_FROM = "${PROJECT_DIR}/%YOUR_CUSTOM_PATH_TO_FOLDER%/${FIREBASE_CONFIG_FILE}.plist"
BUILD_APP_DIR = "${BUILT_PRODUCTS_DIR}/${FULL_PRODUCT_NAME}"
GOOGLE_SERVICE_INFO_PLIST_TO = "${BUILD_APP_DIR}/GoogleService-Info.plist"
cp "${GOOGLE_SERVICE_INFO_PLIST_FROM}" "${GOOGLE_SERVICE_INFO_PLIST_TO}" 

Add build phase

Чтобы сделать его последовательным: GOOGLE_SERVICE_INFO_PLIST_FROM = "${PROJECT_DIR}/%YOUR_CUSTOM_‌​PATH_TO_FOLDER%/${FI‌​REBASE_CONFIG_FILE}.‌​plist" BUILD_APP_DIR = "${BUILT_PRODUCTS_DIR}/${FULL_PRODUCT_NAME}" GOOGLE_SERVICE_INFO_PLIST_TO = "${BUILD_APP_DIR}/GoogleService‌​-Info.plist" cp "${GOOGLE_SERVICE_INFO_PLIST_FROM}" "${GOOGLE_SERVICE_INFO_PLIST_TO}" Но это решение действительно работает для нескольких схем, использующих одну и ту же цель с разными идентификаторами пакетов.

Ollikas 17.03.2020 16:23

Я получаю следующую ошибку: unexpected EOF while looking for matching "' ` и ` синтаксическая ошибка: непредвиденный конец файла Команда PhaseScriptExecution не удалась с ненулевым кодом выхода `

Jerry Okafor 01.04.2020 15:20

@huync Я получаю сообщение об ошибке при запуске этого скрипта ${PODS_ROOT}/FirebaseCrashlytics/run Каким должен быть путь к входным файлам?

venky 13.06.2020 13:50

@Ollikas, если вы столкнулись с той же проблемой и решили ее. пожалуйста, дайте знать, каков путь к входным файлам? Я получаю ту же ошибку при запуске скрипта.

venky 13.06.2020 13:51

Это сработало для меня:

Убедитесь, что вы добавили этап сборки Xcode Crashlytics после Copy Bundle Resources.

Ты звезда Андреа! Спасибо, Грейс

GraSim 05.04.2021 18:42

Убедитесь, что в проводнике xcode на левой стороне отображается "GoogleService-Info.plist".

В моем случае проблема связана со ссылкой на "GoogleService-Info.plist". По ошибке я просто добавил файл в расположение проекта, из-за этого он отсутствует в проводнике xcode с левой стороны.

Просто перетащите «GoogleService-Info.plist» в xcode.

Я использовал новую бета-версию Firebase/Crashlytics и получаю сообщение об ошибке «Идентификатор приложения Google или файл служб Google не предоставлены», когда я пытаюсь вручную загрузить dSYMS

Вот команда:

/path/to/pods/directory/FirebaseCrashlytics/upload-symbols
-gsp/path/to/GoogleService-Info.plist -p ios /path/to/dSYMs

Затем я полагаю, что между «-gsp» и путем к Google.plist должен быть пробел, после чего это сработало.

что ты сделал с этой командой? Вы запускали его в терминале? как получить путь к dSYM?

Anirudha Mahale 06.05.2020 15:05

Вы можете получить dsym с подключением itunes в разделе сборки... и да, я запускаю в терминале

Ucdemir 06.05.2020 15:10

Что ж, все приведенные выше ответы предназначены для возможного решения этой проблемы, в моем случае файл GoogleService.plist отсутствовал в «Копировать ресурсы пакета», добавив в него, что сработало в моем случае.

Чтобы проверить файл, перейдите

Каталог проекта >> Этапы сборки >> Копировать ресурсы пакета

добавьте его добавьте сюда, если вы обнаружите пропажу.

В моем случае я создал Новая фраза сценария запуска выше Скомпилировать исходники, поэтому всегда вижу

Could not get GOOGLE_APP_ID in Google Services file from build environment

Когда я переместил скрипт запуска Crashlytic в конец списка, ошибка исчезла. Пожалуйста, посмотрите на следующий снимок экрана:

И статья об этом здесь

Я также выполнил те же действия, но по-прежнему получаю сообщение об ошибке: Не удалось получить GOOGLE_APP_ID в файле Служб Google из среды сборки.

ashwini technopurple 07.10.2020 05:58

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

У меня было это на моих «Фазах сборки», и это работает

"${PODS_ROOT}/FirebaseCrashlytics/run"
"${PODS_ROOT}/FirebaseCrashlytics/upload-symbols" -gsp "${PROJECT_DIR}/MyApp/GoogleService-Info.plist" -p ios "${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}"

Добавление -gsp и -p работает для меня. Я переместил GoogleService-Info.plist в другой каталог, нужно ли использовать -gsp, чтобы указать местоположение.

Honghao Zhang 28.06.2020 01:45

Это мое выбранное решение. Я использую переменную CONFIGURATION для разрешения цели следующим образом: PLIST = "${PROJECT_DIR}/${TARGET_NAME}/Environment/${CONFIGURA‌​TION}/GoogleService-‌​Info.plist"

Max Cruz 04.01.2021 11:55

Где вы добавили их на этапах сборки?

thecoolmacdude 20.01.2022 19:12

В нашем проекте только одна цель, но нам нужно использовать два файла конфигурации Firebase GoogleService-Info-Prod.plist и GoogleService-Info-Dev.plist.

У меня было это в моих «Фазах сборки», и это работает.

if [ "${CONFIGURATION}" = "Release" ]; then
${PODS_ROOT}/FirebaseCrashlytics/run -gsp ${PROJECT_DIR}/RushCard/FirebaseConfig/GoogleService-Info-Prod.plist
else
${PODS_ROOT}/FirebaseCrashlytics/run -gsp ${PROJECT_DIR}/RushCard/FirebaseConfig/GoogleService-Info-Dev.plist
fi

Я использую несколько конфигураций для нескольких приложений с белой маркировкой. Я добавил определяемую пользователем переменную FIREBASE_SUFFIX и изменил свой скрипт на следующее:

${PODS_ROOT}/FirebaseCrashlytics/run -gsp ${PROJECT_DIR}/Firebase/GoogleService-Info-${FIREBASE_SUFFIX}.plist

ПРИМЕЧАНИЕ. Я использую Carthage для firebase здесь: https://github.com/firebase/firebase-ios-sdk/blob/master/Carthage.md. Если у вас такая же настройка, вы должны вместо этого использовать что-то вроде этого (замените путь к тому месту, где вы поместили файлы сценария):

${PROJECT_DIR}/scripts/run -gsp ${PROJECT_DIR}/Firebase/GoogleService-Info-${FIREBASE_SUFFIX}.plist

В моем случае у меня было другое имя в моем файле, его имя было GoogleService-Enterprise-Info.plis, когда я изменил его на обычное имя GoogleService-Info.plist, ЭТО РАБОТАЕТ ОТЛИЧНО!!

Решением для меня было удаление вызова скрипта загрузки символов.

В одном из руководств Crashlytics упоминается, что вы должны добавить это:

${PODS_ROOT}/FirebaseCrashlytics/run
/path/to/pods/directory/FirebaseCrashlytics/upload-symbols  <- Not needed

Я неправильно это истолковал... сценарий запуска уже вызывает символы загрузки, поэтому нет необходимости добавлять второй вызов.

Я получаю сообщение об ошибке: Не удалось получить GOOGLE_APP_ID в файле Служб Google из среды сборки.

ashwini technopurple 07.10.2020 05:50

@ashwinitechnopurple убедитесь, что вы добавили plist из Firebase в свой проект и что он также добавлен в правильное целевое приложение

Harout360 09.10.2020 20:36

Я столкнулся с той же проблемой для @react-native-firebase/crashlytics.

Если вы столкнулись с этой проблемой, вы, вероятно, пропустили инструкцию по настройке ios, упомянутую в ссылке ниже. Пожалуйста, следуйте инструкциям, чтобы устранить проблему. https://rnfirebase.io/#generating-ios-credentials

Просто загрузите из настроек ваших проектов и установите правильную цель, которую вы используете.

plist file

Эта ошибка будет отображаться, если в имени вашего проекта или в пути к вашему проекту есть пробел.

Подробнее читайте в этом Ошибка GitHub

Спасибо, но мне это не помогло. В моем случае в пути к проекту нет пробелов, но все еще есть эта ошибка.

Argus 09.04.2021 14:28

В дополнение к другим ответам..

Я столкнулся с этой проблемой с точно таким же сообщением об ошибке, и в моем случае все было в порядке с файлом GoogleService-Info.plist, за исключением того, что он был сгенерирован с неправильным идентификатором пакета для приложения (он был изменен в XCode намного позже, чем произошла начальная настройка Firebase), поэтому Мне пришлось создать новое приложение в консоли Firebase с правильным идентификатором пакета (его нельзя редактировать) и загрузить новый GoogleService-Info.plist.

Если вы используете один из популярные скрипты сборки для обработки нескольких разных сред, вероятно, полезно знать, что вы должны использовать другой пункт назначения GoogleService-Info.plist в зависимости от целевой платформы:

// iOS
PLIST_DESTINATION=${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app

// watchOS
PLIST_DESTINATION=${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.appex

// macOS
PLIST_DESTINATION=${BUILT_PRODUCTS_DIR}/${CONTENTS_FOLDER_PATH}/Resources

Если эти решения, представленные выше, не работают, я решил свое решение, перейдя к этапам сборки, как показано на этом изображении. Нажмите на плюс и добавьте список Google

Xcode screenshot solution

Другие вопросы по теме