Sign 與 Notarize macOS 安裝檔或應用程式

Published by gleetsai on

自 2012 年起,macOS 開始內建 GateKeeper 安全技術。GateKeeper 可以保護確保使用者正在執行的應用程式未經過第三方修改,也沒有惡意程式碼在其中。接著從 macOS 10.15 起,macOS 更進一步要求所有在 2019 年 6 月 1 日後所出品的應用程式,都必須經過公證(Notarize)後才能通過 GateKeeper 檢查。

所以,開發者在把應用程式上架到非 App Store 的管道時,必須將應用程式進行簽署且公證,以符合最新的 GateKeeper 規定。應用程式的簽署憑證,可以到 Apple Developer 網站交換後取得,交換時需選擇 Developer ID Installer macOS,並安裝至 macOS Keychain。

進行簽署(Signing)

  1. 在終端機上輸入 security find-identity -v 找到用於簽署 Installer 的憑證。前面那一串數字加英文是憑證的識別資訊,後面則是憑證名稱。將後面的憑證名稱複製下來。
  2. 使用 productsign –sign “剛才複製的憑證名稱貼於此處” 來源PKG檔的位置 目的地PKG的位置。透過這行指令,會將簽署過後的 PKG 存放在目的地位置。 ProductSign 是一個 Xcode 工具,需要先安裝 XCode 才能使用。

    例如:productsign –sign “Developer ID Installer: Glee Tsai (XXXXX2J4Y3)” ~/Desktop/Jamf-connect-trial-downloader.pkg ~/Desktop/signed-Jamf-connect-trial

進行公證(Notarization)

  1. 沒有經過簽署的程式無法進行公證。接著使用 xcrun altool –notarize-app –primary-bundle-id “BundleID 名稱” –username “開發者 Apple ID” –password “APP-SPECIFIC PASSWORDS” –file “要公證的程式路徑” –team-id “團隊編號”。

    APP-SPECIFIC PASSWORDS 可以至 Apple ID 網站 登入帳號後申請。

    例如:xcrun altool –notarize-app –primary-bundle-id “me.gleetsai.jamfconnect.trial” –username “??????@me.com” –password “????-????-????-????” –file “/Users/glee.tsai/Desktop/signed-Jamf-connect-trial.pkg” –team-id “?????2J4Y3”

  2. 因為公證是一個自動化過程,當程式沒有被檢查出任何問題後,就會完成公證。此時需要檢查公證結果。
    xcrun altool –notarization-info “BundleID 名稱” –username “?????@me.com” –password “????-????-????-????”
  3. 確認公證結果無誤後。Apple 就會發行這個軟體的公證票據,並將此票據打在程式上。
    xcrun stapler staple ~/Desktop/signed-Jamf-connect-trial.pkg
  4. 最後驗證該票據已確實的打在程式上。
    stapler validate –verbose ~/Desktop/signed-Jamf-connect-trial.pkg
Categories: Apple