【问题标题】:Upload symbol files上传符号文件
【发布时间】:2016-09-27 12:59:37
【问题描述】:

在我的 Firebase 崩溃报告页面中,我找不到崩溃的完整信息(例如行数、文件等)。 我认为可能是因为它说

上传符号文件以符号化 UUID 的未来堆栈跟踪 ----***

告诉我

使用命令行,导航到您的 Xcode 项目文件夹并运行 以下内容:./Pods/FirebaseCrash/batch-upload ----***

不幸的是,当我尝试在我的 Xcode 项目中执行该命令时,我收到以下消息:

----***:警告:没有可执行文件或捆绑包 完成。

firebase 没有任何变化。也许是因为启用了位码?我该如何解决?

附: :出于安全原因,我已将我的 UUID 替换为 ----***。

【问题讨论】:

  • 我遇到了同样的问题,在我的构建设置中,我在“Strip debug symbol”上有一个标志,因为没有创建 Dsym,也没有找到批量上传。

标签: ios xcode swift firebase firebase-crash-reporting


【解决方案1】:

就我而言(没有 COCOAPODS):

1) 从目录“Crash”导入所有文件



2) 像这样将脚本添加到“构建阶段”选项卡中:

# Replace this with the GOOGLE_APP_ID from your GoogleService-Info.plist file
GOOGLE_APP_ID=1:xxxxxxxxxxxx:ios:xxxxxxxxxxxx

# Replace the /Path/To/ServiceAccount.json with the path to the key you just downloaded
"${SRCROOT}"/upload-sym "${SRCROOT}/*NameOfTargetDirectory*/ServiceAccount.json"



您需要在脚本中更改“NameOfTargetDirectory”,它可以工作!

【讨论】:

    【解决方案2】:

    我们目前在使用第三方共享库(动态框架)时遇到了一些问题,所以如果您使用共享库,事情就会变得很困难。请按照以下说明操作,但将应用程序可执行文件的路径替换为共享库的路径。

    如果不是,则报告崩溃的原始可执行文件可能已丢失。即使使用相同的源重新构建,LC_UUID 字段也会发生变化。

    1. 验证可执行文件的 UUID 是否正确:

      dwarfdump --uuid /path/to/your/build/area/MyApp.app/MyApp

      如果没有一个 UUID 与丢失的 UUID 匹配,则游戏结束。对不起。您可以尝试从 Time Machine、Carbonite 或其他任何工具恢复可执行文件,但仅此而已。

    2. 如果其中一个 UUID 匹配(每个体系结构有一个),那么您仍然拥有原始可执行文件,但您很可能缺少 dSYM 包。您可以验证是否缺少 dSYM:

      mdfind com_apple_xcode_dsym_uuids=UUID

      您应该没有看到任何响应。

    3. 重新生成 dSYM 包:

      dsymutil -o=upload.dSYM /path/to/your/build/area/MyApp.app/MyApp 
    4. 检查 dSYM 包是否已注册:

      mdfind com_apple_xcode_dsym_uuids=UUID

      您应该得到一个回复​​:您刚刚创建的 upload.dSYM

      如果您没有看到,请等待几秒钟,然后重试。

    5. 再次运行<b>batch-upload </b><i>UUID</i>

    6. 如果它仍然不起作用,您可以通过处理可执行文件本身来获得部分结果。运行<b>batch-upload</b> <i>/path/to/your/build/area/MyApp</i><b>.app/</b><i>MyApp</i> 以获取部分符号。

    【讨论】:

    • 我应该在询问“服务帐户文件在哪里”的对话框中选择什么?
    • 您需要提供与您的项目的 GOOGLE_APP_ID 关联的 JSON 凭证文件。如果您在构建过程中运行了“upload-sym”,则应该事先提示您输入 JSON 凭证文件,并且它会绑定到项目的 GOOGLE_APP_ID。如果这是事后符号化的尝试,那么您需要获取the instructions on the Firebase Crash Reporting site 之后的 JSON 凭据文件。
    • UUID 都不匹配怎么办?当 dwarfdump --uuid
    • @RobertMenke 这如何适用于 Bitcode?第 3 步显然不适用,因为 dSYM 是由 iTunes Connect 生成的,我们应该做些什么不同的事情?
    【解决方案3】:

    这个答案是如果你不使用 CocoaPods。

    如果您不使用 CocoaPods,您将需要 Pods 目录中的一些文件,这些文件未包含在它们提供的标准 Firebase 库集中。

    有5个文件,如下图:

    您将需要batch-uploaddump_symsupload-symupload-sym-util.bashupload-sym.sh。您可以从 FirebaseCrash Pod 文件中检索这些文件。

    如果您将它们复制到您的项目目录中并将"${PODS_ROOT}"/FirebaseCrash/ 替换为指向这些文件的目录,它应该可以工作。

    注意:如果我使用像 Jenkins 这样的构建服务器,我仍然对这个解决方案感到困惑。还有一些工作要做。


    我发现这对于我的不使用 CocoaPods 的应用程序是必需的。虽然这可能与您自己的使用没有直接关系,但我认为至少我应该将它包括在内,以供其他人试图找到答案。

    【讨论】:

    • 不幸的是,我正在使用 cocoapods,但正如您所说,它可能对其他人有用!所以谢谢!
    • 谢谢!为我节省了很多时间。
    • @Zac 如果你正在使用 cocoapods 并且仍然得到非符号日志,你如何符号化它?
    • 我这边解决的所有问题。通过在项目文件夹内的项目导航中添加静态框架。早些时候,我将它们添加为普通框架。现在,一切正常。
    猜你喜欢
    • 2021-09-15
    • 1970-01-01
    • 1970-01-01
    • 2012-08-08
    • 2017-01-27
    • 2019-05-04
    • 1970-01-01
    • 1970-01-01
    • 2017-03-05
    相关资源
    最近更新 更多