请求dSYM文件,但在存档或iTunes Connect dSYM文件中找不到Fabric

16
我有一个安装了Crashlytics的应用程序。为了获取它的dSYM文件,我总是去Window/Organizer,右键单击以在finder中显示,右键单击“显示包内容”,然后进入dSYM目录获取它们。
在这种情况下,Crashlytics表示缺少一个随机字符串的dSYM文件(65cbd90a2b443d36ab7a6a419b797a71)。当我按照上述方法查找时,我只看到一个名为MyApp.app.dSYM和通过CocoaPods合并的几个框架的dSYM文件。我尝试拖放该文件,但Fabric坚持使用随机字符串。
我尝试显示MyApp.app.dSYM的包内容,但除了一个“Contents”文件夹和一个带有DWARF子目录和没有扩展名的文件“My App”的“Resources”文件夹外,里面什么也没有。
在审查此帖子后,我99%确定我不能只构建存档并重新提交
我也尝试过直接从iTunesConnect下载dSYM,如此帖子所述。
我尝试上传原始的dSYM文件以及压缩后的文件(dSYM.zip),但是Fabric仍然需要一个似乎不存在于本地存档和iTunesConnect上的随机字符串。
非常感谢任何关于获取Crashlytics所需的dSYM文件的额外方法的建议。
3个回答

12

从iTunes Connect下载DSYM包后,你就快要成功了!下载完成后,添加.zip扩展名,然后双击进行解压。

在生成的DSYMs文件夹中,将会有一个标题为65cbd90a2b443d36ab7a6a419b797a71 (Crashlytics正在请求的文件)。如果没有找到该文件,请仔细检查在Crashlytics和iTunes Connect上是否查看了相同版本构建。

只需将该文件上传到Crashlytics中即可。

问题解决了。


天啊!那太简单了!我从iTunes Connect下载的文件名为dSYMS。我正在压缩它并尝试上传它。我没有意识到它已经是一个没有扩展名的zip文件了。 - Adrian
1
编译和版本匹配,但 Crashlytics 只是要求一个在 iTunes 存档中不存在的 dsym。已经做了很多次,没有可能崩溃来自其他地方。 - Alexandre G

7
对于没有启用Bitcode的应用,Crashlytics将自动上传您的dSYMs。如果您在应用中启用了Bitcode,则需要手动上传dSYMs。
要符号化崩溃,需要从Xcode下载Bitcode编译的dSYMs并将其上传到Crashlytics。可以从Xcode的组织器中下载启用Bitcode的应用程序的dSYMs。选择您的应用程序的特定存档,然后点击“下载dSYMs”按钮,该按钮将Bitcode编译的dSYMs插入原始存档中。
手动上传dSYMs:
如果发现dSYMs没有被捕获,您可以通过转到应用程序设置页面,选择一个应用程序,并单击“缺少DSYMs”选项卡来手动添加它们。
为了找到dSYM的位置,请在打开的终端中运行此命令:
mdfind "com_apple_xcode_dsym_uuids == <UUID>"

查找所有的dSYM,请尝试:

mdfind "com_apple_xcode_dsym_uuids == *"

另外,如果您将dSYM上传到Fabric,您需要检查UUID是否与缺失的UUID匹配。在打开的终端中运行此命令将为您提供dSYM的UUID。

dwarfdump -u <PathToYourAppsDsym>

参考资料

Crashlytics高级设置


2
当你创建一个二进制文件时,符号将位于文件内的特定位置。当没有符号时,崩溃日志将指示从二进制文件中某些点的偏移量,例如someFramework.someFunction +100
因此,创建dSYM文件有助于索引特定二进制文件中的内容。重新归档修改后的代码库或项目将导致新二进制文件中的不同偏移量,因此您不能简单地重新归档并上传。
这就是为什么使用例如release-v2.1对git存储库进行标记非常重要,因此如果需要,您可以返回并重新归档,偏移量应该是相同的。
就Fabric的工作方式而言,它需要一个dSYM文件的压缩版本,你发布的那个数字可能是zip文件的哈希值,我不确定百分之百。
如果你在系统上安装了Fabric应用程序,运行设备上的版本应该会自动上传dSYM文件(如果你反复构建和运行一个项目,它将为每个构建上传每个dSYM文件,这可能会破坏上传带宽)。
你最好的选择是在你的git仓库中找到确切的时间点,然后在模拟器中重新运行应用程序,这应该会上传dSYM并希望与旧的匹配,但我不确定它是否有效。否则,如果你认为你有确切的dSYM,请尝试将其压缩并上传。
如果这样做不起作用,你就必须走老路,手动使用终端和崩溃日志中的偏移量重新符号化它。这需要一些时间,但可以使用atos完成。
atos [-o AppName.app/AppName] [-l loadAddress] [-arch architecture] 

谢谢你的回答。我学到了一点,但是在这方面我还是和之前一样。我想我会发布一个 .01 版本,并确保 Fabric 有 dSYM 信息,然后再将其释放到公众环境中。 - Adrian
使用这种方法,重新生成的 dSym 是否会获得与之前相同的 UUID? - Bradley Thomas
不,dSYM 只能与与其一起生成的二进制文件配合使用。 - Michal Cichon

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