无法从构建环境获取Google Services文件中的GOOGLE_APP_ID

Muk*_*ami 4 ios firebase crashlytics swift

为了设置firebase,我使用两个配置:1.GoogleService-Info-test.plist,2.GoogleService-Info-prdn.plist(用于UAT和Production)。为了使用firebase安装crashlytics,我遵循了firebase文档https://firebase.google.com/docs/crashlytics/get-started?authuser=1#ios。但是,当我尝试运行时,在运行脚本时会在构建阶段引发错误。

我尝试不更改配置文件名就可以了。

运行Fabric运行脚本“无法从构建环境获取Google Services文件中的GOOGLE_APP_ID”时,在构建阶段出现错误消息。

任何人都可以提出更好的解决方案来满足我的要求。

小智 35

这是您可以做到的一种方法,通过将您的项目环境按目标分开,通过这样做,您可以添加不同的 plist 文件并只检查它们所属的目标,这样当您编译目标时,它将采用它对应的plist文件

示例图像

另一种方法,或者查找如何去做,它被称为具有 firebase 的多环境,这里有一些有用的链接

对不同的构建方案使用不同的 GoogleService-Info.plist

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

  • 这太棒了。这应该是 FB 文档的一部分。 (7认同)
  • @BenLeggiero 因为目标是为完全不同的应用程序(例如手表应用程序)设计的,而不是为同一应用程序的配置设计的。这就是为什么他们有为此目的的“构建配置”。这种方法的主要缺点 - 在每个源文件的“pbxproj”文件中,您会得到 <numberOfTargets> 重复行,这增加了解决冲突的复杂性。您可以使用配置文件的名称添加用户定义的构建设置,并在代码中使用它来根据构建配置获取正确的文件。 (5认同)
  • 不要创建目标,为此目的使用“构建配置”。 (2认同)

sam*_*ize 29

如果您使用 Xcode 15(截至 2023 年的测试版),您可能已使用ENABLE_USER_SCRIPT_SANDBOXING.

默认值为 YES,这将导致存档期间出现 Crashlytics 问题。

转到“构建设置”>“用户脚本沙盒”>“设置为否”。

  • 谢谢你!由于“用户脚本沙箱”的推荐设置为“是”,是否有不同的解决方案? (2认同)

Cmo*_*ien 28

我在“构建阶段”中有这个并且它有效

"${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}"
Run Code Online (Sandbox Code Playgroud)

  • 对于 Flutter 用户,我可以通过转到 XCode ->“Project Navigator”选项卡 -> Runner -> 突出显示目标“Runner” ->“Build Phases”选项卡 -> 找到“[firebase_crashlytics] Crashlytics Upload”来完成这项工作Symbols”步骤,并将其更改为 `"$PODS_ROOT/FirebaseCrashlytics/upload-symbols" --flutter-project "$PROJECT_DIR/firebase_app_id_file.json" -gsp "$PROJECT_DIR/GoogleService-Info.plist" -p ios "$DWARF_DSYM_FOLDER_PATH /$DWARF_DSYM_FILE_NAME"` (以前是 `"$PODS_ROOT/FirebaseCrashlytics/upload-symbols" --flutter-project "$PROJECT_DIR/firebase_app_id_file.json"`)。 (3认同)

biz*_*z84 24

这对我有用:

确保Copy Bundle Resources之后添加 Xcode Crashlytics 构建阶段。


小智 13

我们的项目只有一个目标,但我们需要使用两个 Firebase 配置文件GoogleService-Info-Prod.plistGoogleService-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
Run Code Online (Sandbox Code Playgroud)

  • SPM 建议中存在轻微拼写错误。应该是 `if [ "${CONFIGURATION}" = "Release" ]; 然后 ${BUILD_DIR%/Build/*}/SourcePackages/checkouts/firebase-ios-sdk/Crashlytics/run -gsp ${PROJECT_DIR}/HERE_SET_YOUR_PROJECT_NAME/SupportingFiles/GoogleService-Info/GoogleService-Info-Prod.plist else ${BUILD_DIR %/Build/*}/SourcePackages/checkouts/firebase-ios-sdk/Crashlytics/run -gsp ${PROJECT_DIR}/HERE_SET_YOUR_PROJECT_NAME/SupportingFiles/GoogleService-Info/GoogleService-Info-Test.plist; 菲` (3认同)

小智 7

另一种方法是确保一个 plist 保留原始名称 GoogleService-Info.plist

不同的目标意味着需要做更多的工作来更新 CI。

这至少对 Xcode 11 有效,未在任何其他版本上测试

  • 那么你如何确定它将 Dsym 绑定到相关的应用程序呢?如果您有一个用于测试的捆绑包 ID 和一个用于生产的捆绑包 ID,则 plist 文件中的 GOOGLE_APP_ID 会有所不同。 (2认同)

Tar*_*ras 7

In my case I created New Run Script Phrase above Compile Sources, that's why I always see

Could not get GOOGLE_APP_ID in Google Services file from build environment

When I moved Crashlytic's run script at the end of list bug was disappear. Please look the following screen shot: 在此处输入图片说明

And article about it is here


Bey*_*yaz 6

当我尝试手动上传 dSYMS 时,我正在使用新的 Firebase/Crashlytics 测试版并收到错误“未提供 Google App ID 或 Google 服务文件”

这是命令:

/path/to/pods/directory/FirebaseCrashlytics/upload-symbols
-gsp/path/to/GoogleService-Info.plist -p ios /path/to/dSYMs
Run Code Online (Sandbox Code Playgroud)

然后我认为“-gsp”和Google.plist的路径之间应该有空格,然后它起作用了。


Har*_*360 6

对我来说,解决方案是删除对 upload-symbols 脚本的调用。

Crashlytics 指南之一提到您应该添加以下内容:

${PODS_ROOT}/FirebaseCrashlytics/run
/path/to/pods/directory/FirebaseCrashlytics/upload-symbols  <- Not needed
Run Code Online (Sandbox Code Playgroud)

我误解了这一点...运行脚本已经调用了上传符号,因此无需添加第二次调用。


huy*_*ync 5

这为我工作:

使用Firebase安装Crashlytic时,对于多种方案,您可能会遇到error Could not get GOOGLE_APP_ID in Google Services file from build environment。您可以通过以下方法修复它:

  • 在中Build Settings,在中添加用户定义的文件名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%/${GOOGLE_SERVICE_INFO_PLIST_NAME}"
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}" 
Run Code Online (Sandbox Code Playgroud)

添加构建阶段

  • 要使其一致: `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-信息。 plist" cp "${GOOGLE_SERVICE_INFO_PLIST_FROM}" "${GOOGLE_SERVICE_INFO_PLIST_TO}"` 但此解决方案确实适用于使用不同捆绑 ID 共享同一目标的多个方案。 (4认同)

Viv*_*sal 5

确保在 Xcode 文件资源管理器(即左侧)中显示“GoogleService-Info.plist” 。如果没有,您必须将“GoogleService-Info.plist”拖放到 Xcode 面板中。

就我而言,问题是我将文件复制粘贴到项目位置,因为项目信息中缺少此文件引用。


Kub*_*bee 5

我为几个白标应用程序使用了多种配置。我添加了一个用户定义的变量FIREBASE_SUFFIX并将我的脚本更改为以下内容:

${PODS_ROOT}/FirebaseCrashlytics/run -gsp ${PROJECT_DIR}/Firebase/GoogleService-Info-${FIREBASE_SUFFIX}.plist
Run Code Online (Sandbox Code Playgroud)

注意:我在这里使用 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
Run Code Online (Sandbox Code Playgroud)