【问题标题】:iOS and FirebaseCrashlyticsiOS 和 FirebaseCrashlytics
【发布时间】:2020-07-04 08:52:58
【问题描述】:

我正在尝试按照Firebase Docs 上的说明上传缺少的所需 dSYM。但是我一直在运行上传脚本。

在我的构建阶段,我有

"${PODS_ROOT}/FirebaseCrashlytics/upload-symbols -gsp${SRCROOT}/GoogleService-Info.plist -p ios ${SRCROOT}/appDsyms"

当我尝试使用它构建 iOS 应用程序时,我收到错误:

第 4 行:/path/to/Pods/FirebaseCrashlytics/upload-symbols -gsp/path/to/GoogleService-Info.plist -p ios /path/to/appDsyms:没有这样的文件或目录强>

命令 PhaseScriptExecution 失败,退出代码非零

当我尝试从终端运行脚本时出现错误:

未提供 Google 应用 ID 或 Google 服务文件

我已验证我有一个 Google 服务文件,并且能够使用其他依赖它的 firebase 服务来运行我的项目。我以前可以将 Dysm 文件直接上传到 Firebase 控制台,但在 3 月 1 日发生了变化。

这个命令应该作为 XCode 脚本运行还是作为来自终端的命令运行?而且,更重要的是,有人知道如何解决这个问题吗?

【问题讨论】:

    标签: ios swift firebase crashlytics


    【解决方案1】:

    我们可以做到:

    PATH_TO_GOOGLE_PLISTS="${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/GoogleService-Info.plist"
    

    获取对 plist 的引用

    然后使用它:

    "${PODS_ROOT}/FirebaseCrashlytics/upload-symbols" -gsp "${PATH_TO_GOOGLE_PLISTS}" -p ios "${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}"
    

    【讨论】:

      【解决方案2】:

      相信我,我花了一天时间但没有任何效果,

      令人惊讶的是,很少有解决方案适用于我的同事的几个项目,但我使用的是 Big Sur 和 Xcode 12.2,但对我没有任何帮助。

      尝试 1:firebase 文档中提到的每个步骤。

      尝试2:尝试通过传递path_to_pod_firebasecrshlytics/uploadsybol -gsp path_to/GoogleService-Info.plist -p ios path_to/dSYMs从终端上传符号

      但是,运气不好,

      以下技巧对我有用,

      第 1 步:确保您使用的是最新的 firebase crashlytics 版本,提供项目路径并触发 cmd pod update

      我使用的是 Firebase Crashlytics 版本 4.0.0-beta.1,但在 pod 更新后它是 8.2.0

      第 2 步:进入构建阶段,在下面添加运行脚本编译捆绑资源"${PODS_ROOT}/FirebaseCrashlytics/run"

      第 3 步:添加 DYSM 脚本,"${PODS_ROOT}/FirebaseCrashlytics/upload-symbols" -gsp "${PROJECT_DIR}/your_path/GoogleService-Info.plist" -p ios "${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}"

      第 4 步:构建项目;

      第 5 步:运行项目并停止或断开与故事板的连接

      第 6 步:使崩溃 2-3 次并等待 2-5 分钟。

      干杯,一切准备就绪!

      【讨论】:

      • 大家观察"${PROJECT_DIR}/your_path/GoogleService-Info.plist" -p ios中的your path
      • 运行命令有什么作用?我的构建中有它,但在文档中找不到它
      【解决方案3】:

      检查您的完整项目文件夹路径是否包含空间。我通过将我的项目移动到另一个没有空间的文件夹路径来解决它。

      【讨论】:

        【解决方案4】:

        截至 2020 年 5 月:

        Fabrics 关闭后,许多开发人员都面临这样的问题,因为 Fabric 会自动创建脚本以从 Xcode 上传 dSYM 文件,而我们从未关注过它。

        现在FabricFirebaseCrashlytics替换了,为了实现这个自动机制,你可以新建一个运行脚本,然后把这个脚本粘贴到那里:

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

        此脚本将获取 dSYM 文件并将它们上传到 firebase 服务器,以便您查看崩溃情况。

        对于多个方案:

        如果您的项目有多个方案,您可以通过更改 Google Plist 文件的路径来简单地创建多个此类脚本。

        注意:您也可以使用upload-symbols tool [Check here] 手动上传dSYM 文件,但最好尽可能自动化该过程。

        编辑:2020 年 7 月: 当您在Crashlytics 仪表板中看到丢失的崩溃 dSYM 文件时,您可以在提交构建文件后立即上传 dSYM 文件以供 Apple 审查或通过 Test Flight 进行测试.

        显示缺少dSYM 是因为启用bitCode 时,App Store Connect 会处理上传它的二进制帖子并生成一个新的 dSYM 文件。

        您可以在App Store ConnectActivity 部分找到dSYM 文件。

        【讨论】:

        • 感谢您的贡献!如何获取 dwarf DSYM 文件夹路径和文件名?
        • @mobiledevcookie 您只需按原样编写脚本。您无需指定确切的路径。脚本会自己找到它。唯一需要您注意的是:"${PROJECT_DIR}/GoogleService-Info.plist"。确保您指明了 GoogleService-Info.plist 文件的正确路径。无论如何,如果出现任何问题,Firebase 现在会提供一条描述性很强的错误消息,并且很容易解决此问题。
        • 我收到一个错误:在构建阶段模式下运行上传符号正在验证 Crashlytics 的构建环境... 验证成功。由于上传符号在验证模式下运行而退出正在获取上传符号设置... [31merror:无法获取上传符号设置:无法连接到服务器。[0m 命令 PhaseScriptExecution 失败,退出代码为非零
        • 脚本有效。 dSYM 符号已上传,但崩溃仍未在 Firebase 中解密。
        • @mobiledevcookie 请检查您是否拥有使用 GoogleService-Info.plist 的正确权限。检查您的 Firebase 项目设置。
        【解决方案5】:

        经过几个小时的努力,这个问题终于用这种方法解决了:

        在终端中使用这个命令:/path/to/pods/directory/FirebaseCrashlytics/upload-symbols -gsp /path/to/GoogleService-Info.plist -p ios /path/to/dSYMs

        重要的是,您应该在应用程序文件夹中输入 pods 文件夹的路径而不是 /path/to/pods/directory,而不是 /path/to,您应该输入项目文件夹中的 GoogleService-Info.plist 的路径.最后一个是,而不是/path/to/dSYMs,您应该输入格式为.xcarchive 的存档路径。

        要找到.xcarchive 路径,您应该首先归档您的应用程序,然后转到 XCode -> Organizer 并选择您的构建,然后右键单击它并选择“在查找器中显示”,然后右键单击您的 @987654328 @ 文件并选择“显示包内容”。就是这样,您可以复制此路径并粘贴它而不是 /path/to/dSYMs,然后按 Enter 开始上传到 Firebase Crashlytics。

        查看此链接了解更多信息: Firebase Docs

        【讨论】:

        • 我已经尝试过这个解决方案,但在 firebase crashlytics 控制台中仍然显示相同(必需的 dsym 文件)。你能帮帮我吗?
        • 存档后是否需要上传每个 dSYM 文件?
        • @MaheshNFC 是的。有什么问题?
        • 每次发布​​时手动上传调试信息,并希望它与编译后的代码匹配?你看不出这有什么问题吗?哇。
        • @AndrewKoster 您也可以随时使用其他方法!
        【解决方案6】:

        就我而言,在我添加以下内容之前都没有工作:

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

        如果我没有将路径添加到运行命令,构建阶段将永远运行......

        【讨论】:

          【解决方案7】:

          在为 Crashlytics 实施 FirebaseCrashlytics(目前处于测试阶段)时

          Build Phases 添加新的运行脚本并添加以下内容:

          "${PODS_ROOT}/FirebaseCrashlytics/run"
          

          Input Files部分添加

          ${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${TARGET_NAME}
          

          $(SRCROOT)/path to/GoogleService-Info.plist
          

          如果您仍然收到dSYM 丢失错误,请尝试从终端运行

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

          对于path to FirebaseCrashlyticsGoogleService-Info.plist从实际位置拖放 对于 dSYM 路径将是 ${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}

          要使用您的项目 .xcodeproj 和目标 xcodebuild -project YourProject.xcodeproj -target YourTarget -showBuildSettings 来获得该命令
          并替换您的特定路径

          在实施 Crashlytics 时请注意以下事项
          1. 以发布模式运行应用程序
          2. 测试与 mac 断开设备时
          3.设置正确GoogleService-Info.plist
          4. 如果重命名,请确保在需要时设置正确的文件名。

          【讨论】:

          • 为什么说需要Run application in release mode?您也可以为Debug 模式启用DWARF with dSYM
          • @Starsky Crashlytics 记录崩溃处于发布模式,这就是原因。
          【解决方案8】:

          嗯,没有什么对我有用,但改变了这个:

          "${PODS_ROOT}/FirebaseCrashlytics/run" 
          

          到这里:

          "${PODS_ROOT}/FirebaseCrashlytics/run" -gsp "${PROJECT_DIR}/project_main_dir/google-services-files/iOS-GoogleService-Info.plist" 
          

          编辑

          对于那些试图遵守 iOS 催化剂的人:

          您不必下载两个不同的 Google JSON 文件。您应该只使用一个(因为您只有 1 个目标)。如果您想上传您的应用程序的 mac 版本,只需转到 App Store Connect 并为 OSX 创建一个新版本(在您应用程序的同一页面中)

          【讨论】:

          • 在这之后我们需要在终端上运行任何代码吗?还是这个就够了?
          • 这个对我来说已经足够了
          • 在我的情况下,它仍然显示 dSYM 文件丢失。说要在 crashlytics 控制台中上传它们。
          【解决方案9】:

          2020 FirebaseCrashlytics 解决方案

          你有两个解决方案:

          1) 从命令行

          转到您的项目文件夹并运行:

          ./Pods/FirebaseCrashlytics/upload-symbols -gsp GoogleService-Info.plist -p ios <path_to_your_dsyms_zip>

          您可以在 Xcode 管理器中获取您的 dsym > 右键单击​​存档 > 在 Finder 中显示 -> 显示内容 -> 转到 dsymm 文件夹并压缩它

          2) 从 Xcode 构建阶段

          here (Firebase doc) 所述,您可以使用此内容在 Xcode 中添加运行脚本阶段:

          "${PODS_ROOT}/FirebaseCrashlytics/run"

          您还必须在运行脚本下添加这两个输入文件:

          ${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${TARGET_NAME}

          $(SRCROOT)/$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)

          【讨论】:

          • 此解决方案是唯一对我有用的解决方案 - 如上所示省略了 GoogleService-Info.plist 文件的路径使其工作。
          • 谢谢,这行得通....确保使用 dSYM 文件将设置调试信息格式设置为 DWARF。否则我认为不会上传 dsym
          • 我应该用值替换 ${DWARF_DSYM_FOLDER_PATH}、${DWARF_DSYM_FILE_NAME} 或 ${TARGET_NAME} 吗?还是 Xcode 知道如何使用这些键?
          • @AsiGivati 你不需要改变任何东西
          • 谢谢!在我的情况下,添加了$(SRCROOT)/$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH) 对于矮人:firebase.google.com/docs/crashlytics/…
          【解决方案10】:

          最后,我想通了并写了一个shell 脚本来为我处理这一切

          随意使用:https://github.com/cs4alhaider/firebase-upload-symbols

          【讨论】:

          • 太好了,您能告诉我如何在 macbook 中运行该 shell 脚本
          【解决方案11】:

          您的 Google 服务路径似乎已关闭。这是我的构建阶段的示例,它能够成功上传 dSYM。我建议再按照这些说明操作一次https://firebase.google.com/docs/crashlytics/get-deobfuscated-reports-new-sdk?platform=ios&authuser=0

          找到 /Users/okodysh/Library/Developer/Xcode/DerivedData/myApp-ftqksfkpdvisbtaozpqzzjiizpfk/Build/Products/Debug-iphonesimulator -name "myApp.app.dSYM" | xargs -I {} $PODS_ROOT/FirebaseCrashlytics/upload-symbols -gsp /Users/okodysh/Desktop/iOSApps/myApp/myApp/GoogleService-Info.plist -p ios {}

          【讨论】:

            【解决方案12】:

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

            我在其他文件夹中替换了我的 GoogleService-Info.plist,并在 shell 脚本中进行了目录更改。或许你也应该这样做

            对于终端命令,您最好在终端中拖放必要的文件,然后复制选定的路径

            /path_to_pods/FirebaseCrashlytics/upload-symbols -gsp /path_to_google_service/GoogleService-Info.plist -p iOS /path_to_dSYMs

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2020-11-11
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-08-29
              • 1970-01-01
              • 2021-08-13
              • 1970-01-01
              相关资源
              最近更新 更多