【问题标题】:Where to get iOS system symbols for other iOS versions从哪里获取其他 iOS 版本的 iOS 系统符号
【发布时间】:2013-09-01 05:55:38
【问题描述】:

请注意:我要求的是可以下载符号的地方,或者要求 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

我从this 问题中收集到,这是因为崩溃来自 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 机密?

【问题讨论】:

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

标签: ios xcode debug-symbols


【解决方案1】:

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

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

iOS system symbol file(7.0-9.2)

iOS system symbol file(9.2.1-10.2)

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

如何使用

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

Code Type: ARM-64

OS Version: iOS 10.2 (14C82)

这意味着您需要10.2 (14C82)system 的arm64version 符号。

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

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

符号列表

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

这里是从7.010.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 版本的符号。

【讨论】:

  • 我有一个“旧”iPad,它给了我 arm64 符号,Apple 评论员给了我与我拥有的相同 iOS 版本但针对 arm64e 架构的崩溃报告,所以我无法符号化。你的符号收藏救了我的命!
【解决方案2】:

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

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

我尝试用符号表示 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 符号)

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

希望对你有帮助。

【讨论】:

  • 这个 hack(第 1 步到第 3 步)帮助我从 iOS 7.0.2 的崩溃日志中获得了一些有意义的数据,这些数据让我在我的头撞在砖墙上几个小时之后。远非完美,但至少可以获得一些符号,这将作为权宜之计,直到 Apple 实际发布此数据。
【解决方案3】:

您应该能够将您拥有的 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。

【讨论】:

  • 很高兴知道这一点。正如你所说,它并不完美,但最好的猜测符号肯定胜过没有符号 - 当/如果我能掌握正确的符号时,很容易破坏符号链接。
猜你喜欢
  • 2017-11-26
  • 2019-03-25
  • 1970-01-01
  • 2019-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-07
相关资源
最近更新 更多