共用方式為


iOS 符號

這很重要

Visual Studio App Center 於 2025 年 3 月 31 日淘汰,但分析和診斷功能除外,這些功能將持續支援到 2026 年 6 月 30 日。 瞭解更多資訊。

macOS、tvOS 和iOS 當機報告會顯示發生當機時應用程式所有執行中線程的堆疊追蹤。 堆疊追蹤只包含記憶體位址,而非瞭解崩潰需要的類別名稱、方法、檔案名稱或行號。

若要取得轉譯的記憶體位址,您需要將 dSYM 套件上傳至 App Center,其中包含符號化所需的所有資訊。 您可以從 Apple 的官方開發人員檔深入了解符號。

App Center 組建和散發服務可以自動產生有效的 dSYM 和來源地圖 .zip 檔案,並將該檔案上傳到診斷服務。 如果您使用App Center來建置並自動將應用程式散發給使用者,則不需要手動取得並上傳符號檔。

未符號化的崩潰報告

未符號化的當機紀錄會顯示在 App Center 的診斷部分,因此即使在上傳符號之前,您仍可查看一些詳細資訊。 這些崩潰的遺漏符號會顯示在 [未符號化] 索引卷標中。如果上傳遺漏的符號,則未符號化的當機群組將會由符號化的當機群組取代。

尋找 .dSYM 組合套件

  1. 在 Xcode 中,開啟 [視窗] 功能表,然後選取 [ 組織者]。
  2. 選取 封存 標籤。
  3. 在左側提要欄位中選取您的應用程式。
  4. 以滑鼠右鍵按下最新的封存,然後選取 [ 在 Finder 中顯示]。
  5. 以滑鼠右鍵按兩下 .xcarchive Finder 中的檔案,然後選取 [顯示套件內容]。
  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 應用程式

要取得 React Native iOS 檔案的符號檔,在您的 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_typeApple

  1. POST觸發一個對symbol_uploads API的請求。 此呼叫會在後端為您的檔案配置空間,並傳 symbol_upload_id 回 和 upload_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",並提供您的檔案在磁碟上的位置。 此呼叫會將檔案上傳至後端記憶體帳戶。 深入瞭解 PUT Blob 要求標頭
curl -X PUT '{upload_url}' \
    -H 'x-ms-blob-type: BlockBlob' \
    --upload-file '{path to file}'
  1. 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}

Bitcode

Apple 引進了 Bitcode,可讓傳送至 App Store 的應用程式自行重新編譯,並套用最新的優化。 如果已啟用 Bitcode,在市集中為您的應用程式產生的符號會與您自己的建置系統不同。

App Center 損毀報告尚未完全支援來自啟用 Bitcode 的應用程式損毀的符號化處理。 同時,建議您 停用 bitcode。 停用 bitcode 可大幅簡化符號管理,目前 iOS 應用程式沒有任何已知的缺點。

為應用程式停用 bitcode

  1. 在 Xcode 中,按兩下 [項目導覽器] 中的最上層元素,以開啟項目設定
  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 後仍然顯示未符號化,可能是因為上傳的 dSYM 檔案不符合 App Center 所需的檔案。 當您上傳 dSYM 檔案時,App Center 會根據其 UUID 將其比對到正確的應用程式版本。

您可以使用名為 dwarfdump 的 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 沒有所有符號檔以充分地符號化損毀報告時,這些損毀會被列在 未符號化 標籤中。如果您有存取權,則可以從此頁面上傳所需的符號。

如果您無法上傳符號,您可以選取資料表中的資料列並按下 [忽略版本] 按鈕,將它們標示為 [忽略]。 此按鈕會指示 App Center 處理損毀,並以檔案上的符號盡可能完整地加以符號化。 完成處理之後,它們會出現在 [ 當機 ] 索引標籤中,部分符號化。 也依賴於那些標記為忽略的相同符號ID的新當機,在進入並流經系統時,將會略過未符號化標籤。