遠端 Mac CI 的 xcresult 怎麼匯出?2026 指南

本文協助遠端 Mac CI 維護者設定可追蹤的 xcresult 路徑,並避免測試失敗時遺失結果包。你會看到產物策略比較、上傳與下載檢查步驟,以及供 CI、測試和平台負責人使用的決策條件。

遠端 Mac CI 的 xcresult 怎麼匯出?2026 指南

目錄

本週建議:先在 xcodebuild test 指定獨立的 .xcresult 路徑,再把整個結果包設為工作流程產物;測試失敗時也要執行上傳,最後實際下載並開啟驗證。這適用於你需要在遠端 Mac CI 執行 Xcode 測試,並在工作結束後取回診斷資料的情況。

CI 維護者:確保測試結果離開遠端 Mac 後仍可追蹤、取回。
測試工程師:從結果包檢查失敗細節、測試日誌或專案需要的覆蓋率。
發布與平台負責人:為產物訂定可追溯的命名、留存與存取界線。

遠端 Mac CI 的 xcresult 匯出,先確認結果由測試生成

xcresult 不是一般建置日誌,也不能直接當成歸檔發布檔。你要先確認工作流程真的執行了測試,再判斷測試結果包是否生成;Apple 說明 xcodebuild 執行測試會產生包含測試結果等資訊的結果包,xcresulttool 則提供檢查入口。Apple 的 Xcode 測試結果說明也列出如何在 Xcode 中檢視及解讀結果。

Apple 在 Xcode 11 的發布說明中介紹了測試結果包。這項版本資訊有助於釐清概念來源,但你仍應按目前使用的 Xcode 版本核對命令參數與可用檢查方式。Xcode 11 發布說明

先用這個對照判斷輸出策略。評級是依可追溯性、覆寫風險及故障診斷需要所做的工程判斷,不代表平台效能測試。

輸出策略 可追溯性 覆寫風險 適合情況
專用結果目錄,按執行與工作命名 高 低 長期維護 CI、需要比較重跑結果
固定路徑放在來源目錄內 低 高 僅適合短暫本機驗證,不建議作為交付路徑
多個平行工作共用同一路徑 低 高 應改為每個工作各自指定結果包位置

也要分清三種不同交付物:建置日誌通常提供命令輸出;.xcresult 用於檢視測試結果及相關診斷資料;歸檔產物則服務於後續簽署或發布流程。Apple 的命令列工具參考可用來核對 xcodebuild 與 xcresulttool 的命令介面。不要因為 CI 顯示「建置完成」,就假定工作流程已產生可供測試人員使用的結果包。

建置工程師:為每個測試工作指定獨立路徑

指定結果包路徑的作用,是讓你知道某一個測試工作把結果寫到哪裡,並讓上傳步驟可以選取同一個位置。Apple 的命令列工具文件列出 -resultBundlePath 這項參數;實際可用的選項仍以你正在使用的 Xcode 文件為準。xcodebuild 命令列工具參考

RESULT_ROOT="/path/outside-repo/results"
RUN_KEY="replace-with-run-job-attempt"
RESULT_PATH="$RESULT_ROOT/$RUN_KEY.xcresult"

mkdir -p "$RESULT_ROOT"
xcodebuild test \
  -scheme "$SCHEME" \
  -destination "$DESTINATION" \
  -resultBundlePath "$RESULT_PATH"

執行前,將 RESULT_ROOT、RUN_KEY、SCHEME 與 DESTINATION 換成你的 CI 實際值。把結果目錄放在不會被來源清理流程刪除的位置,並以執行識別、工作名稱及重試識別組成唯一名稱;不要讓新測試沿用已存在的結果包路徑。若測試會平行執行,應分配彼此獨立的目錄,而不是只靠工作流程結束後再重新命名。

工作流程維護者:測試失敗後仍要執行上傳

GitHub Actions 的工作流程產物可用來保存及下載建置或測試輸出;官方文件也說明上傳步驟可依路徑選取檔案、目錄及符合條件的項目。保存工作流程資料的官方說明明確區分產物與快取用途:你要取回測試結果時,應建立工作流程產物,而不是把快取當成留存機制。

工作流程順序至少要包含測試、結果包上傳和失敗診斷;最關鍵的是,上傳不能只在測試成功後才執行。GitHub 的狀態檢查運算式文件說明了步驟執行條件;依你的取消與失敗處理政策,為上傳步驟設定能在測試失敗後繼續執行的條件。若使用 !cancelled() 這類條件,也要在目標工作流程中測試失敗及取消時的實際行為。

設定時特別檢查以下情況:

測試工程師:下載後確認結果包可讀

工作流程頁面顯示有產物,不等於結果包內容完整或可讀。從該次執行記錄下載對應產物後,先確認解壓縮結果中有完整的 .xcresult,再於 macOS 使用 Xcode 開啟,或以 xcresulttool 檢查摘要及測試項目。Apple 的測試結果解讀指南說明如何透過 Xcode 檢視結果;命令列檢查方式則應對照所用版本的工具文件。

你可以先執行摘要檢查,再依專案的診斷需求查看測試清單:

xcrun xcresulttool get test-results summary --path "$RESULT_PATH"
xcrun xcresulttool get test-results tests --path "$RESULT_PATH"

檢查的重點不是命令能否執行而已,而是結果是否足以支援下一步判斷:測試摘要能否識別失敗工作、失敗資訊是否指出測試項目與錯誤、專案要求的覆蓋率或附件是否確實存在。若結果包能開啟但欠缺必要內容,回頭檢查測試方案及收集設定;若無法開啟,先確認下載與解壓縮後的目錄完整性。

CI 維護者:用決策條件定位遺失的結果

遇到「有測試失敗但沒有結果包」時,依證據走分支,不要先假設是上傳平台故障:

GitHub 提供從工作流程執行下載產物的操作說明,下載後仍需由你確認檔案範圍及內容完整性。下載工作流程產物指南適合用來核對介面操作;命令列或自動化下載方式則應配合團隊採用的工作流程確認。

測試工程師常見問題

測試命令非零結束時,結果包一定會寫完嗎?

不一定。測試失敗與結果包是否完整,是兩件要分開驗證的事;上傳步驟只在命令結束後選取檔案。你應分別檢查測試結束時的檔案、上傳步驟的執行狀態,以及下載後能否開啟。節點中斷或工作流程取消也要另行驗收,不能只用一般測試失敗代替。

上傳目錄和上傳多個檔案有什麼差別?

.xcresult 應作為完整結果包交付,因此先確認上傳設定會選到結果包本身及其內容。多個路徑或萬用字元可能改變產物中的目錄層級;若測試人員下載後找不到預期位置,就要對照上傳路徑、共同根目錄和實際產物結構,而非假定下載操作遺失了檔案。

結果包裡的測試日誌、附件要不要開放給所有人?

不宜預設公開。結果包可能包含專案內部的測試細節、環境資訊或附件;由平台負責人依除錯、稽核及發布需求設定存取範圍。產物名稱可使用工作流程執行、提交識別及工作名稱,避免把敏感資料直接寫進名稱,也不要在公開討論區散布完整結果包。

平台負責人:命名、留存與權限要可稽核

命名應讓接手的人不打開內容也能辨識是哪次工作流程、哪個提交及哪個測試工作產生的結果;不同重試也要能區分。提交識別可用團隊慣用的短識別方式,但不要只用可重複的固定名稱,否則重跑可能覆蓋先前證據。

留存期限依專案的除錯週期、發布稽核要求與儲存政策訂定,並在團隊文件中寫明由誰調整、在哪裡確認。存取權限則依產物內容設定:若測試附件涉及內部資料,就不要把下載連結視為公開檔案。GitHub 的產物文件說明產物用於在工作流程中保存與取回資料;具體留存和權限行為請以你的平台設定及官方文件為準,不應引用未核實的預設天數。若你在遠端 Mac 的連線、權限或環境交付上需要協助,可參考VPSMAC 技術支援說明,並將 CI 執行識別與已確認的錯誤階段一併整理,方便釐清問題邊界。

發布負責人:成功與失敗工作都要完成端到端驗收

部署前至少走完兩種驗收情境:先讓測試成功,確認結果包生成、上傳、下載及開啟;再讓測試按預期失敗,確認上傳仍執行,並能從下載結果辨識失敗資訊。驗收紀錄應附上工作流程執行識別、結果包路徑及檢查結果,避免只保存一張顯示工作失敗的截圖。

如果成功工作有產物、失敗工作沒有,優先檢查上傳步驟是否被前一步的失敗狀態略過;如果兩者都沒有,先回查測試是否執行及路徑是否匹配;如果可以下載但不能開啟,就檢查選取範圍與交付完整性。這種按證據區分問題來源的方式,能避免把生成、上傳、下載和讀取故障混成同一類問題。

若你目前靠 Linux CI 承擔 Xcode 測試,限制是無法直接執行 macOS 工具鏈;若共用本地 Mac,睡眠、重啟或有人佔用可能中斷排程;若購置專用硬體,則要承擔前期支出及持續維護。對需要按階段補足測試能力、又希望在真實 macOS 環境驗收結果的團隊,租用 VPSMAC 遠端 Mac 可作為較靈活的執行選項;你可先查看 VPSMAC 方案與租用資訊,再依建置頻率與維護責任決定。若工作長期高負載或必須直接連接特定實體設備,自購 Mac 可能更合適。

常見問題

xcodebuild 的測試結果要怎麼存到指定位置?

在測試命令加入 -resultBundlePath,並把路徑指向專用的 .xcresult 位置。路徑應能區分工作流程執行、工作與重試,不要放在會被清理的來源目錄;平行測試也要各用不同路徑,避免結果互相覆蓋。

遠端 Mac CI 有產生 xcresult,為什麼工作流程產物裡找不到?

先確認測試步驟確實執行,再檢查上傳步驟是否因前一步失敗而被跳過。接著比對實際結果包路徑與上傳範圍;結果包是目錄時,若只選到內部檔案或不相符的萬用字元,可能沒有把整個結果包交給產物步驟。

GitHub Actions 的 xcresult 產物要在哪裡下載和開啟?

從工作流程執行記錄的產物區下載對應項目,確認下載後仍保有 .xcresult 結果包,再於 macOS 使用 Xcode 或 xcresulttool 檢查。若下載的是壓縮檔,先解壓縮到可讀寫位置;只確認產物名稱出現,不能證明內容可讀。

測試失敗時要怎樣避免 Xcode 結果包被丟掉?

把結果上傳設為測試失敗後仍會執行的步驟,並確認測試命令結束前已寫出結果包。取消工作流程、節點中斷或結果尚未完整寫入是另一類情況,應另行驗收;若沒有符合上傳範圍的檔案,應讓工作流程明確報錯,而非靜默略過。