Xcode Bitcode,包含符号设置对dSYM生成的影响

5

由于我使用Crashlytics来处理崩溃,因此在将应用程序提交到iTunes Connect之前,我始终取消选中“为您的应用程序包括应用程序符号以从Apple接收符号化的崩溃日志”,并保持选中“包括Bitcode”(为Apple Watch 未来做好准备):

Settings

Crashlytics有一篇关于Bitcode和丢失dSYMs问题的文章:

https://docs.fabric.io/apple/crashlytics/missing-dsyms.html#bitcode-download

根据他们的截图,要下载由Bitcode创建的新生成的dSYM文件,iTunes Connect中直接提供了下载链接。但是,似乎必须勾选“包括应用程序符号”才能下载它们,否则你只会得到这个:

No

我有点困惑这两个设置对于Crashlytics或任何第三方崩溃处理服务的正常运行是如何必需的。

我应该保持这两个设置都选中吗?如果我不使用苹果的Crash组织者(据我所知,dSYM文件在后期脚本归档期间上传到Crashlytics),那么取消选中“包括应用程序符号”是否可以?只保留Bitcode选中,还是这样做会导致无法下载新生成的Bitcode dSYMs(导致Crashlytics正确地符号化崩溃出现问题)?

1个回答

10

这是一个很好的问题。有很多因素会影响你的应用程序是否可用于调试符号信息。这很令人困惑,很多人都被绊倒了。

以下是我的指南:

  • 提交应用程序到苹果时,始终勾选“包括符号”框
  • 剥离最终的可执行文件(.app、.framework)
  • 如果有静态库,请勿剥离
  • 即使您不打算使用,也要让苹果的崩溃报告系统工作

有了这个配置,您在本地或由苹果生成的dSYM文件将包含Crashlytics和苹果报告工具所需的调试信息。当使用bitcode时,与苹果共享符号非常重要。如果没有共享符号,那么您很可能永远无法查看该版本应用程序的带有符号的崩溃。

当然,有一些有效的理由可以不与苹果共享符号。其中之一是您想混淆代码。我知道一些应用程序是这样做的。当然,这是一个权衡,因为这使得符号化变得更加困难,甚至取决于混淆系统而完全不可能。

还有一些原因可能会使您不想剥离可执行文件。其中一个是您依赖于不支持服务器端符号化的第三方崩溃报告系统。据我所知,这种情况越来越少见,但也需要注意。

最后,即使您从未打算使用苹果的崩溃报告系统,您也绝对需要让它工作。苹果的系统能够更可靠地捕获更多的崩溃,比任何第三方解决方案都要好。我相信它对苹果内部的工作也非常有价值。它确实有局限性,但真的不会花费太多成本。因此,保持其工作正常,即使只是为了将来有查看的选项。


1
我还应该包含一个链接到涵盖此一般区域的 Fabric 减面文档:https://docs.fabric.io/apple/crashlytics/missing-dsyms.html - Mattie
谢谢Matt!我取消选中“包括符号”复选框,因为我遇到了一些“rsync”错误,并且有时需要尝试2-3次才能成功上传。我还看到了一个Github问题,Fastlane开发人员说他取消选中它,因为他正在使用Crashlytics。 - allaire
2
你说得对。只有在使用位码时才需要与苹果共享符号。调试符号需要在生成dSYM的系统上表示。所以,当这在你的机器上发生时,Crashlytics 的运行是正常的。但是,苹果的报告仍然会受到影响。基本上没有好的理由来取消勾选该框(尽管上传不稳定)。 - Mattie
不幸的是,我不再在维护Crashlytics的公司工作。但我快速查看了他们的文档页面,它似乎有一些有用的信息:https://docs.fabric.io/apple/crashlytics/missing-dsyms.html#upload-symbols-script - Mattie
我在 Fabric 的 cocoapod 下找到了这个脚本。之前我在 Crashlytics 的 cocoapod 下寻找它。我上传了我的 dSyms,但仍然存在问题 - 我在堆栈跟踪中看到了 __hidden,这一点也没有帮助。 - RPM
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接