為 macOS 應用程式進行程式碼簽署
此指南提供有關 macOS 應用程式程式碼簽署和公證的資訊。
如果您沒有使用 GitHub Actions 來執行 OSX DMG 的建置,您需要確保環境變數 CI=true 存在。如需更多資訊,請參閱 tauri-apps/tauri#592。
需求
- macOS 10.13.6 或更新版本
- Xcode 14 或更新版本
- 已註冊 Apple Developer Program 的 Apple Developer 帳戶
有關更多詳細資訊,請閱讀開發人員文章 在發行前公證 macOS 軟體。
tl;dr
Tauri 程式碼簽署和公證流程透過下列環境變數設定
APPLE_SIGNING_IDENTITY
:包含簽署憑證的金鑰圈條目的名稱。APPLE_CERTIFICATE
:從金鑰圈匯出的.p12
憑證的 base64 字串。如果您沒有金鑰圈上的憑證(例如,CI 電腦),這很有用。APPLE_CERTIFICATE_PASSWORD
:.p12
憑證的密碼。APPLE_ID
、APPLE_PASSWORD
和APPLE_TEAM_ID
:您的 Apple 帳戶電子郵件、特定於應用程式的密碼 和您的 團隊 ID。僅需要公證應用程式。APPLE_API_ISSUER
、APPLE_API_KEY
和APPLE_API_KEY_PATH
:使用 App Store Connect API 金鑰進行驗證,而非 Apple ID。僅在您公證應用程式時需要。
簽署 Tauri 應用程式
簽署 macOS 應用程式的第一步是從 Apple Developer Program 取得簽署憑證。
建立簽署憑證
若要建立新的簽署憑證,您必須從 Mac 電腦產生憑證簽署要求 (CSR) 檔案。建立憑證簽署要求說明如何建立 CSR。
在您的 Apple Developer 帳戶中,導覽至憑證、ID 和設定檔頁面,然後按一下建立憑證
按鈕開啟建立新憑證的介面。選擇適當的憑證類型(Apple Distribution
用於將應用程式提交至 App Store,而 Developer ID Application
用於在 App Store 外傳送應用程式)。上傳您的 CSR,憑證就會建立完成。
只有 Apple Developer 帳戶持有人
可以建立Developer ID Application憑證。但它可以透過使用不同的使用者電子郵件地址建立 CSR 來與不同的 Apple ID 關聯。
下載憑證
在 證書、ID 與描述檔頁面 上,按一下您要使用的證書,然後按一下 下載
按鈕。它會儲存一個 .cer
檔案,開啟後會將證書安裝到鑰匙圈中。鑰匙圈條目的名稱代表 簽署身分
,也可以透過執行 security find-identity -v -p codesigning
來找到。
簽署證書只有在與您的 Apple ID 關聯時才有效。無效的證書不會列在 鑰匙圈存取 > 我的證書 標籤或 security find-identity -v -p codesigning 輸出中。如果證書未下載到正確的位置,請確保在下載 .cer 檔案時,在 鑰匙圈存取 的 預設鑰匙圈 中選取「登入」選項。
簽署 Tauri 應用程式
簽署組態透過環境變數提供給 Tauri 繫結器。您需要設定要使用的證書和用於公證應用程式的選用驗證組態。
證書環境變數
APPLE_SIGNING_IDENTITY
:這是我們在上面強調的簽署身分
。必須定義它才能在本地和 CI 電腦上簽署應用程式。通常只使用括號中的部分就夠了,例如ABCDE12345
中的Developer ID Application: Walter Tauri (ABCDE12345)
此外,為了簡化 CI 上的程式碼簽署流程,如果您定義了 APPLE_CERTIFICATE
和 APPLE_CERTIFICATE_PASSWORD
環境變數,Tauri 可以為您將證書安裝到鑰匙圈中。
- 開啟
鑰匙圈存取
應用程式至 登入 > 我的憑證 並尋找您的憑證鑰匙圈輸入。 - 展開輸入,在金鑰項目上按兩下,並選擇
輸出 "$KEYNAME"
。 - 選擇儲存
.p12
檔案的路徑並定義輸出的憑證密碼。 - 將
.p12
檔案轉換成 base64,在終端機上執行以下指令碼:openssl base64 -in /path/to/certificate.p12 -out certificate-base64.txt
。 - 將
certificate-base64.txt
檔案的內容設定為APPLE_CERTIFICATE
環境變數。 - 將憑證密碼設定為
APPLE_CERTIFICATE_PASSWORD
環境變數。
驗證環境變數
這些變數僅需要用於公證應用程式。
在使用 開發人員 ID 應用程式 憑證時需要公證。
APPLE_ID
、APPLE_PASSWORD
和APPLE_TEAM_ID
:要使用您的 Apple ID 進行驗證,請將APPLE_ID
設定為您的 Apple 帳戶電子郵件(範例:export APPLE_ID=tauri@icloud.com
),並將APPLE_PASSWORD
設定為 Apple 帳戶的 特定應用程式密碼。APPLE_API_ISSUER
、APPLE_API_KEY
和APPLE_API_KEY_PATH
:或者,你可以使用 App Store Connect API 金鑰進行驗證。開啟 App Store Connect 的 使用者和存取頁面,選擇金鑰
標籤,按一下新增
按鈕,然後選擇名稱和開發人員
存取權。APPLE_API_ISSUER
(發行者 ID
)顯示在金鑰表格上方,而APPLE_API_KEY
是該表格中金鑰 ID
欄位中的值。你還需要下載私密金鑰,這只能執行一次,且僅在重新載入頁面後才會顯示(按鈕顯示在新建金鑰的表格列中)。私密金鑰檔案路徑必須透過APPLE_API_KEY_PATH
環境變數設定。
建置應用程式
當執行 tauri build
指令時,Tauri 捆綁器會自動使用所有這些環境變數來簽署和公證你的應用程式。
範例
以下範例使用 GitHub Actions 來使用 Tauri 動作 簽署應用程式。
我們首先將上面列出的環境變數定義為 GitHub 上的機密。
你可以查看 這份指南 以瞭解 GitHub 機密。
一旦我們建立了 GitHub 機密,我們就會在 .github/workflows/main.yml
中建立一個 GitHub 發佈工作流程
name: 'publish'
on:
push:
branches:
- release
jobs:
publish-tauri:
permissions:
contents: write
strategy:
fail-fast: false
matrix:
platform: [macos-latest]
runs-on: ${{ matrix.platform }}
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Rust setup
uses: dtolnay/rust-toolchain@stable
- name: Rust cache
uses: swatinem/rust-cache@v2
with:
workspaces: './src-tauri -> target'
- name: Sync node version and setup cache
uses: actions/setup-node@v3
with:
node-version: 'lts/*'
cache: 'yarn' # Set this to npm, yarn or pnpm.
- name: Install frontend dependencies
# If you don't have `beforeBuildCommand` configured you may want to build your frontend here too.
run: yarn install # Change this to npm, yarn or pnpm.
- name: Build the app
uses: tauri-apps/tauri-action@v0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }}
APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
APPLE_SIGNING_IDENTITY: ${{ secrets.APPLE_SIGNING_IDENTITY }}
APPLE_ID: ${{ secrets.APPLE_ID }}
APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }}
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
with:
tagName: app-v__VERSION__ # the action automatically replaces \_\_VERSION\_\_ with the app version
releaseName: 'App v__VERSION__'
releaseBody: 'See the assets to download this version and install.'
releaseDraft: true
prerelease: false
工作流程從 GitHub 中提取機密,並在使用 Tauri 動作建置應用程式之前將它們定義為環境變數。輸出是包含已簽署和公證的 macOS 應用程式的 GitHub 發行版本。