跳到内容
Tauri

macOS 应用包

应用程序包 (Application bundle) 是 macOS 上执行的包格式。它是一个简单的目录,包含了应用程序成功运行所需的一切,包括应用可执行文件、资源、Info.plist 文件以及其他文件(例如 macOS 框架)。

要将你的应用打包为 macOS 应用程序包,你可以在 Mac 电脑上使用 Tauri CLI 并运行 tauri build 命令。

npm run 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

更多信息请参见官方文档

应用包由 Info.plist 文件配置,该文件包含应用标识和 macOS 读取的配置值的键值对。

Tauri 会自动配置最重要的属性,例如应用二进制名称、版本、Bundle ID、最低系统版本等。

要扩展配置文件,请在 src-tauri 文件夹中创建一个 Info.plist 文件并添加你所需的键值对:

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 文件本身仅支持单一语言,通常是英语。如果你想支持多种语言,可以为每种额外语言创建 InfoPlist.strings 文件。每个文件都应放入应用程序包中 Resources 目录内对应的 lproj 目录中。

要自动打包这些文件,你可以利用 Tauri 的资源 (resources) 功能。为此,请按照此模式在项目中创建文件结构:

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

虽然 infoplist 目录名称可以随意选择(只要在下方的资源配置中进行更新即可),但 lproj 目录必须遵循 <lang-code>.lproj 的命名方式,且字符串目录文件必须命名为 InfoPlist.strings(大写 I 和 P)。在大多数情况下,语言代码应为符合 BCP 47 的双字母代码。

对于上面所示的 Info.plist 示例,de.lproj > InfoPlist.strings 文件看起来可能像这样:

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 获取这些文件:

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

授权 (Entitlement) 是一种特殊的 Apple 配置键值对,作为一种权利或特权,授予你的应用特定功能,例如作为用户的默认电子邮件客户端以及使用应用沙盒 (App Sandbox) 功能。

授权在你的应用程序签名时应用。更多信息请参见代码签名文档

要定义应用程序所需的授权,你必须创建授权文件并配置 Tauri 使用它。

  1. src-tauri 文件夹中创建一个 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/>
</dict>
</plist>
  1. 配置 Tauri 使用 Entitlements.plist 文件:
tauri.conf.json
{
"bundle": {
"macOS": {
"entitlements": "./Entitlements.plist"
}
}
}

更多信息请参见官方文档

默认情况下,你的 Tauri 应用程序支持 macOS 10.13 及更高版本。如果你使用的 API 需要较新的 macOS 系统并希望在应用包中强制执行该要求,可以配置 tauri.conf.json > bundle > macOS > minimumSystemVersion 值。

tauri.conf.json
{
"bundle": {
"macOS": {
"minimumSystemVersion": "12.0"
}
}
}

如果你的应用程序需要额外的 macOS 框架才能运行,可以在 tauri.conf.json > bundle > macOS > frameworks 配置中列出它们。框架列表可以包含系统框架、自定义框架或 dylib 文件。

tauri.conf.json
{
"bundle": {
"macOS": {
"frameworks": [
"CoreAudio",
"./libs/libmsodbcsql.18.dylib",
"./frameworks/MyApp.framework"
]
}
}
}

你可以使用 tauri.conf.json > bundle > macOS > files 配置将自定义文件添加到你的应用程序包中。该配置将目标路径映射到相对于 tauri.conf.json 文件的源路径。这些文件将被添加到 <product-name>.app/Contents 文件夹中。

tauri.conf.json
{
"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


© 2026 Tauri 贡献者。CC-BY / MIT