iOS 符號
macOS、tvOS 和 iOS 當機報告會在發生當機時顯示應用程式所有執行中線程的堆疊追蹤。 堆疊追蹤只包含記憶體位址;不是瞭解當機所需的類別名稱、方法、檔案名或行號。
若要取得翻譯的記憶體位址,您需要將 dSYM 套件上傳至 App Center,其中包含符號化所需的所有資訊。 您可以從 Apple 的官方開發人員檔深入瞭解符號。
App Center 組建和散發服務可以自動產生有效的 dSYM 和來源對應 .zip
檔案,並將檔案上傳至診斷服務。 如果您使用 App Center 來建置應用程式並自動散發給終端使用者,則不需要手動取得並上傳符號檔。
未受限制的當機
Unsymbolicated 當機會顯示在 App Center 診斷區段中,讓您即使在上傳符號之前,也可以檢視一些詳細資料。 這些損毀的遺漏符號會顯示在 [未隔離] 索引標籤中。如果上傳遺漏的符號,則未隔離的當機群組將會由符號化損毀群組取代。
尋找套件 .dSYM
組合
- 在 Xcode 中,開啟 [視窗] 功能表,然後選取 [ 召集人]。
- 選取 [ 封存] 索引標籤。
- 在左側提要欄位中選取您的應用程式。
- 以滑鼠右鍵按一下最新的封存,然後選取 [ 在 Finder 中顯示]。
- 以滑鼠右鍵按一下
.xcarchive
Finder 中的檔案,然後選取 [ 顯示套件內容]。 - 您應該會看到名為
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
Bitcode 是由 Apple 引進,可讓應用程式傳送至App Store由 Apple 本身重新編譯,並套用最新的優化。 如果已啟用 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 簽署損毀所需的符號。
針對符號問題進行疑難排解
如果您的當機在上傳符號並停用 bitcode 之後仍顯示為未受限制,可能是因為上傳的 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 處理當機,並盡可能使用檔案上的符號來將它們符號符號化。 完成處理之後,它們會出現在 [ 當機 ] 索引標籤中,部分符號化。 同樣取決於標示為忽略之相同符號識別碼的新損毀,將會略過 [ 未區分 ] 索引標籤,因為它們傳入並流經系統。