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 FirebaseCrashlytics
和GoogleService-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
脚本来为我处理所有这些
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
文件,而我们从未关注它。
现在Fabric
被FirebaseCrashlytics
代替了,为了实现这个自动机制,你可以创建一个新的运行脚本并将这个脚本粘贴到那里:
"${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 Connect
的 Activity
部分找到 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}"
我正在尝试按照 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 FirebaseCrashlytics
和GoogleService-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
脚本来为我处理所有这些
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
文件,而我们从未关注它。
现在Fabric
被FirebaseCrashlytics
代替了,为了实现这个自动机制,你可以创建一个新的运行脚本并将这个脚本粘贴到那里:
"${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 Connect
的 Activity
部分找到 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}"