2752ea4e54
- 新增 mac-app/ 目录:Tauri 项目结构(Rust 外壳 + sidecar 进程管理)
- 前端添加 Tauri 环境检测,API 调用和 WebSocket 自动适配
- 后端支持 MEETING_DATA_DIR 环境变量指定数据目录
- 新增 /api/meetings/{id}/retranscribe 接口用于重新转录
- 修复轮询超时:2分钟→30分钟,适配长音频
- 添加 .gitignore 排除构建产物
120 lines
3.0 KiB
Markdown
120 lines
3.0 KiB
Markdown
# 智能会议记录系统 - 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` 环境变量
|
||
|
||
这些修改向后兼容,不影响原有开发模式。
|