遠端 Mac 可以完成 macOS App 簽名與公證;但公證不是 App Store 審核。若要在旅途中正式發布,先驗證 Developer ID 簽名、提交憑據、票據處理與使用者安裝結果,再決定是否把遠端環境當作正式發布工作站。

適合獨立 Mac 開發者:要直接把 App 交付給使用者,並希望在旅途中完成發布。
適合自由職業軟體作者:要替客戶交付安裝檔,必須核對簽名與公證是否完整。
適合遠端開發者:手上有待發布的 macOS 專案,但沒有隨身攜帶 Mac。

01

先選發布渠道:直接分發與 App Store 審核不是同一條路

如果 App 要直接提供給使用者下載,本文的檢查流程以 Developer ID 簽名和公證為主;若目標是上架 App Store,則應依照 App Store 的提交與審核流程處理。公證不能替代商店審核,也不代表 App 已符合商店上架要求。Apple 對不同 Mac App 分發方式的說明可供確認渠道差異。

這個區分會影響你準備的檔案、簽署身份與交付方式。不要因為 Xcode 能產生封存檔,就直接假定產物已經符合直接分發條件;也不要把 App Store 用的提交步驟套到 Developer ID 公證流程。

可先依下列方式判斷:

  • 直接交付安裝包或下載連結:檢查 Developer ID 簽名、公證與最終交付檔。
  • 透過 App Store 發布:按商店分發流程準備與提交,不把公證當作審核結果。
  • 客戶尚未決定渠道:先確認交付方式,再建立封裝與發布工作;不要提早把某一套流程當成兩種渠道通用。
02

第一階段:出發前確認團隊、身份與憑據

遠端 Mac 上的 macOS App 公證能否順利完成,首先取決於存取權限,而不是連線畫面能否打開。開始前確認開發者團隊、專案存取、簽名憑據和發布責任人;若帳號沒有建立或使用簽名身份的權限,應先停止發布準備,不要以「Xcode 可以開啟」當作權限已齊全的證明。

Apple 的Developer ID 憑證說明列出直接分發所用的簽署身份。建立清單時,也要分清 Developer ID Application 與 Developer ID Installer:前者用於簽署 App,後者用於簽署安裝套件。實際選用哪個,應依最終交付物與專案的封裝方式判斷。

憑據管理則要採取最小權限原則:

  • 可在受控遠端環境中使用的簽名資料,應限於完成建置與發布所需的帳號及權限。
  • Apple 帳號密碼、API 私密金鑰、憑證私鑰與復原資訊,不應寫進程式碼、提交紀錄或共用文件。
  • 若團隊無法說明憑據存放位置、誰能使用,以及如何撤銷或更新,就先不要把遠端主機設為正式發布環境。
  • 離開共用或旅居場所前,確認遠端連線已登出,並依團隊規範清除不應留在工作環境中的憑據。

若首次設定公證認證資料,可使用 Apple 支援的命令列流程將憑據存放在鑰匙圈中;不要把秘密值直接貼進終端機紀錄、聊天訊息或版本控制。細節可參考 Apple 的自訂公證工作流程文件。

03

第二階段:完成首次簽名,檢查 App 與內含元件

在 Xcode 完成建置或封存後,先確認 App 本身及其內含的輔助工具、框架與其他可執行元件都使用預期的簽名身份。只成功啟動 App,或只產生封存檔,都不足以證明它已可直接分發。Apple 的分發簽名與 Hardened Runtime 設定說明提供了簽名設定與執行環境要求的參考。

可先在遠端 Mac 上檢查簽名資訊與驗證結果:

codesign -dv --verbose=4 "MyApp.app"
codesign --verify --deep --strict --verbose=2 "MyApp.app"

第一個命令的輸出應讓發布者核對簽名身份與 App 識別資料;第二個命令則用於檢查簽名驗證。若出現錯誤,不要直接重新打包並提交公證,先回到建置設定、簽名選擇與封裝內容,找出是哪個元件未簽署或身份不符。

接著核對 Hardened Runtime 與專案所需的權限設定。若程式依賴特定系統功能或例外權限,應由專案負責人確認必要性及設定來源;不要為了消除錯誤而加入未經審核的權限。遇到簽名或執行環境問題時,保存 Xcode 建置記錄、簽名檢查輸出及產物版本,讓其他團隊成員能依同一批證據重現檢查。

04

第三階段:提交公證,保存識別資料與處理紀錄

簽名驗證完成後,才將預定交付的封裝檔送交公證。Apple 提供 Xcode 與命令列等工作流程;若選擇 notarytool,可按下列形式提交,並等待處理結果:

xcrun notarytool submit "MyApp.zip" \
  --keychain-profile "notary-profile" \
  --wait

命令中的封裝檔必須是準備給使用者的對應產物,不要拿另一份測試檔的結果當作正式交付依據。命令列憑據設定方式與公證流程,請以 Apple 的macOS 軟體公證文件為準。

提交後,記錄命令輸出的提交識別資料、狀態與時間,並用識別資料查詢詳細結果:

xcrun notarytool info "SUBMISSION-ID" \
  --keychain-profile "notary-profile"

xcrun notarytool log "SUBMISSION-ID" \
  --keychain-profile "notary-profile"

跨時區協作時,這份紀錄能讓接手者知道該查哪一次提交,而不是重新上傳產物、製造多份難以辨認的結果。若狀態尚未完成,就不要把「已送出」寫成「已通過」;若被拒絕或有警告,先讀取公證記錄,確認問題來自簽名、封裝、權限或其他檢查,再修正並重新驗證。

05

第四階段:處理票據,再從使用者角度驗收

公證通過、票據處理完成與檔案可正常交付,是彼此相關但不能互相替代的檢查結果。Apple 的Mac 軟體封裝與分發指南說明分發產物的準備方式;公證後也應依交付格式處理票據,並驗證最後要交給使用者的檔案。

例如,對 App 進行票據處理與驗證:

xcrun stapler staple "MyApp.app"
xcrun stapler validate "MyApp.app"

若實際交付的是磁碟映像檔或安裝套件,請依 Apple 文件與交付格式選擇對應的處理對象,不要只驗證 App 內部的檔案,卻忽略使用者下載的外層封裝。

接著從乾淨的測試環境下載最終交付檔,按使用者實際操作方式開啟。核對系統是否出現預期的安全提示、App 能否啟動、主要功能是否可用,以及安裝說明是否與實際流程一致。若只有開發環境能正常啟動,或測試檔與正式下載檔不同,便不能視為發布驗收完成。

FAQ:遠端發布流程中容易混淆的幾件事

遠端 Mac 能否完成 macOS App 公證?
可以,前提是主機能執行所需的 macOS 建置與簽名流程,且團隊帳號、憑據和專案權限均已確認。遠端連線只提供操作方式,不會補足缺少的簽名權限,也不保證公證結果通過。

Developer ID 簽名與公證有何不同?
Developer ID 是直接分發軟體使用的簽署身份;公證則是將發布產物交由 Apple 檢查。簽名完成並不代表公證已通過,公證通過也不能取代封裝、票據及使用者端驗收。

如何提交 macOS App 公證?
可以依 Apple 支援的 Xcode 工作流程操作,或使用 notarytool 提交封裝檔、查詢狀態並檢視公證記錄。無論使用哪一種方式,都要保存提交識別資料,並核對送交的檔案就是預定交付的版本。

公證通過後還要驗證什麼?
檢查最終交付物是否與送交公證的產物一致,依封裝格式處理並驗證票據,再從乾淨環境下載及首次開啟。若使用者下載到的檔案、安裝提示或啟動結果與預期不同,就先暫停交付並查明差異。

06

按發布渠道與工作環境作最後判斷

下表用來先判斷應走哪一種發布流程;它不是對任何遠端主機或專案能否成功的保證。

選項 適用情況 主要檢查 不可混淆之處
Developer ID 直接分發 App 由開發者直接交付或提供下載 簽名身份、公證結果、票據、最終封裝與安裝體驗 公證不是 App Store 審核
App Store 分發 目標是透過 App Store 提供 App Xcode 分發設定、商店提交資料與審核流程 不能把 Developer ID 公證當成上架完成
尚未確認渠道 客戶、團隊或產品尚未決定交付方式 先確認收件者如何取得 App,再定封裝方式 不要對不明確的產物先行發布

再按工作環境確認遠端 Mac 是否值得承擔正式發布工作:

工作方式 可先採用的情況 主要風險或限制 建議驗收
自有 Mac 本機發布 工作固定、需要直接操作本機裝置或外接設備 旅途中需要攜帶設備;遺失或故障可能影響當下交付 確認備份、憑據保管與替代發布安排
遠端 Mac 發布 不想攜帶 Mac,但已具備專案、簽名與公證權限 連線中斷、權限不足或憑據管理不清,都可能阻斷發布 先以自己的正式專案走完簽名、提交、票據及下載驗收
只有 iPad 或一般輕薄裝置 主要負責連線、溝通與檢視發布狀態 本機不一定能執行 macOS 建置、簽名及封裝工具 將發布工作交給具備 macOS 與授權條件的環境,並保留可追溯紀錄

因此,判斷遠端 Mac 是否可用,應以自己的專案完成一次完整發布演練為準:先檢查簽名,再提交公證、讀取結果、處理票據,最後從乾淨環境安裝。若其中任何一步仍依賴未確認的帳號權限、人工憑據或無法重現的本機操作,就先保留本機備援,不要把環境可連線等同於發布可用。

對經常出差的開發者來說,隨身帶 Mac 會增加設備保管與遺失風險;只有 iPad 或輕薄本則可能無法直接完成 macOS 建置與簽名。遠端 Mac 可把發布工作留在可存取的 macOS 環境,但它仍依賴穩定連線、妥善的權限管理與專案本身通過檢查。若你準備用 NodeMini 測試自己的發布流程,可先查看遠端 Mac 的使用方式,再按預計連線地點了解香港遠端 Mac 方案,並以短期實際驗收決定是否適合正式交付;環境介紹本身不代表公證成功。