iOS 符號

重要

Visual Studio App Center 已排定於 2025 年 3 月 31 日淘汰。 雖然您可以繼續使用 Visual Studio App Center,直到它完全淘汰為止,但有數個建議您考慮移轉至的建議替代方案。

深入瞭解支持時程表和替代方案。

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 套件的 ZIP 檔案,以及應用程式的 JavaScript 來源對應。 來源對應應該命名為 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_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",並提供磁碟上檔案的位置。 此呼叫會將檔案上傳至後端記憶體帳戶。 深入瞭解 PUT 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}

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 用來符號化損毀所需的符號。

針對符號問題進行疑難解答

如果您的當機在上傳符號並停用位碼之後仍然未運作,可能是因為上傳的 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 處理當機,並以檔案上的符號盡可能完整地加以符號化。 完成處理之後,它們會出現在部分符號化的 [當機 ] 索引卷標中。 新的當機也相依於標示為忽略的相同符號標識符,將會略過 [ 未布 建] 索引標籤,因為它們會傳入並流經系統。