mcpField
D
distributing-tauri-for-macos

distributing-tauri-for-macos

github.com/dchuk開発36168 回インストール40 週間前に更新
リポジトリ

distributing-tauri-for-macos について

Tauri v2 アプリを macOS 向けに配布するためのスキルです。アプリバンドルや DMG インストーラー、メタデータ、権限、同梱するフレームワークやファイルの設定を開発者向けに解説します。

主な機能

  1. 01アプリバンドルと DMG のビルドコマンド
  2. 02DMG の外観設定
  3. 03Info.plist のカスタマイズとローカライズ
  4. 04権限と最小 OS バージョンの設定
  5. 05フレームワークとファイルの同梱

活用シーン

  1. 01macOS 向け Tauri アプリバンドルの準備
  2. 02ドラッグ&ドロップ式 DMG インストーラーの設定
  3. 03ローカライズした権限利用目的の追加
  4. 04フレームワークや任意ファイルのアプリへの同梱

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/dchuk/claude-code-tauri-skills --skill distributing-tauri-for-macos

インストール後、Claude Code で/distributing-tauri-for-macosを入力して読み込まれたか確認します。

詳細

Tauri macOS の配布

このスキルでは、DMG インストーラーやアプリケーションバンドルの設定など、macOS で Tauri v2 アプリケーションを配布する方法を説明します。

概要

Tauri アプリを macOS で配布する際に使う主な形式は、次の 2 つです。

  1. アプリケーションバンドル(.app) - アプリのすべてのコンポーネントを含む実行可能ディレクトリ
  2. DMG インストーラー(.dmg) - アプリケーションバンドルを格納し、ドラッグ&ドロップで簡単にインストールできるようにするディスクイメージ

macOS 向けのビルド

ビルドコマンド

Tauri CLI を使って、特定のバンドル形式を生成します。

# Build app bundle only
npm run tauri build -- --bundles app
yarn tauri build --bundles app
pnpm tauri build --bundles app
cargo tauri build --bundles app

# Build DMG installer only
npm run tauri build -- --bundles dmg
yarn tauri build --bundles dmg
pnpm tauri build --bundles dmg
cargo tauri build --bundles dmg

# Build both
npm run tauri build -- --bundles app,dmg

アプリケーションバンドルの構造

.app ディレクトリは macOS の規約に従います。

<productName>.app/
Contents/
    Info.plist              # App metadata and configuration
    MacOS/
        <app-name>          # Main executable
    Resources/
        icon.icns           # App icon
        [bundled resources] # Additional resources
    _CodeSignature/         # Code signature files
    Frameworks/             # Bundled frameworks
    PlugIns/                # App plugins
    SharedSupport/          # Support files

DMG インストーラーの設定

tauri.conf.json で DMG の外観を設定します。

DMG の設定例(完全版)
{
  "bundle": {
    "macOS": {
      "dmg": {
        "background": "./images/dmg-background.png",
        "windowSize": {
          "width": 660,
          "height": 400
        },
        "windowPosition": {
          "x": 400,
          "y": 400
        },
        "appPosition": {
          "x": 180,
          "y": 220
        },
        "applicationFolderPosition": {
          "x": 480,
          "y": 220
        }
      }
    }
  }
}
DMG の設定オプション
オプション型デフォルト説明
backgroundstring-src-tauri からの相対パスで指定する背景画像のパス
windowSize.widthnumber660DMG ウィンドウの幅(ピクセル単位)
windowSize.heightnumber400DMG ウィンドウの高さ(ピクセル単位)
windowPosition.xnumber-画面上でのウィンドウの初期 X 座標
windowPosition.ynumber-画面上でのウィンドウの初期 Y 座標
appPosition.xnumber180ウィンドウ内でのアプリアイコンの X 座標
appPosition.ynumber220ウィンドウ内でのアプリアイコンの Y 座標
applicationFolderPosition.xnumber480アプリケーションフォルダの X 座標
applicationFolderPosition.ynumber480アプリケーションフォルダの Y 座標

注: ヘッドレス環境に関する既知の問題により、CI/CD プラットフォームでビルドすると、アイコンのサイズや位置が正しく反映されない場合があります。

Info.plist のカスタマイズ

カスタム Info.plist の作成

src-tauri/Info.plist を作成して、デフォルト設定を拡張します。Tauri CLI はこのファイルを生成された値と自動的にマージします。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    
    <key>NSCameraUsageDescription</key>
    <string>This app requires camera access for video calls</string>

    <key>NSMicrophoneUsageDescription</key>
    <string>This app requires microphone access for audio recording</string>

    <key>NSLocationUsageDescription</key>
    <string>This app requires location access for mapping features</string>

    <key>NSPhotoLibraryUsageDescription</key>
    <string>This app requires photo library access to import images</string>

    
    <key>CFBundleDocumentTypes</key>
    <array>
        <dict>
            <key>CFBundleTypeName</key>
            <string>My Document</string>
            <key>CFBundleTypeExtensions</key>
            <array>
                <string>mydoc</string>
            </array>
            <key>CFBundleTypeRole</key>
            <string>Editor</string>
        </dict>
    </array>

    
    <key>CFBundleURLTypes</key>
    <array>
        <dict>
            <key>CFBundleURLName</key>
            <string>com.example.myapp</string>
            <key>CFBundleURLSchemes</key>
            <array>
                <string>myapp</string>
            </array>
        </dict>
    </array>
</dict>
</plist>
Info.plist の一般的なキー
キー説明
NSCameraUsageDescriptionカメラへのアクセスに関する説明
NSMicrophoneUsageDescriptionマイクへのアクセスに関する説明
NSLocationUsageDescription位置情報へのアクセスに関する説明
NSPhotoLibraryUsageDescription写真ライブラリへのアクセスに関する説明
NSAppleEventsUsageDescriptionAppleScript/自動化へのアクセス
CFBundleDocumentTypesサポートするドキュメントの種類
CFBundleURLTypesカスタム URL スキーム
LSMinimumSystemVersionmacOS の最小バージョン(tauri.conf.json での指定を推奨)
Info.plist のローカライズ

ローカライズされた文字列を使って複数の言語に対応します。

ディレクトリ構造:

src-tauri/
    infoplist/
        en.lproj/
            InfoPlist.strings
        de.lproj/
            InfoPlist.strings
        fr.lproj/
            InfoPlist.strings
        es.lproj/
            InfoPlist.strings

InfoPlist.strings の例(ドイツ語):

"NSCameraUsageDescription" = "Diese App benötigt Kamerazugriff für Videoanrufe";
"NSMicrophoneUsageDescription" = "Diese App benötigt Mikrofonzugriff für Audioaufnahmen";

tauri.conf.json での設定:

{
  "bundle": {
    "resources": {
      "infoplist/**": "./"
    }
  }
}

エンタイトルメントの設定

エンタイトルメントを付与すると、アプリのコード署名時に特別な機能を利用できます。

Entitlements.plist の作成

src-tauri/Entitlements.plist を作成します。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    
    <key>com.apple.security.app-sandbox</key>
    <true/>

    
    <key>com.apple.security.network.client</key>
    <true/>
    <key>com.apple.security.network.server</key>
    <true/>

    
    <key>com.apple.security.files.user-selected.read-write</key>
    <true/>
    <key>com.apple.security.files.downloads.read-write</key>
    <true/>

    
    <key>com.apple.security.device.camera</key>
    <true/>
    <key>com.apple.security.device.microphone</key>
    <true/>

    
    <key>com.apple.security.cs.allow-jit</key>
    <true/>
    <key>com.apple.security.cs.allow-unsigned-executable-memory</key>
    <true/>
</dict>
</plist>
tauri.conf.json でのエンタイトルメントの設定
{
  "bundle": {
    "macOS": {
      "entitlements": "./Entitlements.plist"
    }
  }
}
一般的なエンタイトルメントのリファレンス

サンドボックスのエンタイトルメント:

エンタイトルメント説明
com.apple.security.app-sandboxアプリのサンドボックスを有効にします(App Storeでは必須)
com.apple.security.network.client外部へのネットワーク接続
com.apple.security.network.server外部からのネットワーク接続
com.apple.security.files.user-selected.read-writeユーザーが選択したファイルへのアクセス
com.apple.security.files.downloads.read-writeダウンロードフォルダーへのアクセス

ハードウェアのエンタイトルメント:

エンタイトルメント説明
com.apple.security.device.cameraカメラへのアクセス
com.apple.security.device.microphoneマイクへのアクセス
com.apple.security.device.usbUSB デバイスへのアクセス
com.apple.security.device.bluetoothBluetooth へのアクセス

Hardened Runtime のエンタイトルメント:

エンタイトルメント説明
com.apple.security.cs.allow-jitJIT コンパイルを許可します
com.apple.security.cs.allow-unsigned-executable-memory署名されていない実行可能メモリを許可します
com.apple.security.cs.disable-library-validation任意のプラグインを読み込みます

macOS バンドルの設定

macOS の完全な設定例
{
  "bundle": {
    "icon": ["icons/icon.icns"],
    "macOS": {
      "minimumSystemVersion": "10.13",
      "entitlements": "./Entitlements.plist",
      "frameworks": [
        "CoreAudio",
        "./libs/libcustom.dylib",
        "./frameworks/CustomFramework.framework"
      ],
      "files": {
        "embedded.provisionprofile": "./profiles/distribution.provisionprofile",
        "SharedSupport/README.md": "./docs/README.md"
      },
      "dmg": {
        "background": "./images/dmg-background.png",
        "windowSize": {
          "width": 660,
          "height": 400
        },
        "appPosition": {
          "x": 180,
          "y": 220
        },
        "applicationFolderPosition": {
          "x": 480,
          "y": 220
        }
      }
    }
  }
}
最小システムバージョン

サポートする macOS の最小バージョンを設定します。

{
  "bundle": {
    "macOS": {
      "minimumSystemVersion": "12.0"
    }
  }
}

デフォルト:macOS 10.13(High Sierra)

フレームワークとライブラリの追加

システムフレームワークまたはカスタム dylib ファイルをバンドルします。

{
  "bundle": {
    "macOS": {
      "frameworks": [
        "CoreAudio",
        "AVFoundation",
        "./libs/libmsodbcsql.18.dylib",
        "./frameworks/Sparkle.framework"
      ]
    }
  }
}
  • システムフレームワーク: 名前のみを指定します(例:"CoreAudio")
  • カスタムフレームワーク/dylib: src-tauri からの相対パスを指定します
カスタムファイルをバンドルに追加

バンドルの Contents ディレクトリに追加のファイルを含めます。

{
  "bundle": {
    "macOS": {
      "files": {
        "embedded.provisionprofile": "./profile.provisionprofile",
        "SharedSupport/docs/guide.pdf": "./assets/guide.pdf",
        "Resources/config.json": "./config/default.json"
      }
    }
  }
}

形式:"destination": "source"。パスは tauri.conf.json からの相対パスです。

トラブルシューティング

よくある問題

CI/CD で DMG アイコンが正しく配置されない:

  • ヘッドレス環境で発生する既知の問題です
  • DMG をローカルでビルドするか、デフォルトの配置を使用してください

使用目的の説明が不足しているためアプリが却下される:

  • 必須の NS*UsageDescription キーをすべて Info.plist に追加します
  • アクセスが必要な理由が説明文で明確に伝わるようにしてください

エンタイトルメントが適用されない:

  • tauri.conf.json のエンタイトルメントファイルのパスを確認します
  • アプリが適切にコード署名されていることを確認します

実行時にフレームワークが見つからない:

  • フレームワークのパスが src-tauri からの相対パスとして正しいことを確認します
  • フレームワークが適切に署名されていることを確認します
検証コマンド
# Check Info.plist contents
plutil -p path/to/App.app/Contents/Info.plist

# Verify entitlements
codesign -d --entitlements - path/to/App.app

# Check code signature
codesign -vvv --deep --strict path/to/App.app

# View bundle structure
find path/to/App.app -type f | head -50

クイックリファレンス

ファイルの場所
ファイル場所用途
Info.plistsrc-tauri/Info.plistアプリメタデータの拡張
Entitlements.plistsrc-tauri/Entitlements.plist機能のエンタイトルメント
DMG Backgroundプロジェクト内の任意のパスDMG ウィンドウの背景
Localized stringssrc-tauri/infoplist/<lang>.lproj/ローカライズされた Info.plist の値
ビルド出力の場所
src-tauri/target/release/bundle/
    macos/
        <ProductName>.app         # Application bundle
    dmg/
        <ProductName>_<version>_<arch>.dmg  # DMG installer

コメント