signing-tauri-apps について
Tauri 開発者向けのクロスプラットフォームコード署名ガイドです。Android、iOS、Linux、macOS、Windows の証明書設定、CI/CD 変数、macOS の公証、Windows のクラウド署名を扱います。
主な機能
- 015 プラットフォームの署名手順
- 02証明書と署名 ID の設定
- 03CI/CD 署名用変数の準備
- 04macOS の公証対応
- 05Windows のカスタム署名コマンド設定
- 06Linux AppImage 署名の検証
活用シーン
- 01ストア配布用 Android・iOS 署名の準備
- 02macOS アプリの署名と公証の設定
- 03Windows ビルドの証明書署名設定
- 04CI/CD での署名認証情報の管理
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ dchuk/ claude-code-tauri-skills --skill signing-tauri-appsインストール後、Claude Code で/signing-tauri-appsを入力して読み込まれたか確認します。
詳細
Tauri コード署名スキル
このスキルでは、サポートされているすべてのプラットフォームで Tauri アプリケーションにコード署名するための包括的なガイダンスを提供します。
プラットフォームの概要
| プラットフォーム | 要件 | 証明書の種類 |
|---|---|---|
| Android | Play ストアでは必須 | Java Keystore (JKS) |
| iOS | 配布には必須 | Apple Developer 証明書 |
| Linux | 任意(信頼性が向上します) | GPG キー |
| macOS | 配布には必須 | Developer ID / Apple Distribution |
| Windows | 必須(SmartScreen) | OV または EV 証明書 |
Android の署名
キーストアを生成する
macOS/Linux:
keytool -genkey -v -keystore ~/upload-keystore.jks -keyalg RSA -keysize 2048 -validity 10000 -alias upload
Windows:
keytool -genkey -v -keystore $env:USERPROFILE\upload-keystore.jks -storetype JKS -keyalg RSA -keysize 2048 -validity 10000 -alias upload
設定ファイル
src-tauri/gen/android/keystore.properties を作成します。
password=<your-password>
keyAlias=upload
storeFile=/path/to/upload-keystore.jks
重要: keystore.properties をバージョン管理にコミットしないでください。
Gradle の設定
src-tauri/gen/android/app/build.gradle.kts を変更します。
import java.io.FileInputStream
// Add before android { } block
val keystorePropertiesFile = rootProject.file("keystore.properties")
val keystoreProperties = java.util.Properties()
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(FileInputStream(keystorePropertiesFile))
}
android {
// ... existing config ...
signingConfigs {
create("release") {
keyAlias = keystoreProperties["keyAlias"] as String
keyPassword = keystoreProperties["password"] as String
storeFile = file(keystoreProperties["storeFile"] as String)
storePassword = keystoreProperties["password"] as String
}
}
buildTypes {
release {
signingConfig = signingConfigs.getByName("release")
// ... other release config ...
}
}
}
CI/CD 環境変数
| 変数 | 説明 |
|---|---|
ANDROID_KEY_ALIAS | キーのエイリアス(例:upload) |
ANDROID_KEY_PASSWORD | キーストアのパスワード |
ANDROID_KEY_BASE64 | Base64 エンコードされたキーストアファイル |
GitHub Actions の例:
- name: Setup Android signing
run: |
cd src-tauri/gen/android
echo "keyAlias=${{ secrets.ANDROID_KEY_ALIAS }}" > keystore.properties
echo "password=${{ secrets.ANDROID_KEY_PASSWORD }}" >> keystore.properties
base64 -d <<< "${{ secrets.ANDROID_KEY_BASE64 }}" > $RUNNER_TEMP/keystore.jks
echo "storeFile=$RUNNER_TEMP/keystore.jks" >> keystore.properties
iOS の署名
前提条件
- Apple Developer Program への登録(年額 $99)
- App Store Connect に登録済みのバンドル識別子
- iOS コード署名証明書
- モバイルプロビジョニングプロファイル
自動署名(推奨)
ローカル開発では、Xcode の「設定」>「アカウント」から認証します。
CI/CD では、App Store Connect API キーを作成し、次の値を設定します。
| 変数 | 説明 |
|---|---|
APPLE_API_ISSUER | App Store Connect の Issuer ID |
APPLE_API_KEY | App Store Connect の Key ID |
APPLE_API_KEY_PATH | .p8 秘密鍵ファイルへのパス |
手動署名
| 変数 | 説明 |
|---|---|
IOS_CERTIFICATE | Base64 エンコードされた .p12 証明書 |
IOS_CERTIFICATE_PASSWORD | 証明書のエクスポート時に使用したパスワード |
IOS_MOBILE_PROVISION | Base64 エンコードされたプロビジョニングプロファイル |
配布方法別の証明書の種類
| 配布方法 | 証明書の種類 |
|---|---|
| デバッグ | Apple Development または iOS App Development |
| App Store | Apple Distribution または iOS Distribution |
| Ad Hoc | Apple Distribution または iOS Distribution |
証明書をエクスポートする
- Keychain Access を開きます
- 証明書を見つけます
- 秘密鍵を右クリックします
- 「エクスポート」を選択し、
.p12として保存します - Base64 に変換します:
base64 -i certificate.p12
プロビジョニングプロファイルを作成する
- 一致するバンドル識別子で App ID を登録します
- 配布方法に応じたプロビジョニングプロファイルを作成します
- 証明書をプロファイルに関連付けます
- ダウンロードして変換します:
base64 -i profile.mobileprovision
Linux の署名(AppImage)
GPG キーを生成する
gpg2 --full-gen-key
キーを安全にバックアップしてください。
環境変数
| 変数 | 説明 |
|---|---|
SIGN | 署名を有効にするには 1 に設定します |
SIGN_KEY | GPG キー ID(省略可能。設定されていない場合はデフォルトが使用されます) |
APPIMAGETOOL_SIGN_PASSPHRASE | キーのパスワード(CI/CD では必須) |
APPIMAGETOOL_FORCE_SIGN | 署名エラー時にビルドを失敗させるには 1 に設定します |
署名付きでビルドする
SIGN=1 APPIMAGETOOL_SIGN_PASSPHRASE="your-passphrase" npm run tauri build
埋め込み署名を表示する
./src-tauri/target/release/bundle/appimage/app_version_amd64.AppImage --appimage-signature
署名を検証する
AppImageUpdate releases から検証ツールをダウンロードします。
chmod +x validate-x86_64.AppImage
./validate-x86_64.AppImage your-app.AppImage
注: AppImage は署名を自動検証しません。ユーザーが手動で検証する必要があります。
macOS の署名と公証
前提条件
- Apple Developer Program への登録(年額 $99)
- コード署名用の Mac コンピューター
- 無料アカウントではアプリケーションを公証できません
証明書の種類
| 証明書 | 用途 |
|---|---|
| Apple Distribution | App Store への提出 |
| Developer ID Application | App Store 外での配布 |
証明書の作成
- キーチェーンアクセスから証明書署名要求(CSR)を生成します
- Apple Developer > Certificates, IDs & Profiles に CSR をアップロードします
.cerをダウンロードし、ダブルクリックしてインストールします
設定
tauri.conf.json:
{
"bundle": {
"macOS": {
"signingIdentity": "Developer ID Application: Your Name (TEAM_ID)"
}
}
}
CI/CD 用環境変数
証明書の変数:
| 変数 | 説明 |
|---|---|
APPLE_CERTIFICATE | Base64 エンコードされた .p12 証明書 |
APPLE_CERTIFICATE_PASSWORD | エクスポートした証明書のパスワード |
APPLE_SIGNING_IDENTITY | キーチェーン内の証明書名 |
公証 - オプション 1:App Store Connect API(推奨):
| 変数 | 説明 |
|---|---|
APPLE_API_ISSUER | 発行者 ID |
APPLE_API_KEY | キー ID |
APPLE_API_KEY_PATH | .p8 秘密鍵へのパス |
公証 - オプション 2:Apple ID:
| 変数 | 説明 |
|---|---|
APPLE_ID | Apple ID のメールアドレス |
APPLE_PASSWORD | アプリ固有のパスワード |
APPLE_TEAM_ID | チーム識別子 |
CI/CD 用証明書のエクスポート
# Export from Keychain as .p12, then:
base64 -i certificate.p12 | pbcopy
アドホック署名(テスト専用)
Apple の認証情報を使わずに配布またはテストする場合:
{
"bundle": {
"macOS": {
"signingIdentity": "-"
}
}
}
GitHub Actions の例
- name: Import certificate
env:
APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }}
APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
run: |
echo $APPLE_CERTIFICATE | base64 --decode > certificate.p12
security create-keychain -p actions temp.keychain
security import certificate.p12 -k temp.keychain -P $APPLE_CERTIFICATE_PASSWORD -T /usr/bin/codesign
security list-keychains -s temp.keychain
security unlock-keychain -p actions temp.keychain
security set-key-partition-list -S apple-tool:,apple: -s -k actions temp.keychain
Windows の署名
証明書の種類
| 種類 | SmartScreen | 入手可能時期 |
|---|---|---|
| OV(組織認証) | 時間をかけて信頼性を構築 | 2023 年 6 月 1 日より前 |
| EV(拡張認証) | 即時に信頼 | 2023 年 6 月 1 日以降に必要 |
注: 2023 年 6 月 1 日以降に取得した証明書で、SmartScreen に即時信頼されるには EV 証明書が必要です。
設定
tauri.conf.json:
{
"bundle": {
"windows": {
"certificateThumbprint": "A1B1A2B2A3B3A4B4A5B5A6B6A7B7A8B8A9B9A0B0",
"digestAlgorithm": "sha256",
"timestampUrl": "http://timestamp.sectigo.com"
}
}
}
証明書の拇印を確認する
- 証明書の詳細を開きます
- [詳細]タブに移動します
- 「拇印」フィールドを探します
- 16 進数文字列をコピーします(空白を削除してください)
一般的なタイムスタンプ URL
http://timestamp.sectigo.comhttp://timestamp.digicert.comhttp://timestamp.globalsign.com
証明書を PFX に変換する
openssl pkcs12 -export -in cert.cer -inkey private-key.key -out certificate.pfx
CI/CD 用環境変数
| 変数 | 説明 |
|---|---|
WINDOWS_CERTIFICATE | Base64 エンコードされた .pfx ファイル |
WINDOWS_CERTIFICATE_PASSWORD | PFX エクスポートのパスワード |
GitHub Actions の例
- name: Import Windows certificate
env:
WINDOWS_CERTIFICATE: ${{ secrets.WINDOWS_CERTIFICATE }}
WINDOWS_CERTIFICATE_PASSWORD: ${{ secrets.WINDOWS_CERTIFICATE_PASSWORD }}
run: |
echo "$WINDOWS_CERTIFICATE" | base64 --decode > certificate.pfx
Import-PfxCertificate -FilePath certificate.pfx -CertStoreLocation Cert:\CurrentUser\My -Password (ConvertTo-SecureString -String $env:WINDOWS_CERTIFICATE_PASSWORD -AsPlainText -Force)
shell: pwsh
Azure Key Vault による署名
Azure Key Vault を使ってクラウドベースで署名する場合:
| 変数 | 説明 |
|---|---|
AZURE_CLIENT_ID | Azure AD アプリケーションのクライアント ID |
AZURE_CLIENT_SECRET | Azure AD アプリケーションのシークレット |
AZURE_TENANT_ID | Azure AD テナント ID |
tauri.conf.json で設定します:
{
"bundle": {
"windows": {
"signCommand": "relic sign --key azurekeyvault --file %1"
}
}
}
Azure Trusted Signing
Azure Code Signing サービスを使用する場合:
{
"bundle": {
"windows": {
"signCommand": "trusted-signing-cli -e <endpoint> -a <account> -c <profile> %1"
}
}
}
カスタム署名コマンド
その他の署名ツールやクロスプラットフォームビルドの場合:
{
"bundle": {
"windows": {
"signCommand": "your-signing-tool --sign %1"
}
}
}
%1 プレースホルダーは実行可能ファイルのパスに置き換えられます。
クイックリファレンス:すべての環境変数
Android
ANDROID_KEY_ALIASANDROID_KEY_PASSWORDANDROID_KEY_BASE64
iOS(手動)
IOS_CERTIFICATEIOS_CERTIFICATE_PASSWORDIOS_MOBILE_PROVISION
iOS/macOS(API キー)
APPLE_API_ISSUERAPPLE_API_KEYAPPLE_API_KEY_PATH
macOS(証明書)
APPLE_CERTIFICATEAPPLE_CERTIFICATE_PASSWORDAPPLE_SIGNING_IDENTITY
macOS(Apple ID による公証)
APPLE_IDAPPLE_PASSWORDAPPLE_TEAM_ID
Linux
SIGNSIGN_KEYAPPIMAGETOOL_SIGN_PASSPHRASEAPPIMAGETOOL_FORCE_SIGN
Windows
WINDOWS_CERTIFICATEWINDOWS_CERTIFICATE_PASSWORD
Azure(Windows)
AZURE_CLIENT_IDAZURE_CLIENT_SECRETAZURE_TENANT_ID