iOS 和 FirebaseCrashlytics

iOS and FirebaseCrashlytics

我正在尝试按照 Firebase Docs 上的说明上传缺少的必需 dSYM。然而,我仍然停留在 运行 上传脚本上。

在我的构建阶段我有

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

当我尝试用它构建 iOS 应用程序时,出现错误:

line 4: /path/to/Pods/FirebaseCrashlytics/upload-symbols -gsp/path/to/GoogleService-Info.plist -p ios /path/to/appDsyms: No such file or directory

Command PhaseScriptExecution failed with a nonzero exit code

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

No Google App ID or Google Services file provided

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

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

"${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

您的 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 -名称 "myApp.app.dSYM" | xargs -I {} $PODS_ROOT/FirebaseCrashlytics/upload-symbols -gsp /Users/okodysh/Desktop/iOSApps/myApp/myApp/GoogleService-Info.plist -p ios {}

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

在终端中使用此命令:/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 也位于您的项目文件夹中。最后一个是,您应该输入格式为 .xcarchive.

的存档路径,而不是 /path/to/dSYMs

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

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

在为 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从实际位置拖放 对于 dSYMs,路径将为 ${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. 如果重命名,请确保在需要时设置正确的文件名。

最后,我想通了并编写了一个 shell 脚本来为我处理所有这些

欢迎使用:https://github.com/cs4alhaider/firebase-upload-symbols

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)

截至 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 工具 [Check here] 手动上传 dSYM 文件,但最好将此过程自动化尽我们所能。

编辑:2020 年 7 月: 当您在 Crashlytics 仪表板中看到因崩溃而丢失的 dSYM 文件时,您可以在将 dSYM 文件提交给 Apple 审查或通过试飞进行测试。

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

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

嗯,除了改变这个对我没有任何作用:

"${PODS_ROOT}/FirebaseCrashlytics/run" 

对此:

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

编辑

对于那些试图遵守 iOS 的 Catalyst 的人:

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

在我的例子中 none 在我添加这个之前一直在工作:

"${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}"

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

检查您的完整项目文件夹路径是否包含space。我通过将我的项目移动到另一个没有 space.

的文件夹路径来解决它

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

令人惊讶的是,很少有解决方案适用于我同事的一些项目,但我使用的是 Big Sur 和 Xcode12.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

I was using Firebase Crashlytics version 4.0.0-beta.1 but after pod update it is 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 分钟。

干杯,准备就绪!

我们可以做到:

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}"