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:
@@ -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` 环境变量
|
||||
|
||||
这些修改向后兼容,不影响原有开发模式。
|
||||
Reference in New Issue
Block a user