当应用程序名称包含撇号和空格时符号化崩溃日志(已部署的应用程序)

Posted

技术标签:

【中文标题】当应用程序名称包含撇号和空格时符号化崩溃日志(已部署的应用程序)【英文标题】:Symbolicate Crash Log when App Name Contains Apostrophe and Space (Deployed App) 【发布时间】:2012-11-30 17:54:04 【问题描述】:

我在 App Store 上有一个应用程序崩溃了。我在 SO 上尝试了几种解决方案来象征我的应用程序,在不同的时间使用 Organizer、Terminal 和 Instruments。到目前为止没有任何效果 - 我的应用程序中方法的报告中的行从未符号化,即使 Apple 方法的行是符号化的。看了一会后,似乎这可能与应用程序名称有关,它与“Angie's List”类似——带有撇号和空格。现在更改应用程序名称为时已晚,因为它已在商店上线。我还没有在任何地方看到解决此问题的方法,希望能朝着正确的方向推进。

【问题讨论】:

【参考方案1】:

通常应用名称无关紧要,除非符号化脚本中存在我怀疑的错误。您是否检查过您是否有正确的 dSYM 可用?

如果您向下滚动最新的崩溃日志,请查看Binary Images 下方的第一行,它将如下所示

0x1000 -   0x24cfff +YourApp armv7  <f6012c517d783486ab53e45d948b92a2> /var/mobile/Applications/A8EC3C1F-44AF-169A-BC0E-FBBC0F04CDF5/YourApp.app/YourApp

f6012c517d783486ab53e45d948b92a2 是导致崩溃的可执行文件的 UUID。

您可以使用终端找到正确的 dSYM,如下所示:

mdfind "com_apple_xcode_dsym_uuids == F6012C51-7D78-3486-AB53-E45D948B92A2"

字符串F6012C51-7D78-3486-AB53-E45D948B92A2 是将上述字符串重新格式化为大写和8-4-4-4-12 组。我猜这个命令不会返回任何东西。

如果您有 dSYM(例如在 .xcarchive 中),您可以在终端中检查其 UUID,如下所示:

dwarfdump --uuid YourApp.app.dSYM 

如果符号化不能自动工作,您可以尝试按照此处发布的说明手动操作:ios crash reports: atos not working as expected

如果应用程序中包含空格或撇号等特殊字符,则默认 Apple 工具链将无法对其进行符号化。原因是工具链中使用的工具otool 无法处理。无论您如何传递文件名。因此,要解决此问题,您必须执行以下操作:

    重命名 dSYM 包并删除所有特殊字符,例如从My App's.app.dSYMMyApps.app.dSYM 打开包内的内容并向下导航到Contents/Resources/DWARF 像上面那样重命名其中的文件

现在再试一次。避免这一切的最佳方法:切勿在您的应用名称中使用特殊字符。如果要调整屏幕上显示的名称,请使用CFBundleDisplayName 或相应的 plist 条目。

【讨论】:

非常感谢您的帮助。我现在处于一个非常糟糕的地方。 mdfind 命令 DID 返回 dSYM 文件的位置。 我觉得这个名字真的是个问题——我在几个线程上读到人们在他们的应用程序名称中遇到了空格和撇号(单独的线程)的问题。然后我还想知道我是否彻底搞砸了我的应用程序设置,并且如上所述,dSYM 中存在错误。 您可以轻松地对此进行测试。更改崩溃报告文件中应用程序名称的所有外观并从中删除特殊字符。确保格式保持不变,例如通过在应用名称末尾添加空格来表示您删除的字符数量。然后尝试再次象征它。 您认为只需要在崩溃报告文件中进行更改吗?问题是用于 UIKit、Core Data 等的 Apple 方法确实可以正确表示......无论如何我都可以尝试一下。我也很想知道所有涉及符号的字段和所有构建配置的正确应用程序设置 - 你似乎知道你在说什么,我刚刚看到了很多相互矛盾的信息。例如,我在复制期间将剥离调试符号设置为 NO,但剥离链接产品设置为 YES... 太混乱了 我得到了和以前一样的结果,Apple 方法的符号正确,而我的应用程序的方法……没有。我不确定如何处理这一行,因为在不更改实际应用程序文件名称的情况下取出空格和撇号没有太大意义:0x3000 - 0x135fff + JacobsLadder armv7 /var/mobile/ Applications/02DEF31B-0435-4656-BA71-DEC01DCEDB84/Jacob's Ladder.app/Jacob's Ladder

以上是关于当应用程序名称包含撇号和空格时符号化崩溃日志(已部署的应用程序)的主要内容,如果未能解决你的问题,请参考以下文章

bash中双引号单引号反撇号的用法

撇号导致 Node SQL 应用程序崩溃

如何删除带有符号的文件(特别是撇号)

忽略包含中的撇号

Xcode 5.0 不符号化崩溃日志

iOS 符号化崩溃日志