---
title: macOS アプリケーション・バンドル
sidebar:
  order: 1
i18nReady: true
---

import CommandTabs from '@components/CommandTabs.astro';
import TranslationNote from '@components/i18n/TranslationNote.astro';

「アプリケーション・バンドル」は、macOS で実行されるパッケージ形式です。これは、シンプルなディレクトリで、アプリケーションの実行ファイル、リソース、Info.plist ファイルや、macOS フレームワークといったその他のファイルなど、アプリケーションの正常動作に必要なすべてのものが含まれています。

アプリを「macOS アプリケーション・バンドル」としてパッケージ化するには、Tauri CLI を使用して、Mac コンピューター上で `tauri build` コマンドを実行します：

<CommandTabs
  npm="npm run tauri build -- --bundles app"
  yarn="yarn tauri build --bundles app"
  pnpm="pnpm tauri build --bundles app"
  deno="deno task tauri build --bundles app"
  bun="bun tauri build --bundles app"
  cargo="cargo tauri build --bundles app"
/>

## ファイル構造

「macOS アプリ・バンドル」は、以下の構造を持つディレクトリです：

```
├── <productName>.app
│   ├── Contents
│   │   ├── Info.plist
│   │   ├── ...additional files from [`tauri.conf.json > bundle > macOS > files`]
│   ├── MacOS
│   │   ├── <app-name> (app executable)
│   ├── Resources
│   │   ├── icon.icns (app icon)
│   │   ├── ...resources from [`tauri.conf.json > bundle > resources`]
│   ├── _CodeSignature (codesign information generated by Apple)
│   ├── Frameworks
│   ├── PlugIns
│   ├── SharedSupport
```

詳細については、[Bundle Structures 公式ドキュメント] を参照してください。

## ネイティブ設定

「アプリ・バンドル」は `Info.plist` ファイルによって設定されます。このファイルには、macOS によって読み取られる「設定値」や「アプリ ID」と共に「キーと値」のペアが含まれています。

Tauri は、アプリのバイナリ名、バージョン、バンドル ID、最小システム・バージョンなどの最も重要なプロパティ（属性）を自動的に設定します。

設定ファイルを拡張するには、`src-tauri` フォルダに `Info.plist` ファイルを作成し、必要なキー・ペアを追加します：

```xml title="src-tauri/Info.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>NSCameraUsageDescription</key>
	<string>Request camera access for WebRTC</string>
	<key>NSMicrophoneUsageDescription</key>
	<string>Request microphone access for WebRTC</string>
</dict>
</plist>
```

この `Info.plist` ファイルは、Tauri CLI によって生成された値とマージされます。アプリケーション・バージョンなどのデフォルト値を上書きする場合は、他の設定値ととの競合や、予期しない動作を引き起こすかもしれませんので、注意してください。

詳細については、[Info.plist 公式ドキュメント] を参照してください。

### Info.plist の現地語対応

`Info.plist` ファイル自体は、単一の言語のみ（通常は英語）をサポートします。複数の言語をサポートしたい場合は、追加する言語ごとに `InfoPlist.strings` ファイルを作成できます。各ファイルは、それぞれの言語ごとの `lproj` ディレクトリ（これはアプリケーション・バンドル内の `Resources` ディレクトリにあります）に格納されます。

追加したファイルを自動的にバンドルするには、Tauri の「[resources]（リソース）機能」を利用します。そのためには、プロジェクト内に以下のパターンに従ったファイル構造を作成してください：

```
├── src-tauri
│   ├── tauri.conf.json
│   ├── infoplist
│   │   ├── de.lproj
│   │   │   ├── InfoPlist.strings
│   │   ├── fr.lproj
│   │   │   ├── InfoPlist.strings
```

「`infoplist` ディレクトリ名」は、以下の「resources config（リソース設定）」で更新する場合には自由に命名できますが、「`lproj` ディレクトリ名」のほうは命名規則に従い「言語コード.lproj `<lang-code>.lproj`」の形、「文字列カタログ・ファイル」は `InfoPlist.strings`（i と p は大文字）という名前でなければなりません。ほとんどの場合、「言語コード」は [BCP 47] に従った二文字のコードである必要があります。

<TranslationNote lang="ja">

**BCP 47**　「言語タグの規定」：　「言語コード」（二桁、小文字）の例としては、de（ドイツ語）、fr（フランス語）、ja（日本語）、など；　《参考》　本稿とは別件ですが、同一言語にたいして地域による差がある場合は「地域コード」（二桁、通常大文字）の付記も行なわれます。たとえば、　en-US（英語−米国）、en-GB（英語−英国）、zh-CN（中国語−中国）、など。[ISO 639](https://ja.wikipedia.org/wiki/ISO_639-1コード一覧) （言語コード）、[ISO 3166-1](https://ja.wikipedia.org/wiki/ISO_3166-1)（国名コード）も参照。

</TranslationNote>

上記の `Info.plist` の例では、`de.lproj > InfoPlist.strings` ファイル（ドイツ語対応用）の内容は次のようになります：

```ini title="de.lproj/InfoPlist.strings"
NSCameraUsageDescription = "Kamera Zugriff wird benötigt für WebRTC Funktionalität";
NSMicrophoneUsageDescription = "Mikrofon Zugriff wird benötigt für WebRTC Funktionalität";
```

最後に、上述の「リソース機能」を使用して、Tauri がこれらのファイルを取得するようにします：

```json title="src-tauri/tauri.conf.json"
{
  "bundle": {
    "resources": {
      "infoplist/**": "./"
    }
  }
}
```

## エンタイトルメント（資格の付与）

「エンタイトルメント」は、Apple の特別な設定の「キーと値」のペアで、アプリに特定のアクセス権を付与する権利や特権として働きます。たとえば、ユーザーのデフォルト電子メール・クライアントとしての動作させることや App Sandbox 機能の使用することなど、です。

「エンタイトルメント」はアプリケーションの署名時に適用されます。詳しくは [コード署名に関するドキュメント] をご覧ください。

アプリケーションに必要なエンタイトルメント権限を定義するには、「エンタイトルメント・ファイル」を作成し、それを使用するように Tauri を設定する必要があります。

1. `src-tauri` フォルダに `Entitlements.plist` ファイルを作成し、アプリに必要な「キーと値」のペアを設定します：

```xml title="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/>
</dict>
</plist>
```

2. Entitlements.plist ファイルを使用するように Tauri を設定します：

```json title="tauri.conf.json" ins={4}
{
  "bundle": {
    "macOS": {
      "entitlements": "./Entitlements.plist"
    }
  }
}
```

詳細については、[Entitlements 公式ドキュメント] を参照してください。

## 最小システム・バージョン

Tauri アプリケーションは、デフォルトで macOS 10.13 以降をサポートしています。あなたが、これより新しい macOS システムを必要とする API を使用しており、あなたのアプリ・バンドルでそのシステム要件の適用を必須としたい場合は、[`tauri.conf.json > bundle > macOS > minimumSystemVersion`] で最小バージョン番号を指定できます：

```json title="tauri.conf.json" ins={4}
{
  "bundle": {
    "macOS": {
      "minimumSystemVersion": "12.0"
    }
  }
}
```

## macOS フレームワークを含める

アプリケーションの実行に追加の macOS フレームワークが必要な場合は、必要となるフレームワークを [`tauri.conf.json > bundle > macOS > frameworks`] の設定内にリストします。
この frameworks リストには、「システム・フレームワーク」または「カスタム・フレームワークと dylib ファイル」のどちらかを含めることができます。

```json title="tauri.conf.json" ins={4-8}
{
  "bundle": {
    "macOS": {
      "frameworks": [
        "CoreAudio",
        "./libs/libmsodbcsql.18.dylib",
        "./frameworks/MyApp.framework"
      ]
    }
  }
}
```

:::note

- システム・フレームワークを参照するには、絶対パスの代わりに、名前（拡張子部分「.framework」なし）を使用します
- システム・フレームワークは、`$HOME/Library/Frameworks`、`/Library/Frameworks/`、または `/Network/Library/Frameworks/` のいずれかに存在する必要があります
- ローカル・フレームワークと dylib ファイルを参照するには、`src-tauri` ディレクトリを基準としたフレームワークへの完全なパスを使用する必要があります

:::

## カスタム・ファイルの追加

[`tauri.conf.json > bundle > macOS > files`] の設定を使用して、アプリケーション・バンドルにカスタム・ファイルを追加できます。これにより、`tauri.conf.json` ファイルを基準として、宛先パスがソースにマッピングされます。
カスタム・ファイルは `<Product-name> .app/contents` フォルダーに追加されます。

```json title="tauri.conf.json" ins={4-7}
{
  "bundle": {
    "macOS": {
      "files": {
        "embedded.provisionprofile": "./profile-name.provisionprofile",
        "SharedSupport/docs.md": "./docs/index.md"
      }
    }
  }
}
```

上記の例では、`profile-name.provisionprofile` ファイルが `<product-name>.app/Contents/embedded.provisionprofile` にコピーされ、`docs/index.md` ファイルが `<product-name>.app/Contents/SharedSupport/docs.md` にコピーされます。

[`tauri.conf.json > bundle > macOS > frameworks`]: /reference/config/#frameworks-1
[`tauri.conf.json > bundle > macOS > files`]: /reference/config/#files-2
[`tauri.conf.json > bundle > resources`]: /reference/config/#resources
[Bundle Structures 公式ドキュメント]: https://developer.apple.com/library/archive/documentation/CoreFoundation/Conceptual/CFBundles/BundleTypes/BundleTypes.html
[Entitlements 公式ドキュメント]: https://developer.apple.com/documentation/bundleresources/entitlements
[Info.plist 公式ドキュメント]: https://developer.apple.com/documentation/bundleresources/information_property_list
[コード署名に関するドキュメント]: /ja/distribute/sign/macos/
[`tauri.conf.json > bundle > macOS > minimumSystemVersion`]: /reference/config/#minimumsystemversion
[resources]: /ja/develop/resources/
[BCP 47]: https://www.rfc-editor.org/rfc/bcp/bcp47.txt

<div style="text-align: right;">
  【※ この日本語版は、「Mar 29, 2025 英語版」に基づいています】
</div>
