iOS 符號化

macOS、tvOS 和 iOS 當機報告顯示發生損毀時,應用程式所有正在執行之執行緒的堆疊追蹤。 堆疊追蹤只包含記憶體位址;不需要瞭解損毀的類別名稱、方法、檔案名或行號。

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

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

Unsymbolicated 損毀

Unsymbolicated 損毀會顯示在 App Center 診斷區段中,因此您甚至可以在上傳符號之前查看一些詳細資料。 這些損毀的遺失符號會顯示在 [unsymbolicated] 索引標籤中。如果上傳遺失的符號,unsymbolicated 損毀群組將會被 symbolicated 損毀群組取代。

尋找套件組合 .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. 在應用程式中心編制符號的索引之後,將會為您 symbolicated 損毀。

React Native iOS 應用程式

若要取得 React Native iOS 檔案的符號檔,請在 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. 觸發 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 不適用於超過 256 MB 的檔案。 使用 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 的應用程式由 Apple 本身重新編譯並套用最新的優化。 如果已啟用 Bitcode,則在存放區中為您的應用程式產生的符號將會與您自己的組建系統中的應用程式不同。

App Center 損毀報告並未完全支援從啟用 bitcode 的應用程式符號化損毀。 在此同時,我們建議您 停用 bitcode。 停用 bitcode 可大幅簡化符號管理,而且目前沒有任何已知的 iOS 應用程式缺點。

停用應用程式的 bitcode

  1. 按一下 [專案導覽] 中的最上層元素,開啟您的專案設定
  2. 移至 [組建設定] 頁面
  3. 搜尋 bitcode
  4. 在結果中,將值從 [是] 變更為 []。
  5. 重建您的應用程式

使用這些簡單的步驟,App Center 損毀報告將會如往常般運作。

取得啟用 bitcode 之應用程式的符號

如果您想要讓 bitcode 保持啟用,可以依照下列步驟下載適當的 dSYM 檔案:

  1. 開啟 Xcode 的召集人
  2. 選取您上傳至 iTunes Connect 的應用程式特定保存
  3. 按一下 [下載 dSYMs] 按鈕。 此步驟會將 Bitcode 編譯的 dSYM 檔案插入原始封存中。
  4. 將符號上傳至 App Center 中的對應應用程式和版本

如果 Xcode 召集人未提供任何新的符號,您必須遵循下列步驟,從 iTunes Connect 入口網站下載 dSYM 檔案:

  1. 在 iTunes Connect 入口網站中選取您的應用程式
  2. 選取頂端的 [活動] 索引標籤
  3. 選取具有遺失符號的應用程式組建版本
  4. 按一下 [下載 dSYM] 連結
  5. 將下載的檔案上傳至 App Center。 此檔案包含 App Center 用來 symbolicated 損毀的必要符號。

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

如果您在上傳符號和停用 bitcode 之後仍會出現 unsymbolicated 當機,可能是因為上傳的 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 是否符合 [debug 符號] 對話方塊中顯示的 uuid:

App Center 會顯示必要符號的 UUID

忽略符號

當 App Center 沒有所有符號檔可完全將損毀報告時,[ Unsymbolicated ] 索引標籤中會列出損毀。如果您可以存取所需的符號,則會從這個頁面上傳。

如果您無法上傳符號,可以在資料表中選取資料列,然後按一下 [略過版本] 按鈕,將它們標示為已 過。 此按鈕會告知 App Center 處理當機,並使用檔案上的符號盡可能完整地將它們。 完成處理之後,它們就會出現 在 [當 機] 索引標籤部分 symbolicated 中。 也取決於標示為「已略過」之相同符號識別碼的新當機,將會略過 [ Unsymbolicated ] 索引標籤,因為它們進入並流經系統。