Firebase upload symbol files build error: Unexpected argument 'ServiceAccount.json'

Firebase upload symbol files build error: Unexpected argument 'ServiceAccount.json'

我正在尝试使用 firebase 实现崩溃报告。我跟着documentation here。并将下载的子文件重命名为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

我的步骤有什么问题吗?

这是我在练习项目中使用的脚本。

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 就是这样。 抱歉英语不好。希望对你有帮助:)

更新:最新的 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

自 FirebaseCrash 1.0.7 以来,upload-sym 脚本似乎已更改为采用一个参数。

通过 pod outdated 检查您的 FirebaseCrash pod 版本,如果您使用的是旧版本,请更新它。

这对我有用。刚刚从 Firebase 文档中描述的方法中删除了 "

GOOGLE_APP_ID=1:**********:ios:************
"${PODS_ROOT}"/FirebaseCrash/upload-sym ${SRCROOT}/******/GoogleCrashKey.json

首先:添加到文件 ServiceAccount ".json" --> ServiceAccount.json

并将该文件复制到项目的根文件夹中。

第二:在 "Build Phases"

的 运行 脚本中设置此代码
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 并再次下载此文件。

在我的例子中,我执行了与 firebase crash report tutorial 相同的所有步骤,但我仍然遇到相同的错误。后来,我意识到在同一项目上实施 Google Analytics before Firebase Analytics 和 Crash Report。所以我遇到了崩溃,为此我从 Podfile 中删除了 Google Analytics 并通过终端中的 pod install 命令重新安装了 pod。

在我的例子中,脚本找不到 'FirebaseCrash/upload-sym' 因为 Google 文章只建议我们将 'Firebase/Core' 添加到 Podfile。

然后我添加了:'Firebase/Crash' 库,然后就可以使用了,希望对您有所帮助!

我有同样的错误;由于我将 upload-sym 片段放入 "Archive" 的 Post-Action 而不是 "Build"

但是 upload-sym 在 Archive Post-Action 中不起作用。它需要仅在构建操作中可用的环境变量。

(p.s。我不希望每次构建时都上传,只是每次为 AppStore 构建时。)

Abdul 的解决方案对我有用 但是 我不得不用 upload-sym-[= 替换 upload-sym 19=] 在脚本中,所以它最终看起来像这样:

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

最新的 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

我有 FirebaseCrash 1.0.6。我的解决方案就是使用

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

没有任何参数。

我刚刚在我的脚本中将 /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"

我遇到了同样的问题。我的播客文件中有以下几行:

pod 'Fabric', '~> 1.7.2' pod 'Crashlytics', '~> 3.9.3'

我已通过以下方式替换 pod 文件中的以上行来解决问题:

连播 'Firebase/Crash'