应用端实验室桌面应用
00 / 00

配置桌面应用

配置 01MVP Desktop 的应用身份、环境变量、窗口、图标、CSP 和后端 origin

把模板改成自己的桌面应用,第一步不是写功能代码,而是改配置。应用身份、环境变量、后端 origin 这些东西不定下来,登录跑不通,本地数据会存错位置,打包出来的安装包也是模板的名字。

下面按优先级走一遍。

你将学到

  • 桌面应用的"身份"是什么,为什么 identifier 一旦发布就不能改
  • 如何设置开发版和正式版的隔离
  • 桌面端环境变量怎么写、在哪校验
  • 后端 origin 和 CSP 如何影响登录和网络请求
  • 窗口尺寸和图标的配置位置

应用身份:productName、identifier、version

桌面应用比 Web 多了一层"系统身份"。操作系统用这三项来识别你的应用:

src-tauri/tauri.conf.json
{
  "productName": "01MVP Desktop",
  "version": "0.1.0",
  "identifier": "com.01mvp.desktop.template"
}
  • productName — 用户在菜单栏、Dock、任务栏看到的名字。
  • version — 安装包和自动更新依赖的版本号,遵循 semver。
  • identifier — 系统级别的唯一标识。macOS 用它做 Keychain namespace、App Sandbox 容器和签名;Windows 用它做注册表和 app data 路径;Tauri 用它定位本地数据目录。

为什么 identifier 这么重要?因为它不只是一行配置——它直接决定操作系统怎么对待你的应用:

  • 本地数据目录 — Tauri 的 app data、preferences、日志都存在以 identifier 命名的路径下
  • 系统权限 — macOS 的 Keychain、文件访问权限、通知都绑定到 identifier
  • 自动更新 — 更新服务用 identifier 判断"这是同一个应用的新版本"还是"这是一个不同的应用"
  • 签名和公证 — 代码签名证书和 identifier 一起构成应用的可信身份

改造成自己的应用时,把三项都换成你自己的:

字段示例说明
productNameAcme Studio用户看到的应用名
version0.1.0发布时递增
identifiercom.acme.studio反向域名格式,全局唯一

identifier 一旦开始分发就不要改。改了以后操作系统会把它当成一个全新应用——用户本地数据、Keychain 凭据、权限记录、更新链路全部丢失。

开发版和正式版隔离

推荐开发和正式环境用不同的身份,避免测试数据污染正式用户:

开发版正式版
应用名Acme Studio DevAcme Studio
identifiercom.acme.studio.devcom.acme.studio
API本地或 stagingproduction
签名Apple Development 或 ad-hocDeveloper ID / Windows code signing

分开之后,两套应用各有独立的数据目录和权限记录,可以在同一台机器上共存。

环境变量

桌面端前端通过 VITE_DESKTOP_* 前缀的环境变量获取配置:

apps/desktop/.env.local
VITE_DESKTOP_APP_NAME="Acme Studio"
VITE_DESKTOP_SERVER_URL="http://localhost:7001/api"
VITE_DESKTOP_WEB_URL="http://localhost:7001"

校验逻辑集中在 apps/desktop/src/config/desktop-env.ts,应用启动时就会检查这些变量是否合法。如果缺了或者格式不对,应用会在控制台报错而不是静默失败——这比运行到一半才发现请求地址不对要好得多。

规则很简单:

  • VITE_DESKTOP_SERVER_URL 必须指向 /api 路径
  • VITE_DESKTOP_WEB_URL 是网页入口,不带 /api
  • 所有 VITE_ 前缀的变量会打包进前端 bundle,不要放服务端 secret

后端 origin

桌面端的 WebView 通过 HTTP 请求和后端通信。但后端不是随便谁都能调的——它需要验证请求来源是否可信。这个验证用于两个地方:CORS 中间件拦截跨域请求,Better Auth 校验登录回调的 origin。

把桌面端的 origin 加到白名单里:

packages/config/.env
DESKTOP_ALLOWED_ORIGINS="http://localhost:7410,http://127.0.0.1:7410,tauri://localhost,http://tauri.localhost"

这个变量被两个地方消费:

products/01mvp/apps/web/src/server/hono.ts   # CORS 中间件
products/01mvp/packages/auth/src/index.ts     # Better Auth trusted origins

本地开发保留默认值即可。如果你在生产环境使用了自定义的 Tauri origin 或 webview origin,记得把它加到列表里,否则登录会失败。

窗口配置

窗口尺寸在 tauri.conf.json 中定义:

src-tauri/tauri.conf.json
{
  "app": {
    "windows": [
      {
        "label": "main",
        "title": "01MVP Desktop",
        "width": 1180,
        "height": 780,
        "minWidth": 1024,
        "minHeight": 720
      }
    ]
  }
}

模板默认按桌面工作台设计。根据你的产品类型调整:

  • 工具型工作台 — 保持 1100px 以上宽度
  • 菜单栏小工具 — 单独设计小窗口,不沿用工作台布局
  • 编辑器/内容工具 — 增大默认高度,保留可调整窗口

CSP

Content Security Policy 也在 tauri.conf.json 中。CSP 控制 WebView 里允许加载哪些资源——脚本、样式、图片、网络请求都受它约束。生产环境只放行必要的来源:

{
  "security": {
    "csp": "default-src 'self'; connect-src ipc: http://ipc.localhost https://01mvp.com http://localhost:* http://127.0.0.1:*; img-src 'self' asset: data:; style-src 'self' 'unsafe-inline'; script-src 'self'; object-src 'none'; frame-ancestors 'none'"
  }
}

新增 API 域名、图片 CDN 或更新服务时,要同步更新 CSP,否则请求会被浏览器拦截。

图标

模板图标在 apps/desktop/src-tauri/icons/icon.png。这是打包时 macOS、Windows、Linux 各尺寸图标的源文件。

改图标时,从一份品牌源文件(建议 1024x1024 PNG)生成所有平台资源。Tauri CLI 提供了 tauri icon 命令可以一键生成各尺寸。分别手工改 macOS、Windows、Linux 图标很容易出现品牌不一致——比如 Dock 上是一个图标,安装包封面是另一个。

下一步

配置完成后,对照改成自己的 App逐项检查,确保所有身份、变量和权限都已就位。

想和其他创造者交流?

这篇文档有问题?