先確認下載的 ZIP 與 Package.swift 中 binaryTarget 的 URL 指向同一份、未被替換的發布產物,再對那個 ZIP 重新計算 checksum 並更新宣告;若歸檔已重新打包,應發布新版本,不要把清除快取或修改鎖定檔當成通用修復。Apple 說明 checksum 用來驗證遠端二進位目標的歸檔,計算時的對象是歸檔檔案,而非解壓後的內容。Apple checksum 說明

適合接入遠端 XCFramework、需要定位校驗失敗來源的 App 開發者。
適合負責發布二進位 Swift Package、需要避免既有 URL 對應內容遭替換的套件維護者。
也適合維護 Xcode 27 遠端建構或 CI 的開發者,確認錯誤能否在固定環境重現。

先辨別 checksum 錯誤發生在哪個階段

checksum 不匹配通常指向「宣告的校驗值」和「實際取得的二進位歸檔」不一致,但錯誤發生在依賴流程的哪個位置,會決定下一步該查什麼。不要看到套件建構失敗就先改 Swift 原始碼;先讀取錯誤訊息中的套件名稱、版本、下載地址與失敗階段。

Swift Package Manager 的遠端二進位 target 透過 binaryTarget 的名稱、URL 與 checksum 描述依賴;Apple 對這些參數的定義可見 binaryTarget 文件。這類宣告所驗證的是 URL 取得的歸檔,通常是承載 XCFramework 的 ZIP,而不是解壓後的 .xcframework 資料夾。

觀察到的失敗 優先檢查 不宜先做的事
依賴解析或取得原始碼失敗,尚未出現二進位校驗訊息 套件來源、版本解析結果及網路請求是否成功 直接重算二進位 checksum
明確顯示 checksum 不符 manifest 的 URL、宣告值與該 URL 實際回傳的 ZIP 只修改 Package.resolved 或反覆重試
checksum 通過,後續編譯或連結失敗 XCFramework 的平台切片、架構與建構設定 把編譯錯誤當成校驗錯誤處理

這種區分也能避免把網路不可達、URL 回應錯誤或二進位框架內容不適用,混為同一種問題。Apple 的二進位框架分發說明可用來核對套件應如何描述及提供二進位框架;多平台產物則可參照建立多平台二進位框架套件的文件。

App 開發者:核對專案實際取得的依賴

對使用者而言,第一個目標不是猜 checksum 為何改變,而是證明目前專案解析到哪個版本、manifest 指向哪個地址,以及失敗建構實際取得什麼內容。只要這些證據還沒對齊,就不應以清快取後暫時成功作為修復完成的依據。

Swift Package checksum 和下載的 ZIP 不一致時,先查哪裡?

先找出錯誤所屬的套件與版本,再核對該版本的 Package.swift:binaryTarget 名稱是否對應預期產物、URL 是否正確,以及 checksum 是否來自該 URL 目前提供的歸檔。若有重新導向、代理或下載中介,應記錄最後取得的地址與下載檔案,不能只憑 manifest 中的原始 URL 推定兩者相同。

Apple 建議使用 swift package compute-checksum 計算歸檔校驗值;因此要對實際取得的 ZIP 執行計算,而不是對解壓後的資料夾計算。checksum 文件列出這項工具與校驗對象。命令可按實際檔名執行:

swift package compute-checksum path/to/artifact.zip

若結果與 Package.swift 的宣告不同,應先保留錯誤訊息、下載地址和 ZIP,再判斷是下載到了錯誤版本,還是發布端的檔案與 manifest 不一致。切勿把「本機快取裡有另一份舊檔」當作產物正確性的證明。

更新依賴後仍失敗的診斷

更新版本後,仍須確認專案真正解析到新版本,而非某個分支、標籤或鎖定狀態仍指向舊宣告。Xcode 的解析結果、套件版本紀錄與建構日誌應放在一起檢視;如果下載 URL 導向的檔案沒有變,單純改版本號不會自動修正 checksum。如果 URL 下的內容變了,則應追查發布端,而不是反覆重設本機依賴快取。

清理快取只適合作為「排除本機殘留狀態」的診斷手段,並不能修正伺服器上錯誤的 ZIP,也不能使過期 checksum 變正確。操作前先保留錯誤日誌與解析結果;清理後以同一專案狀態再次取得依賴,若錯誤仍可重現,就回到 URL、歸檔與宣告逐項比對。

套件維護者:固定 URL 與發布產物的對應

維護者要處理的核心風險,是計算 checksum 之後又重新壓縮、覆蓋或替換 ZIP,卻保留原有 URL 與版本宣告。只要同一地址在不同時間回傳不同位元內容,使用者就可能拿到與 manifest 校驗值不符的檔案,即使解壓後看起來包含相同框架也無法通過驗證。

binaryTarget 的 checksum 應對哪個檔案計算?

對 binaryTarget 的 url 實際提供的歸檔計算,通常是承載 XCFramework 的 ZIP。應在發布流程中先完成歸檔,對最終待上傳檔案計算 checksum,再發布該檔案並將輸出值寫入對應版本的 Package.swift。之後若重新壓縮或替換 ZIP,即使框架內容未刻意變動,歸檔位元內容也可能不同,原 checksum 就不再代表新檔案。

注意:checksum 對應的是歸檔本身。若發布後才重新打包,請將新 ZIP 視為新的發布產物,不要假設解壓內容相同就能沿用舊值。

比較穩妥的發布審查方式,是把歸檔生成、checksum 計算、檔案上傳及 manifest 更新視為同一組相互核對的變更。Apple 的二進位框架套件分發文件可供維護者比對分發方式;確認多平台產物時,也要確保歸檔內包含預期的平台內容,而非只驗證校驗值。

已發布 URL 對應的檔案被替換時

若舊版本的 URL 已被覆蓋,應恢復原有檔案,或發布具有新版本識別的新產物,並同步更新 manifest 與依賴使用方式;不要靜默替換既有版本的下載內容。這可讓已經鎖定舊版本的專案仍有可預期的取得路徑,也避免新舊分支共用指向可變內容的 URL。

每個版本的 manifest、歸檔和下載位置都應一一對應。發布審查時,除確認 checksum 相符,也應確認下載地址確實指向本次準備發布的檔案,而不是同名舊檔、暫存檔或其他分支的產物。需要區分二進位框架內容與套件交付方式時,可再核對 Apple 的多平台二進位框架說明。

遠端建構維護者:用固定狀態重現並驗收

本機能下載、遠端 Mac 卻失敗,並不能單獨證明 Xcode 27 有普遍缺陷。遠端環境可能使用不同的提交、依賴解析狀態或請求路徑,也可能受到 URL 重新導向、代理回應或下載產物差異影響。Apple 的 CI 中建構 Swift 套件與使用它們的 App 文件說明持續整合中的套件建構情境;實際診斷仍須以建構日誌和取得的產物為證。

遠端 Mac 下載到正確版本的驗證方式

先記錄遠端任務使用的倉庫提交、套件版本與依賴解析狀態,再從失敗日誌找出請求 URL 和錯誤階段。接著在同一環境取得該 URL 回傳的 ZIP,對照 manifest 的 checksum。若本機與遠端取得的檔案不同,應查地址解析、重新導向、代理或發布內容;若檔案相同但 checksum 仍不符,則回查 manifest 所聲明的值與發布流程。

以下檢查清單可用來決定是否已找到可驗證的修復,而不是只讓某一次建構暫時通過:

  • [ ] 記下錯誤中的套件名稱、版本、失敗階段與請求 URL。
  • [ ] 確認 Package.swift 的 binaryTarget 名稱、URL 和 checksum 屬於同一個版本。
  • [ ] 保存失敗建構實際下載的 ZIP,確認不是只比對解壓後的資料夾。
  • [ ] 對保存下來的歸檔執行 swift package compute-checksum,並與 manifest 宣告逐字核對。
  • [ ] 確認遠端建構使用預期的倉庫提交與依賴解析狀態。
  • [ ] 若更新了產物,使用新的固定版本或不可變地址,並保留舊版的回退取得方式。
  • [ ] 在乾淨的建構環境使用同一提交重新取得依賴,確認修復不依賴偶然命中的本機快取。

若錯誤只在某個遠端建構流程出現,應保留該次工作使用的請求地址、回傳檔案與依賴狀態,再與本機建構逐項比對。若兩邊使用不同產物,先解決分發路徑;若相同產物導致相同錯誤,才回到 checksum 聲明或歸檔本身處理。Xcode 27 的工具鏈變更應以官方版本說明核對;單一環境的校驗失敗,不足以推論為整個版本的共同缺陷。

用發布責任選擇修復方式

App 開發者、套件維護者與 CI 負責人,雖然都可能看到 checksum 錯誤,實際需要更動的地方卻不同。先按手上的證據選擇責任範圍,可以避免使用者自行改寫上游 manifest,也避免維護者把發布錯誤推給遠端建構環境。

  • 使用者已證明下載檔與發布端預期檔案不同:先檢查 URL、重新導向及代理回應,確認遠端實際取得何種產物。
  • 維護者確認 ZIP 與 manifest checksum 不符:重新計算實際發布 ZIP 的 checksum,更新 manifest;如果舊版本已發佈,優先發布新版本,避免覆蓋舊 URL。
  • 遠端環境的檔案與本機不同:固定相同提交與依賴狀態,再查建構環境的請求路徑和產物來源。
  • checksum 已通過但編譯仍失敗:離開校驗排查,轉而檢查 XCFramework 的平台內容及後續編譯或連結錯誤。

這些分流比直接清理快取更能保留問題證據,也能讓修復回到有權更改的環節。修復驗收的終點不是某台開發機成功一次,而是固定提交在乾淨環境取得預期歸檔、通過校驗,並完成後續建構。

若目前只能靠個人 Mac 手動下載、檢查和重跑,這種方式有本機快取難以重現、無法長時間待命、也不易確認團隊遠端環境取得相同產物等限制;但如果工作負載長期穩定、需要特定實體介面,或本來就有合適的 Mac,購買或沿用自有設備可能更合適。若缺少可用的 macOS 與 Xcode 環境,只需要按週期建立遠端驗證環境,透過 RUVCLOUD 租用 Mac 可省去專門購買一台主機的前置成本,並用於固定提交的依賴下載與建構驗收;可先從RUVCLOUD 的方案頁面了解可選方案,再參閱RUVCLOUD 的訂購流程,評估遠端環境是否適合自己的驗證流程。最後仍應以目標專案在乾淨環境中的重現結果作決定,而不是把更換建構主機當成 checksum 錯誤本身的修復。