feat: 添加 Tauri Mac 原生应用支持

- 新增 mac-app/ 目录:Tauri 项目结构(Rust 外壳 + sidecar 进程管理)
- 前端添加 Tauri 环境检测,API 调用和 WebSocket 自动适配
- 后端支持 MEETING_DATA_DIR 环境变量指定数据目录
- 新增 /api/meetings/{id}/retranscribe 接口用于重新转录
- 修复轮询超时:2分钟→30分钟,适配长音频
- 添加 .gitignore 排除构建产物
This commit is contained in:
freedakgmail
2026-07-10 00:04:27 +08:00
parent 3ab8f22bae
commit 2752ea4e54
73 changed files with 5465 additions and 17 deletions
+119
View File
@@ -0,0 +1,119 @@
# 智能会议记录系统 - Mac 原生应用
将现有 React + FastAPI 应用打包为 macOS 原生 App。
## 架构
```
Tauri (Rust 外壳)
├── 前端: React (Vite 构建产物嵌入)
└── 后端: Python FastAPI (PyInstaller 打包为 sidecar 二进制)
```
- **前端**: 现有 React 代码通过 Vite 构建后嵌入 Tauri
- **后端**: `main.py` 通过 PyInstaller 打包为单文件二进制,作为 Tauri sidecar 进程运行
- **数据持久化**: 用户数据存储在 `~/Library/Application Support/com.meeting.recorder/data/`
- **麦克风权限**: 通过 Info.plist 配置 NSMicrophoneUsageDescription
## 前置条件
1. **Rust 工具链** (用于编译 Tauri)
```bash
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
source "$HOME/.cargo/env"
```
2. **PyInstaller** (用于打包 Python 后端)
```bash
pip3 install pyinstaller
```
3. **Node.js** (用于构建前端)
- 已有 Node.js 环境即可
## 构建
### 一键构建
```bash
cd mac-app
bash scripts/build.sh
```
### 分步构建
1. **构建前端**
```bash
bash scripts/build_frontend.sh
```
2. **构建后端 sidecar**
```bash
bash scripts/build_backend.sh
```
3. **构建 Tauri App**
```bash
cd mac-app
npm install
npm run build
```
### 开发模式
```bash
cd mac-app
npm install
npm run dev
```
> 注意: 开发模式下后端需要单独启动 (`python3 main.py`)Tauri dev 模式不会自动拉起 sidecar。
## 生成图标
准备一张 1024x1024 的 PNG 图标,然后运行:
```bash
cd mac-app
npx @tauri-apps/cli icon path/to/icon.png
```
这会自动生成所有需要的图标尺寸到 `src-tauri/icons/`。
## 输出
构建完成后:
- **DMG 安装包**: `src-tauri/target/release/bundle/dmg/`
- **App**: `src-tauri/target/release/bundle/macos/`
## 文件结构
```
mac-app/
├── package.json # Tauri CLI 依赖
├── README.md # 本文件
├── scripts/
│ ├── build.sh # 一键构建脚本
│ ├── build_backend.sh # PyInstaller 打包后端
│ └── build_frontend.sh # Vite 构建前端
└── src-tauri/
├── Cargo.toml # Rust 依赖
├── tauri.conf.json # Tauri 配置
├── build.rs # Tauri 构建脚本
├── capabilities/
│ └── default.json # 权限配置 (shell sidecar)
├── icons/ # 应用图标
└── src/
├── main.rs # Rust 入口
└── lib.rs # Sidecar 进程管理
```
## 修改说明
为支持 Tauri 打包,对原项目做了以下修改:
1. **`frontend/src/api/meeting.js`**: 添加 Tauri 环境检测,在 Tauri 中直接连接 `localhost:8501`
2. **`main.py`**: 添加 `get_data_dir()` 函数,支持 `MEETING_DATA_DIR` 环境变量
3. **`database.py`**: Database 初始化支持 `MEETING_DATA_DIR` 环境变量
这些修改向后兼容,不影响原有开发模式。