24

请注意:我要求提供一个可以下载符号的地方,或者要求 Apple 禁止此类网站的结论性答案。“重复”问题与我在问题中链接的问题相似:唯一建议的答案是访问物理设备或找到另一个拥有物理设备的开发人员。

我已经符号化了一个故障转储,但只有我的应用程序代码中的行被符号化了;系统代码没有。它看起来像这样:

Thread 0 Crashed:
0   libobjc.A.dylib                     0x39c195d0 0x39c16000 + 13776
1   QuartzCore                          0x33aefcad 0x33ade000 + 72877
2   QuartzCore                          0x33af3105 0x33ade000 + 86277
<snip>
13  UIKit                               0x33d862b9 0x33d2f000 + 357049
14  MyApp                               0x0005ef87 main (main.m:14)

...

Thread 7:
0   libsystem_kernel.dylib              0x3a101e30 0x3a101000 + 3632
1   CoreFoundation                      0x31ef82bb 0x31e61000 + 619195
2   CoreFoundation                      0x31ef7031 0x31e61000 + 614449
3   CoreFoundation                      0x31e6a23d 0x31e61000 + 37437
4   CoreFoundation                      0x31ec8c4b 0x31e61000 + 425035
5   MyApp                               0x0016f293 +[UA_ASIHTTPRequest runRequests] (UA_ASIHTTPRequest.m:4795)
6   Foundation                          0x3283b231 0x3278a000 + 725553
7   libsystem_c.dylib                   0x3a06b0e1 0x3a05a000 + 69857

我从这个问题中得知这是因为崩溃来自 iOS 6.1.4 设备,而我的 ~/Library/Developer/Xcode/iOS DeviceSupport 文件夹中没有 iOS 6.1.4 的符号。

不幸的是,iOS 6.1.4 是仅限 iPhone 5 的版本,我没有可以更新到 6.1.4 的 iPhone 5 的物理访问权限,因此无法从设备上删除符号。有没有什么地方可以下载不同 iOS 版本的符号(没有运行这些版本的设备),或者这些符号是否被视为 Apple 机密?

4

3 回答 3

16

我从真实设备(来自二手移动市场)、iOS 防火墙和 Xcode 的 iOS SDK 中收集了大部分系统符号。

你可以在这里下载你需要的版本:

iOS系统符号文件(7.0-9.2)

iOS系统符号文件(9.2.1-10.2)

阅读iOS-System-Symbols了解更多详细信息。如果我得到新的符号文件,我会将其添加到 google 驱动器共享文件夹中。您可以从上面的 github 存储库中关注最新更新。

如何使用

  1. 当您需要符号化崩溃报告时,请检查Code TypeandOS Version部分。如:

Code Type: ARM-64

OS Version: iOS 10.2 (14C82)

这意味着您需要系统arm64的版本符号10.2 (14C82)

  1. 在我的共享文件夹中找到该包并将其解压缩到~/Library/Developer/Xcode/iOS DeviceSupport. (检查文件名和路径,应该是~/Library/Developer/Xcode/iOS DeviceSupport/10.2 (14C82)/Symbols)。

  2. 使用 Xcode 的symbolicatecrash工具来符号化你的崩溃报告。该工具将iOS DeviceSupport自动搜索路径中的系统符号。

符号列表

7.0 (11A465)从到有 50 个版本10.2 (14C92)。(如果你用 CPU 架构计算操作系统版本,它是 85。我有 76 个)。

这是从7.0到的符号列表10.2,以及我拥有的 CPU 架构版本。

|    OS Version     | collected CPU version |
|-------------------|---------------------- |
|   10.2 (14C92)    |   arm64,armv7s        |
|   10.1.1 (14B150) |   arm64,armv7s        |
|   10.1.1 (14B100) |   arm64,armv7s        |
|   10.1 (14B72c)   |   arm64,armv7s        |
|   10.1 (14B72)    |   arm64,armv7s        |
|   10.0.3 (14A551) |   arm64,armv7s        |
|   10.0.2 (14A456) |   arm64,armv7s        |
|   10.0.1 (14A403) |   arm64,armv7s        |
|   10.0(14A346)    |   none                |
|   9.3.5 (13G36)   |   arm64,armv7s,armv7  |
|   9.3.4 (13G35)   |   arm64,armv7s,armv7  |
|   9.3.3 (13G34)   |   arm64,armv7s,armv7  |
|   9.3.2(13F72)    |   none                |
|   9.3.2 (13F69)   |   arm64,armv7s,armv7  |
|   9.3.1 (13E238)  |   arm64,armv7s,armv7  |
|   9.3(13E237)     |   armv7s,armv7        |
|   9.3(13E236)     |   armv7               |
|   9.3(13E234)     |   none                |
|   9.3 (13E233)    |   arm64,armv7s,armv7  |
|   9.2.1 (13D20)   |   arm64,armv7s        |
|   9.2.1 (13D15)   |   arm64,armv7s,armv7  |
|   9.2 (13C75)     |   arm64,armv7s,armv7  |
|   9.1 (13B143)    |   arm64,armv7s,armv7  |
|   9.0.2(13A452)   |   arm64,armv7s,armv7  |
|   9.0.1(13A404)   |   arm64,armv7s,armv7  |
|   9.0 (13A344)    |   arm64,armv7s,armv7  |
|   8.4.1 (12H321)  |   arm64,armv7s,armv7  |
|   8.4 (12H143)    |   arm64,armv7s,armv7  |
|   8.3 (12F70)     |   arm64,armv7s,armv7  |
|   8.3 (12F69)     |   arm64,armv7s,armv7  |
|   8.2 (12D508)    |   arm64,armv7s,armv7  |
|   8.1.3 (12B466)  |   arm64,armv7s,armv7  |
|   8.1.2 (12B440)  |   arm64,armv7s,armv7  |
|   8.1.1 (12B436)  |   arm64,armv7s        |
|   8.1.1 (12B435)  |   armv7s,armv7        |
|   8.1 (12B411)    |   arm64,armv7s,armv7  |
|   8.1 (12B410)    |   arm64,armv7s,armv7  |
|   8.0.2 (12A405)  |   arm64,armv7s,armv7  |
|   8.0.1(12A402)   |   armv7s,armv7        |
|   8.0 (12A366)    |   arm64,armv7s        |
|   8.0 (12A365)    |   arm64,armv7s,armv7  |
|   7.1.2 (11D257)  |   armv7s,armv7        |
|   7.1.1 (11D201)  |   arm64,armv7s,armv7  |
|   7.1 (11D167)    |   arm64,armv7s,armv7  |
|   7.0.6 (11B651)  |   arm64,armv7s,armv7  |
|   7.0.4 (11B554a) |   arm64,armv7s,armv7  |
|   7.0.3 (11B511)  |   arm64,armv7s,armv7  |
|   7.0.2(11A501)   |   armv7s,armv7        |
|   7.0.1(11A470a)  |   armv7s              |
|   7.0(11A465)     |   arm64,armv7s,armv7  |

缺少符号

我仍然怀念这些 CPU 的符号,如果你有这些符号,请分享

| missed OS Version |   missed CPU Version  |   description
|-------------------|-----------------------|-----------------
|  10.0(14A346)     |  arm64                |  iPhone 7 and 7 Plus-only, default OS when leave factory 
|  9.3.2(13F72)     |  arm64                |  iPad Pro 9.7-inch-only, fix bricked problem
|  9.3(13E237)      |  arm64                |  5s, iPad Air and iPad mini2 only, fix activation problem
|  9.3(13E234)      |  arm64                |  6s, 6s Plus and iPad Pro 9.7-inch only
|  8.1.1 (12B435)   |  arm64                |  5s, iPad Air and iPad mini2 only
|  8.0.1(12A402)    |  arm64                |  `8.0.1`was pulled soon after released.Because it has serious bugs 
|  7.1.2 (11D257)   |  arm64                |    
|  7.0.2(11A501)    |  arm64                |  
|  7.0.1(11A470a)   |  arm64                |  5s only  

如何检查符号文件包含的 CPU 版本

如果您已经有一个系统符号文件,并且想知道它包含哪个 CPU 版本,请检查路径中的文件,例如10.2 (14C92)/Symbols/System/Library/Caches/com.apple.dyld. 应该有名为dyld_shared_cache_arm64, dyld_shared_cache_armv7s,的文件dyld_shared_cache_armv7

如果你错过了一个,那意味着你没有那个 CPU 版本的符号。

于 2016-12-19T11:20:53.960 回答
6

我只知道很长的路要走:下载 ipsw 文件并使用黑客工具从中提取符号。也许任何人都可以找到更容易的方法?

upd:我发现解决方案更简单

我试图象征 iOS 7.0.1 符号,但不成功(与 iOS 6.1.4 相同的原因)

下一步对我有帮助:

  1. 我编辑了.crash文件并将 iOS 7.0.1 更改为 iOS 7.0
  2. 备份并删除所有内容~/Library/Developer/Xcode/iOS DeviceSupport
  3. 从 Xcode5 运行 symbolicatecrash(其中包含 iOS 7 符号)

忽略一些这些步骤对我来说是不成功的结果。

我希望它对你有帮助。

于 2013-09-30T09:48:14.807 回答
1

您应该能够将您必须的 6.1.something SDK 符号链接到 6.1.4,类似于我在此处的回答(https://stackoverflow.com/a/19383685/473067)。在这种情况下,符号链接当然应该在Xcode5.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs.

我们通常使用足够接近的 SDK 版本来符号化崩溃,但我们使用我们自己的符号化脚本而不是 Xcode 之一,并且符号并不总是匹配,所以 YMMV。

于 2013-10-15T14:51:30.263 回答