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
尋找套件組合
- 在 Xcode 中,開啟 [視窗 ] 功能表,然後選取 [ 組織者]。
- 選取 [ 封存] 索引標籤 。
- 在左側提要欄中選取您的應用程式。
- 以滑鼠右鍵按下最新的封存,然後選取 [ 在尋找器中顯示]。
- 以滑鼠右鍵按兩下 [尋找器]
.xcarchive
中的檔案,然後選取 [ 顯示套件內容]。 - 您應該會看到名為
dSYMs
的資料夾,其中包含您的 dSYM 套件組合。 - 建立 dSYM 套件組合的 zip 檔案。
如果您使用 Visual Studio 而非 Xcode,請參閱 哪裡可以找到 dSYM 檔案來符號化 iOS 損毀記錄? ,以尋找 dSYM 檔案。
上傳符號
App Center 入口網站
- 登入 App Center 並選取您的應用程式。
- 在左側功能表中,流覽至 [ 診斷 ] 區段,然後選取 [ 符號]。
- 在右上角,按兩下 [上傳符號 ] 並上傳檔案。
- 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_type
為 Apple
。
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}'
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}'
- 使用從第一
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
- 在 Xcode 中,按兩下 [項目導覽器] 中的最上層專案,以開啟您的項目設定
- 移至 [建置設定] 頁面
- 搜尋
bitcode
- 在結果中,將值從 [是] 變更為 [否]
- 重建您的應用程式
透過這些簡單的步驟,App Center 當機報告會如往常般運作。
擷取已啟用 bitcode 之應用程式的符號
如果您想要保持啟用 bitcode,您可以依照下列步驟下載適當的 dSYM 檔案:
- 開啟 Xcode 的召集人
- 選取您上傳至 iTunes Connect 的應用程式特定封存
- 按兩下 [下載 dSYM] 按鈕。 此步驟會將 Bitcode 編譯的 dSYM 檔案插入原始封存。
- 將符號上傳至 App Center 中對應的應用程式和版本
如果 Xcode 召集人未提供任何新的符號,您必須遵循下列步驟,從 iTunes Connect 入口網站下載 dSYM 檔案:
- 在 iTunes Connect 入口網站中選取您的應用程式
- 選取頂端的 [活動] 索引標籤
- 選取具有遺漏符號的應用程式組建版本
- 按兩下 [下載 dSYM] 連結
- 將下載的檔案上傳至 App Center。 此檔案包含 App Center 用來符號化損毀所需的符號。
針對符號問題進行疑難解答
如果您的當機在上傳符號並停用位碼之後仍然未運作,可能是因為上傳的 dSYM 檔案不符合 App Center 所需的檔案。 當您上傳 dSYM 檔案時,App Center 會根據其 UUID 將其符合正確的應用程式版本。
您可以使用名為 dwarfdump 的 CLI 工具,再次檢查您的 dSYM 檔案是否有正確的 UUID。
- 在 dSYM 檔案中尋找 UUID:
dwarfdump --u CrashProbeiOS.app.dSYM
- 結果應該如下所示:
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
- 再次檢查傳回的 UUID 是否符合偵錯符號對話框中顯示的 UUID:
忽略符號
當 App Center 沒有所有符號檔可完整符號化當機報告時,當機會列在 [未布建] 索引 卷標中。如果您有這些符號的存取權,則會從此頁面上傳必要的符號。
如果您無法上傳符號,您可以選取資料表中的資料列並按下 [忽略版本] 按鈕,將它們標示為 [忽略]。 此按鈕會告訴 App Center 處理當機,並以檔案上的符號盡可能完整地加以符號化。 完成處理之後,它們會出現在部分符號化的 [當機 ] 索引卷標中。 新的當機也相依於標示為忽略的相同符號標識符,將會略過 [ 未布 建] 索引標籤,因為它們會傳入並流經系統。