NW.js Mac App 簽名公證流程

Raychan發表於2020-07-10

使用 Developer ID 為 Mac 軟體簽名 - Apple Developer

在MacOS 10.15之前,應用如果沒有簽名(signature),那麼首次開啟時就會彈出“無法驗證開發者”的安全提示,因此只要簽名了,就可以正常開啟軟體,
從 10.15 版本後,從 App Store 之外分發的 App 都需要經過 Apple 公證(notarize),否則會彈出“無法開啟”,“移到廢紙簍”的提示,,非常影響使用者第一印象和使用,這就需要再簽名之後,再進行公證。下面簡單記錄一下 mac 下 App 簽名和公證的流程。

簽名

生成證書請求檔案

  1. 進入鑰匙串,在選單中選擇 “Certificates” - “Request a Certificate From A Certificate Authority”

  1. 在彈窗中填寫如下資訊。

填寫完後儲存到本地,檔名為CertificateSigningRequest.certSigningRequest

在開發者中心建立證書

登入 Apple Developer,進入 Certificates, IDs & Profiles 頁面,點選新增按鈕,選擇 Mac App Distribution

上傳剛才新增的 CertificateSigningRequest.certSigningRequest 檔案

上傳成功後點選下載,將證書儲存到本地。

安裝證書

  1. 雙擊下載到本地的證書,新增到鑰匙串,如下:

  1. 右鍵雙擊,匯出證書為 .cer 格式

  1. 開啟命令列工具,新增證書

sudo security add-trusted-cert -d -r trustRoot -p codeSign -k /Library/Keychains/System.keychain ~/Desktop/Certificates.cer

Security是Mac系統中鑰匙串和安全模組的命令列管理工具,瞭解更多Security命令,參考:
Mac Security工具使用總結

  1. 新增成功後通過命令檢視已新增的證書

security find-identity -p codesigning

如果新增錯誤,需要刪除證書,則使用如下命令:

sudo security delete-certificate -Z 36A8CEEBCA9CC8FA3CAC9B7EA165AA062DCxxxxxx

  1. 進行簽名

codesign -f -s "3rd Party Mac Developer Application: xxxx xxx Co. Ltd. (6755xxxxx)" -v "/Users/wangxi/Desktop/Codes/weixin-work/dist/xxxx.app" --deep

6.檢視是否簽名成功

codesign -vv /Users/wangxi/Desktop/Codes/weixin-work/dist/xxx.app


公證

對您的 Mac 軟體進行公證以在 macOS Catalina 中執行 - 新聞 - Apple Developer

公證流程主要通過一行命令,如下:

  1. 獲取命令相關欄位值
  • primary-bundle-id :當前需要公證 App 的 ID,在蘋果開發者後臺 Profiles 詳情中可以檢視(如果沒有的話,需要手動新增)

  • username:蘋果開發者ID

  • password:應用專用密碼。(登入 appleid.apple.com ,點選 Generate Password,建立一個應用專用密碼,這樣可以避免暴露真實的密碼。

  • asc-provider:證書提供者(ProviderShortname)。查詢命令如下:

xcrun altool —list-providers -u "apple id" -p "app password"

  • file:需要公證的 App 路徑,支援 dmg,zip 和 pkg

填寫完對應欄位完整的命令如下:

xcrun altool --notarize-app --primary-bundle-id "com.xxx.www" --username "xxx@xxx.com" --password "jvqz-jyym-xxx-xxxxx" --asc-provider "67559xxxxxx" --file "/Users/wangxi/Desktop/Codes/weixin-work/dist/xxx.app.zip"

  1. 執行命令,請求成功後會返回一串字元 RequestUUID

  1. 查詢公證結果(一般兩分鐘左右就會出公證結果)

xcrun altool —notarization-info 78830f47-ecb9-42a6-b9a1-f82922exxxxx —username "xxx@xxx.com" —password "seqb-msgu-eata-xxxx"

如果公證通過,一會兒就會收到 Apple 傳送的郵件

如果未通過,可以通過返回的 LogFileURL 檢視錯誤日誌,修復相關問題後重新執行公證流程。

參考

MAS: Requesting certificates · nwjs/nw.js Wiki · GitHub

nwjs mac app簽名 - 小咔蹭的個人頁面 - OSCHINA

iOS包重簽名技術知識 - 簡書

macOS 下 Electron 程式的簽名及公證

codesign gives always no identity found error via terminal

Mac Electron 應用的簽名(signature)和公證(notarization) - 海角在眼前 - 部落格園

Mac開發-公證流程記錄Notarizaiton-附帶指令碼_CaicaiNo.1-CSDN部落格_mac公證

Mac Security工具使用總結 - XRacoon - 部落格園

Apple Developer Documentation

Mac notarizing 公證使用記錄 - 簡書

Apple Developer Documentation

相關文章