# 智能会议记录系统 - 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` 环境变量 这些修改向后兼容,不影响原有开发模式。