iOS 符号

macOS、tvOS 和 iOS 故障报告显示发生崩溃时应用所有正在运行的线程的堆栈跟踪。 堆栈跟踪仅包含内存地址;不是了解崩溃所需的类名、方法、文件名或行号。

若要获取已转换的内存地址,需要将 dSYM 包上传到 App Center,其中包含符号化所需的全部信息。 有关符号化的信息,请参阅 Apple 官方 开发人员文档

生成App Center分发服务可以自动生成有效的 dSYM 和源映射文件,并将其 .zip 上传到诊断服务。 如果使用 App Center生成应用并将其自动分发给最终用户,则无需手动获取和上传符号文件。

未收缩的崩溃

"诊断"部分会显示未App Center崩溃,因此即使在上传符号之前,也可以查看一些详细信息。 这些崩溃中缺少的符号将显示在"未收缩"选项卡中。如果上传了缺少的符号,则无符号故障组将替换为符号化崩溃组。

查找 .dSYM 捆绑

  1. 在 Xcode 中,打开 "窗口" 菜单,然后选择"组织 程序"。
  2. 选择" 存档" 选项卡。
  3. 在左侧边栏中选择应用。
  4. 右键单击最新的存档,然后选择"在查找器中显示"。
  5. 右键单击查找 .xcarchive 器中的文件,然后选择"显示包内容"。
  6. 应会看到一个名为 dSYMs 的文件夹,其中包含 dSYM 捆绑包。
  7. 创建 dSYM 捆绑包的 zip 文件。

如果使用 Visual Studio而不是 Xcode,请参阅在哪里可以找到 dSYM 文件以符号化 iOS 崩溃日志? 以查找 dSYM 文件。

上传符号

App Center门户

  1. 登录到 App Center 并选择应用。
  2. 在左侧菜单中,导航到 " 诊断 " 部分,然后选择 " 符号"。
  3. 在右上角,单击 " 上载符号 " 并上传文件。
  4. App Center 对符号进行索引后,将会为您符号化崩溃。

React Native iOS 应用

若要获取 iOS React Native符号文件,请通过 Mac 上的 dSYM 包和应用的 JavaScript 源映射创建 ZIP 文件。 源映射应命名为 index.ios.map 。 以下命令将生成发布生成的源映射:

react-native bundle --entry-file index.ios.js --platform ios --dev false --reset-cache --bundle-output unused.jsbundle --sourcemap-output index.ios.map

App Center API

通过 API 上传符号的过程涉及一系列三个 API 调用:一次在后端分配空间,一次用于上传文件,另一次用于更新上传状态。 第一个 API 调用的正文应设置为 symbol_type Apple

  1. 触发 POSTsymbol_uploads API的请求。 此调用在文件后端为文件分配空间,并返回 symbol_upload_idupload_url 属性。
curl -X POST 'https://api.appcenter.ms/v0.1/apps/{owner_name}/{app_name}/symbol_uploads' \
    -H 'accept: application/json' \
    -H 'X-API-Token: {API TOKEN}' \
    -H 'Content-Type: application/json' \
    -d '{JSON BODY}'
  1. 使用 upload_url 第一步中返回的属性,发出 PUT 带有标头的请求: "x-ms-blob-type: BlockBlob" 并提供文件在磁盘上的位置。 此调用会将文件上传到后端存储帐户。 了解有关 放置 Blob 请求标头 的详细信息。
curl -X PUT '{upload_url}' \
    -H 'x-ms-blob-type: BlockBlob' \
    --upload-file '{path to file}'
  1. PATCH使用第一步中返回的属性向symbol_uploads API发出请求 symbol_upload_id 。 在请求正文中,指定是要将上传的状态设置 (为 "已 committed 成功完成") 上载过程,还是 ("未 aborted 成功完成) "。
curl -X PATCH 'https://api.appcenter.ms/v0.1/apps/{owner_name}/{app_name}/symbol_uploads/{symbol_upload_id}' \
    -H 'accept: application/json' \
    -H 'X-API-Token: {API TOKEN}' \
    -H 'Content-Type: application/json' \
    -d '{ "status": "committed" }'

备注

符号上载 API 不适用于大小超过256MB 的文件。 使用 App Center CLI 上传这些文件。 可以按照我们的 APP CENTER cli存储库中的说明安装 App Center CLI。

App Center CLI

还可使用 CLI 上传符号文件:

appcenter crashes upload-symbols --symbol {symbol file}

位码

Apple 引入了 Bitcode,允许发送到 App Store应用由 Apple 本身重新编译,并应用最新的优化。 如果启用了 Bitcode,应用商店中为应用生成的符号将不同于你自己的生成系统生成的符号。

App Center报告尚不完全支持启用位码的应用的崩溃符号化。 同时,我们建议禁用 位码。 禁用位码可显著简化符号管理,当前对 iOS 应用没有任何已知缺点。

为应用禁用位码

  1. 单击"项目导航器"中的顶级元素打开项目设置
  2. 转到"生成设置"页
  3. 搜索 bitcode
  4. 在结果中,将值从 "是" 更改为 ""
  5. 重新生成应用

通过这些简单的步骤,App Center 崩溃报告将照常运行。

检索启用了 bitcode 的应用的符号

如果要使 bitcode 保持启用状态,可通过以下步骤下载适当的 dSYM 文件:

  1. 打开 Xcode 的管理器
  2. 选择上传到 iTunes Connect 的应用的特定存档
  3. 单击 "下载 Dsym" 按钮。 此步骤会将 Bitcode 编译的 dSYM 文件插入原始存档。
  4. 将符号上传到 App Center 中的相应应用和版本

如果 Xcode 组织程序未提供任何新符号,则必须通过执行以下步骤从 iTunes Connect 门户下载 dSYM 文件:

  1. 在 iTunes Connect 门户中选择你的应用
  2. 选择顶部的 "活动" 选项卡
  3. 选择包含缺少符号的应用的生成版本
  4. 单击 "下载 dSYM" 链接
  5. 将下载的文件上传到 App Center。 此文件包含 App Center 符号化崩溃所需的符号。

符号问题疑难解答

如果在上传符号并禁用 bitcode 后,崩溃仍显示为 unsymbolicated,则可能是因为上传的 dSYM 文件与 App Center 所需的文件不匹配。 当你上传 dSYM 文件时,App Center 会根据其 Uuid 将它们与正确的应用程序版本相匹配。

可以使用名为"云转储"的 CLI 工具仔细检查 dSYM 文件是否具有正确的 UUID。

  1. 在 dSYM 文件中查找 UUID:
dwarfdump --u CrashProbeiOS.app.dSYM
  1. 结果应如下所示:
UUID:ADF53C85-4638-3EFF-A33C-42C13A18E915 (armv7)CrashProbeiOS.app.dSYM/Contents/Resources/DWARF/CrashProbeiOS
UUID:D449E33D-7E74-379D-8B79-15EE104ED1DF (arm64)CrashProbeiOS.app.dSYM/Contents/Resources/DWARF/CrashProbeiOS
  1. 仔细检查返回的 UUID 是否与调试符号对话框中显示的 UUID 匹配:

App Center显示所需符号的 UUID

忽略符号

如果 App Center 没有所有符号文件来完全标志崩溃报告,则故障将列在 " Unsymbolicated " 选项卡中。如果有权访问所需的符号,可以从此页上传这些符号。

如果无法上载符号,可以通过选择表中的行并单击 "忽略版本" 按钮,将其标记为已 忽略。 此按钮指示 App Center 处理崩溃,并使其尽可能完全地处理文件中的符号标志。 完成处理后,它们将出现在部分符号化的 " 崩溃 " 选项卡中。 也依赖于标记为 "已忽略" 的相同符号 Id 的新崩溃将绕过 Unsymbolicated 的选项卡,因为它们进入并流过系统。