Ошибка сборки файлов символов загрузки Firebase: неожиданный аргумент «ServiceAccount.json»

Я пытаюсь реализовать отчеты о сбоях с помощью firebase. Я следил за здесь. И переименовал загруженный файл сына в ServiceAccount.json. Затем скопировал его в каталог проекта. Также изменен сценарий. Теперь мой скрипт запуска фазы сборки выглядит так

# Replace this with the GOOGLE_APP_ID from your GoogleService-Info.plist file
GOOGLE_APP_ID=1:.....#my app id

# Replace the /Path/To/ServiceAccount.json with the path to the key you just downloaded
"${PODS_ROOT}"/FirebaseCrash/upload-sym "ServiceAccount.json"

Но когда я пытаюсь построить проект, он выдает ошибку сборки

Unexpected argument 'ServiceAccount.json'
usage: /Users/<full path>/Pods/FirebaseCrash/upload-sym [-h] [-v] [-w|-e]
Command /bin/sh failed with exit code 2

Что не так с моими шагами?


person Johnykutty    schedule 29.08.2016    source источник
comment
где его запустить. Как я бегу и получаю ошибку. Итак, какое здесь имя папки, или я внес изменения в эту команду path/to/pods/directory/FirebaseCrashlytics/upload-symbols -gsp /path/to/GoogleService-Info.plist -p ios /path/to/dSYM   -  person Puneet Kansal    schedule 24.06.2021


Ответы (13)


Это сценарий, который я использую в своем практическом проекте.

JSON_FILE=${SRCROOT}/*****/ServiceAccount.json
GOOGLE_APP_ID=1:**********:ios:*********

defaults write com.google.SymbolUpload version -integer 1

JSON=$(cat "${JSON_FILE}")
/usr/bin/plutil -replace "app_${GOOGLE_APP_ID//:/_}" -json "${JSON}" "$HOME/Library/Preferences/com.google.SymbolUpload.plist"
"${PODS_ROOT}"/FirebaseCrash/upload-sym

Если ваш файл JSON находится в папке проекта "XYZ", вам нужен только этот "JSON_FILE=${SRCROOT}/XYZ/ServiceAccount.json", а если он находится во вложенной папке XYZ, то вот так "JSON_FILE=$ {SRCROOT}/XYZ/subFolder/ServiceAccount.json"

И установить вам GOOGLE_APP_ID и все. Извините за плохой английский. Надеюсь, поможет :)

person Abdul Rehman    schedule 29.08.2016
comment
Это работает ... но я не понял, почему в документации говорится о передаче пути к файлу json в качестве параметра - person Johnykutty; 30.08.2016
comment
Я не уверен в этом, но мое дикое предположение состоит в том, что это то, что мы делаем в этом сценарии. Взгляните на первую строку JSON_FILE=${SRCROOT}/*****/ServiceAccount.json. Он получает путь к файлу JSON и сохраняет его в переменной JSON_FILE или что-то еще. - person Abdul Rehman; 30.08.2016
comment
И после этого в третьей строке JSON=$(cat ${JSON_FILE}) используйте тот же JSON_FILE и создайте файл, о котором я думаю (дикое предположение). - person Abdul Rehman; 30.08.2016
comment
И в предпоследней строке замените GOOGLE_APP_ID и установите файл -json на JSON и установите файл Plist. Это все, что я знаю. - person Abdul Rehman; 30.08.2016
comment
Я мог понять, что такое скрипт, но не понял, почему документация вводит в заблуждение. Я не обновлял документы. - person Johnykutty; 30.08.2016
comment
Давайте продолжим обсуждение в чате. - person Johnykutty; 30.08.2016
comment
@Abdul Rehman Warraich, Johnykutty, не могли бы вы опубликовать полный сценарий, который вы создали - person nivritgupta; 29.09.2016
comment
@nivritgupta Это полный скрипт, который я использовал. - person Abdul Rehman; 29.09.2016
comment
@Abdul Rehman Warraich я делаю что-то не так..... вот мой полный скрипт JSON_FILE=${SRCROOT}/Users/nivritgupta/Desktop/GuideTurbo-e81e9b7509a9.json GOOGLE_APP_ID=1:45221286783:ios:a1847be572be1f70 по умолчанию пишет com. версия google.SymbolUpload -integer 1 JSON=$(cat ${JSON_FILE}) /usr/bin/plutil -replace app_${GOOGLE_APP_ID//:/_} -json ${JSON} $HOME/Library/Preferences/com. google.SymbolUpload.plist ${PODS_ROOT}/FirebaseCrash/upload-sym - person nivritgupta; 29.09.2016
comment
@nivritgupta Я думаю, что ваш путь к файлу JSON неверен. дайте мне знать, где вы размещаете свой файл JSON. - person Abdul Rehman; 30.09.2016
comment
@nivritgupta ${SRCROOT} дает вам корневой путь к каталогу проекта. - person Abdul Rehman; 30.09.2016
comment
@nivritgupta, так что вам нужно только найти, где находится файл JSON в папке вашего проекта. например, если ваш JSON находится в основной папке, то он выглядит так JSON_FILE=${SRCROOT}/ServiceAccount.json, если в подпапке, то вот так JSON_FILE=${SRCROOT}/TestProject/ServiceAccount.json - person Abdul Rehman; 30.09.2016
comment
@Abdul Rehman Warraich, мой файл JSON находится на главном рабочем столе JSON_FILE=/Users/nivritgupta/Desktop/Firebase/Firebase/GuideTurbo-e81e9b7509a9.json, после чего я могу запустить этот скрипт и попытаться разбить приложение, но ничего не получил серверная часть firebase .. если я следую вашим инструкциям, я получаю эту ошибку .. проверьте скриншот evernote.com /l/AUrWd5p5wxpM8autqIjBS_TohN-FGYu1Rqo - person nivritgupta; 30.09.2016
comment
Давайте продолжим обсуждение в чате. - person Abdul Rehman; 30.09.2016
comment
Я не использую pod. что мне написать вместо ${PODS_ROOT}/FirebaseCrash/upload-sym - person Swati; 19.12.2016
comment
${SRCROOT}/CrashReportingKey/ServiceAccount.json ... Исходный корень указывает путь к вашему проекту, CrashReportingKey — это папка внутри него, если вы не используете модули, используйте SRCROOT, чтобы получить путь к проекту, затем создайте папку и внутри будет json, если вы не хотите создавать папку, просто ${SRCROOT}/ServiceAccount.json будет работать, поместите свой json в базовый путь вашего проекта - person Ramiz Girach; 31.05.2017

Это работает для меня. Только что удалил " из метода, описанного в документации Firebase.

GOOGLE_APP_ID=1:**********:ios:************
"${PODS_ROOT}"/FirebaseCrash/upload-sym ${SRCROOT}/******/GoogleCrashKey.json
person Sahil Kapoor    schedule 12.11.2016
comment
Сахил, что мне написать в /*****/ для GoogleCrashKey.json? Можете ли вы привести один реальный пример для этого? - person Gautam Sareriya; 24.11.2016
comment
Путь вашего json внутри папки вашего проекта. Если ваш файл находится в YourProject/Resources/GoogleCrashKey.json, используйте ${SRCROOT}/Resources/GoogleCrashKey.json - person Sahil Kapoor; 24.11.2016
comment
По-прежнему возникает ошибка все попытки найти json-файл сервисного аккаунта не увенчались успехом в файле upload-sym. - person Gautam Sareriya; 24.11.2016
comment
Можете ли вы поделиться своим сценарием? - person Sahil Kapoor; 24.11.2016
comment
GOOGLE_APP_ID=1:1172184859534:ios:6a3d0b5e54eac5be ${PODS_ROOT}/FirebaseCrash/upload-sym ${SRCROOT}/ServiceAccount.json Также мой файл ServiceAccount.json находится в папке MyProject. - person Gautam Sareriya; 24.11.2016
comment
Можете ли вы скопировать путь к вашему файлу, используя информацию в Finder? - person Sahil Kapoor; 24.11.2016
comment
Спасибо это то что нужно. - person Aragunz; 16.01.2017

Похоже, что скрипт upload-sym был изменен, чтобы принимать один параметр, начиная с FirebaseCrash 1.0.7.

Проверьте версию модуля FirebaseCrash до pod outdated и обновите ее, если вы используете более старую версию.

person Hiron    schedule 22.09.2016
comment
Я обновил его и код с сайта firebase firebase.google.com/docs/crash/ios. сработало. - person jamil; 29.09.2016

В моем случае скрипт не смог найти «FirebaseCrash/upload-sym», потому что в статье Google рекомендуется добавить только «Firebase/Core» в подфайл.

И я добавил: 'Firebase/Crash' библиотека, после чего все заработало, надеюсь, это поможет!

person ChenHuang    schedule 25.04.2017

Решение Абдула сработало для меня, но мне пришлось заменить upload-sym на upload-sym-util.bash в сценарии, так что в итоге все закончилось выглядит так:

JSON_FILE=${SRCROOT}/Pods/FirebaseCrash/ServiceAccount.json
GOOGLE_APP_ID=1:*:ios:*

defaults write com.google.SymbolUpload version -integer 1

JSON=$(cat "${JSON_FILE}")
/usr/bin/plutil -replace "app_${GOOGLE_APP_ID//:/_}" -json "${JSON}" "$HOME/Library/Preferences/com.google.SymbolUpload.plist"
"${PODS_ROOT}"/FirebaseCrash/upload-sym-util.bash
person Paula Hasstenteufel    schedule 22.05.2017

Я только что изменил /FirebaseCrash/upload-sym на /FirebaseCrash/upload-sym-util.bash в своем скрипте, это сработало

GOOGLE_APP_ID=1:1234567830:ios:7sjghd66373hbdd2 "${PODS_ROOT}"/FirebaseCrash/upload-sym-util.bash "/Users/iosteam/Documents/MYLES-iOS-a86994a092e8.json"

person Sourabh Shekhar    schedule 11.10.2017

Обновление: последняя версия FirebaseCrash устранила это, и теперь использование отличается.

Инструкции неверны. Вам нужно вручную сгенерировать файл PLIST, но только ОДИН РАЗ. Ниже приводится мое дополнение к сценарию Абдула:

# Replace this with the GOOGLE_APP_ID from your GoogleService-Info.plist file
GOOGLE_APP_ID=1:*:iOS:*

# Insert this code BETWEEN the GOOGLE_APP_ID declaration and the
# call to FirebaseCrash/upload-sym, to generate PLIST file if needed
# Note the PLIST_FILE location is hard-coded in firebase script, do not change
PLIST_FILE="${HOME}/Library/Preferences/com.google.SymbolUpload.plist" # DO NOT CHANGE
if [ ! -f "${PLIST_FILE}" ]; then
  JSON_FILE="${PODS_ROOT}/FirebaseSymbolUploadKey.json"  # Change to location of your file
  defaults write com.google.SymbolUpload version -integer 1  # Required by script
  JSON=$(cat "${JSON_FILE}")
  /usr/bin/plutil -replace "app_${GOOGLE_APP_ID//:/_}" -json "${JSON}" "${PLIST_FILE}"
fi

# Instructions WRONG, don't pass any args, script hard-codes where it looks
# for credentials, which is handled by the JSON conversion above
"${PODS_ROOT}"/FirebaseCrash/upload-sym
person Speedy99    schedule 31.08.2016
comment
Последний FirebaseCrash исправил это, и теперь использование отличается. - person Speedy99; 17.11.2016

Последний скрипт firebase crash upload-sym может найти учетную запись службы json без указания пути, просто поместите его в ту же папку рядом с вашим файлом Xcode xcproject.

Если вы используете CocoaPods, работает что-то вроде этого простого примера скрипта:

GOOGLE_APP_ID=1:1234567890:ios:ab123cd456ef789
"${PODS_ROOT}"/FirebaseCrash/upload-sym crash-service-account.json

Если вы не хотите загружать символы при каждом запуске, используйте вместо этого следующий скрипт, чтобы немного сократить время компиляции:

if ["${CONFIGURATION}" != "Debug" ]; then
GOOGLE_APP_ID=1:1234567890:ios:ab123cd456ef789
"${PODS_ROOT}"/FirebaseCrash/upload-sym crash-service-account.json
fi
person Dhiraj Gupta    schedule 31.07.2017

Во-первых: добавьте в файл ServiceAccount ".json" --> ServiceAccount.json

и скопируйте этот файл в корневую папку вашего проекта.

Во-вторых: установите этот код в сценарии запуска в «Фазы сборки».

GOOGLE_APP_ID= copy here your "GOOGLE_APP_ID" from GoogleService-Info.plist

"${PODS_ROOT}"/FirebaseCrash/upload-sym  "${ROOT}"ServiceAccount.json
  • обратите внимание, что GoogleService-Info.plist имеет "API_KEY"

    если нет, перейдите в firebase и снова загрузите этот файл.

person Roei Nadam    schedule 12.12.2016

В моем случае я выполнил все шаги, указанные в руководстве по отчетам о сбоях firebase, но все же я получал ту же ОШИБКУ. Позже я понял это, когда внедрил Google Analytics до Firebase Analytics и Crash Report в одном и том же проекте. Итак, у меня произошел сбой. Для этого я удалил Google Analytics из Podfile и переустановил модуль с помощью команды pod install в терминале.

person Manab Kumar Mal    schedule 17.03.2017
comment
Не получаю решения для этого, так как я не понимаю, где его запустить, где его запустить. Как я бегу и получаю ошибку. Итак, какое здесь имя папки, или я внес изменения в эту команду path/to/pods/directory/FirebaseCrashlytics/upload-symbols -gsp /path/to/GoogleService-Info.plist -p ios /path/to/dSYM - person Puneet Kansal; 24.06.2021

У меня была такая же ошибка; вызвано тем, что я поместил фрагмент загрузки-символа в пост-действие «Архив» вместо «Сборка»

Но upload-sym не работает в Archive Post-Action. Для этого требуются переменные среды, которые доступны только в действиях сборки.

(p.s. Я не хотел, чтобы он загружался каждый раз, когда я строю, просто каждый раз, когда я делаю билд для AppStore.)

person Billy    schedule 13.05.2017

У меня FirebaseCrash 1.0.6. И мое решение было просто использовать

"${PODS_ROOT}"/FirebaseCrash/upload-sym

без всяких параметров.

person Yaroslav Babenko    schedule 27.09.2017

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

модуль «Fabric», «~> 1.7.2» модуль «Crashlytics», «~> 3.9.3»

Я решил проблему, заменив приведенные выше строки в файле pod следующим образом:

модуль «Firebase/Crash»

person Tanvi Jain    schedule 18.02.2019
comment
Это больше не рекомендуется. 'Firebase/Crash' был заменен на pod 'Fabric' и pod 'Crashlytics' - person Adil Soomro; 19.01.2020