時間表: Electron 44 已於 2026 年 8 月 25 日正式發布,版本日期可由官方發布公告核對。本週建議:先不要把所有工作搬到 Mac;保留 Windows 或 Linux 處理日常開發,另設一個真實 Mac 節點完成 macOS 最終打包、代碼簽名、公證、票據裝訂與安裝驗證。

這就是 Electron 44 macOS 打包的判斷標準:產生一個檔案,不等於產生可交付的 macOS 版本。若目標是讓使用者安裝、通過 Gatekeeper 檢查並持續更新,最後一段發布鏈路應在真實 Mac 上執行。

本文適合主要在 Windows 或 Linux 開發 Electron 桌面程式、首次準備發布 macOS 版本的工程師。需要把 Electron Forge、簽名與公證接入自動化流水線的 DevOps、發布工程師,以及正在評估購買 Mac、短期租用遠端 Mac 或保留專用節點的技術負責人,也可以直接依照本文驗收。

01

產物與可交付版本的分界

Electron 官方把分發流程拆成建置、代碼簽名、公證與使用者端驗證等不同責任。可先在 Windows 或 Linux 產生未簽名測試檔案,但這只能回答「程式有沒有被打包」,不能回答「使用者能否安心安裝」。完整分發流程可參考Electron 分發總覽

我們在值班時先把流程分成以下幾層:

流程層 Windows / Linux 節點 真實 Mac 發布節點 驗收結果
原始碼與通用測試 編碼、Lint、單元測試 可讀取固定提交版本 測試結果與提交識別碼一致
macOS 打包 可作有限度的跨平台嘗試 依目標架構重新打包 產物含正確平台資源
代碼簽名 不承載發布私密金鑰 使用受控鑰匙圈與簽名身份 簽名資訊可被驗證
公證與票據裝訂 不作最終判斷 提交、等待、裝訂、離線檢查 可交付安裝包
安裝與更新 可做通用測試 以乾淨使用者帳戶驗證 安裝及更新路徑可重現

Electron 44 專案能否在 Windows 上「生成 macOS 安裝包」,取決於工具與專案內容;但若要公開發布,判斷不能停在跨平台建置成功。

02

純 JavaScript 與原生依賴的差異

純 JavaScript 專案通常較容易先在非 Mac 節點完成通用建置。問題會在加入 Node 原生模組、輔助二進位檔、系統擴充功能或平台專用資源後放大。這些依賴可能只提供 darwin-arm64darwin-x64,或另外提供通用二進位檔;不能把 win32linux 的安裝結果直接視為 macOS 結果。

Electron 的平台與架構安裝說明應與每個依賴的發行檔清單一併核對。實務上,我們會要求每次發布記錄:

  • 鎖定檔與提交識別碼。
  • 原生模組實際解析到的目標架構。
  • 全新安裝依賴後的重新建置結果。
  • 在乾淨 Mac 工作區載入模組的結果。
  • Apple Silicon 與 Intel 目標是否有明確分流。

遠端 Mac 的第一項職責不是把其他系統產生的 dist 目錄複製過來,而是重新驗證真實目標架構。若只在開發機保留快取,CI 可能通過,使用者啟動時才在原生模組載入階段失敗。

03

簽名身份與公證憑據

面向 macOS 使用者分發時,Electron 建議對應用程式進行代碼簽名;相關限制可在Electron 代碼簽名文件核對。這裡至少涉及 Developer ID、Hardened Runtime、entitlements、Keychain 私密金鑰與執行帳戶。

Electron Forge 的 macOS 指南把簽名設定接到建置流程中;其設定與 @electron/osx-sign 的欄位可分別參考Forge macOS 簽名指南@electron/osx-sign 類型說明。這些文件不是叫我們把所有憑據寫入 CI 變數,而是提醒發布環境需要清楚管理身份和權限。

我們會採用以下邊界:

  • 建置帳戶與發布帳戶分開。
  • 私密金鑰只進入受控鑰匙圈,不放在一般工作目錄。
  • Team ID、Bundle ID、證書名稱與密鑰檔名使用 CI 秘密變數或受控檔案注入。
  • entitlements 放在版本控制中,但不把私密金鑰放入倉庫。
  • 任務完成後清理暫存憑據,保留可追蹤的簽名輸出與日誌。

Keychain、登入項和自動更新是否正常,往往與簽名身份的持續性有關。這也是為什麼「在開發者電腦手動簽過一次」不能取代可重現的發布節點。

04

公證、票據與安裝驗證

簽名完成後,仍要處理公證。Apple 說明可透過公證服務處理 macOS 軟體分發,並可使用 notarytool 或 Notary API;流程細節見Apple 公證工作流說明Notary API 文件

這幾個狀態必須分開記錄:

  • 上傳請求已建立。
  • 公證服務回覆成功或失敗。
  • 使用提交識別碼取得結果。
  • 對通過的產物執行票據裝訂。
  • 在沒有網路的情況下驗證裝訂狀態。
  • 以全新使用者帳戶安裝並啟動。
  • 執行實際自動更新流程。

上傳成功不代表公證通過。公證通過也不代表票據已裝訂,更不代表下載後的安裝包能在乾淨帳戶正常啟動。認證資訊、Team ID、密鑰檔案、Bundle ID、提交識別碼、主機名稱與路徑,都應使用 CI 變數或 <PLACEHOLDER> 形式,避免把真實憑據寫進範例和日誌。

05

混合 CI 與發布節點隔離

我們建議把流水線拆成兩段。Windows 或 Linux 節點執行 Lint、單元測試、通用建置與測試報告;遠端 Mac 只接收固定版本的原始碼或已驗證製品,然後執行 macOS 打包、簽名、公證、票據裝訂與冒煙測試。

傳遞內容至少包含提交識別碼、鎖定檔雜湊、輸入檔案校驗值和上游測試結果。Mac 節點不應在任務中隨意重新抓取分支,否則兩個節點可能使用不同版本的原始碼。Forge 的建置生命週期文件可用來對照各階段責任。

節點方案 適合情況 主要風險 我們的建議
短期遠端 Mac 低頻發布、首次導入、驗證流程 每次需重建環境與檢查憑據 先跑通一條完整發布鏈
長期專用 Mac 固定發布、需保留快取與排程 節點與憑據成為長期資產 加入重啟恢復與權限稽核
共享 Mac Runner 任務量不穩定、團隊共用 工作目錄、鑰匙圈與任務互相污染 只有在隔離機制清楚時採用
雙軌發布 關鍵產品、需要回退能力 維護兩套設定 保留另一條可切換路徑

發布節點不必為每個通用測試長時間佔用。Electron macOS 發布節點是否需要長期運行,應由發布頻率、憑據風險、排程需求和回滾要求決定,而不是由「有沒有 Mac」單獨決定。

06

生產制品驗收表

購買、租用或自建前,先用同一份驗收條件測試。CI Job 顯示成功,只能算流程訊號,不能算生產制品合格。

驗收項目 必查內容 通過條件
全新工作區 重新取得固定提交版本與鎖定檔 不依賴開發者本機快取
原生模組 安裝、重新建置、啟動載入 目標架構與執行平台一致
簽名 身份、entitlements、Hardened Runtime 簽名驗證無錯誤
公證 提交結果與原始日誌 成功狀態可由提交識別碼追查
票據 裝訂後離線檢查 下載後仍能驗證
乾淨安裝 新使用者帳戶、首次啟動 不依賴開發者設定
自動更新 上一版到新版本的實際流程 更新、重啟與回滾路徑清楚
重啟恢復 鑰匙圈、帳戶、常駐任務 節點重啟後能依文件恢復

我們也會保留上一個可發布制品作為回滾入口。重啟後要重新檢查鑰匙圈解鎖狀態、建置帳戶、常駐任務和工作目錄權限。若這些項目沒有記錄,即使第一次簽名成功,下一次節點重啟後仍可能中斷發布。

07

方案選擇與遠端 Mac 導入

決策條件 優先方案 原因
只需首次發布或低頻更新 短期遠端 Mac 先驗證真實簽名、公證與安裝結果
發布頻率固定且有排程 長期專用節點 鎖定環境、權限與恢復程序
通用測試量大、Mac 任務少 混合 CI 避免 Mac 被 Lint 和單元測試佔用
憑據風險高、產品不能停發 雙軌方案 一條路徑失效時仍可切換
需要實體 USB 或特殊周邊 本地或專用 Mac 遠端節點未必能提供所需介面

若團隊正在評估遠端節點,可先查看 MESHLAUNCH 的遠端 Mac 方案,再以自己的 Electron 專案跑完整驗收,不要只依照規格表做結論。需要固定的 Apple Silicon 測試環境時,也可對照 Mac mini M4 遠端訂購方案;實際可用性仍應以當下頁面與驗收結果為準。

08

常見問題

Windows 上能否先產生 macOS 安裝包?

可以產生部分未簽名產物,但「能產生」和「能發布」是兩件事。若專案含原生模組、平台資源或自動更新,仍應在真實 Mac 上重新確認目標架構、簽名、公證、票據及乾淨安裝。

macOS 代碼簽名為什麼通常要在 Mac 上做?

因為發布會牽涉 macOS 安全工具、鑰匙圈、Developer ID 憑證與 entitlements。真正的風險不是命令能否被呼叫,而是私密金鑰是否受控、執行帳戶是否隔離,以及重啟後流程能否重現。

CI 裡怎樣串接 Electron Forge 與 Apple 公證?

可先由 Forge 完成打包和簽名,再在受控 Mac 階段呼叫 Apple 的公證工具或服務介面。流水線必須等待結果、保存提交識別碼,接著完成票據裝訂、離線驗證和乾淨帳戶安裝測試;不能只檢查上傳命令的退出狀態。

Windows 開發 Electron 程式要怎樣發布 Mac 版本?

把 Windows 的責任限於編碼、Lint、單元測試和通用建置,再將固定提交版本交給 Mac 節點。Mac 節點執行目標架構打包、簽名、公證、安裝與更新測試,並回傳可追溯制品。

Electron macOS 發布節點需要長期運行嗎?

低頻發布不需要立即維持長期節點;短期遠端 Mac 足以先跑通一次生產鏈路。若發布有固定排程、需要快取或必須持續保留簽名環境,才值得配置專用節點,並同時建立重啟恢復程序。

09

本週的發布決定

如果目前方案只有 Windows 或 Linux,直接把所有任務搬到一台長期 Mac,會增加節點維護、鑰匙圈保護和閒置成本;只靠跨平台打包,則會留下原生模組、簽名、公證和 Gatekeeper 驗證缺口。較穩妥的做法,是先租用 MESHLAUNCH 的遠端 Mac,從乾淨工作區跑完一次 Electron 44 的簽名、公證、安裝與更新驗收,再按發布頻率決定是否保留長期專用節點。需要臨時算力或測試環境時,這比立即購買硬體更容易回退;若是長期高頻重負載或必須使用實體介面,則應評估自有 Mac 與備用發布路徑。