用途
本技能面向使用 Makepad 2.0 构建应用的开发者,重点解决应用结构搭建与 Rust 代码集成问题。Makepad 2.0 应用由 Rust 代码与 Splash 脚本两部分组成:Rust 侧负责应用生命周期、事件路由和业务逻辑,Splash 侧负责 UI 结构、模板和内联交互。当涉及 makepad app、makepad getting started、app_main!、App::run、MatchEvent、AppMain 等主题时触发。
主要能力
- 提供最小可运行应用模板,包含 Cargo.toml 与 src/app.rs 示例。
- 说明关键组件:app_main!(App) 入口注册、script_mod! 启动脚本、App::run 初始化顺序、#[derive(Script, ScriptHook)] 结构体标注、MatchEvent 动作处理、AppMain 事件分发。
- 覆盖 Rust 与 Splash 双向通信:script_eval! 更新状态并触发渲染、script_apply_eval! 修改控件属性、Splash 内联事件处理器(on_click、on_return、on_render)。
- 提供从 Rust 访问控件的写法(button、label、text_input 及嵌套访问)。
- 说明运行方式与命令行参数:cargo run、--hot 热重载、--stdin-loop、--linux-backend。
- 介绍 Makepad Studio 调试 Splash 的方式,包括 makepad.splash 文件、std.println 调试输出、错误显示与 hub API。
- 提供音频输入输出 API(CxMediaApi)、跨线程数据流模式与各平台音频实现说明。
- 汇总 macOS 系统集成模式:NSStatusBar 菜单栏图标、音频设备 ID 获取、CGEvent 全局热键、跨线程通信。
使用方式
技能文档要求先阅读本地参考文件:./references/app-boilerplate.md(完整应用模板与 Cargo.toml)和 ./references/rust-splash-integration.md(Rust 与 Splash 通信模式)。若文件读取失败,则基于 SKILL.md 模式与内置知识回答。
应用初始化顺序为:注册主题(可选)→ 注册基础控件 → 注册自定义控件模块(如有)→ 从脚本模块构建 App。事件处理需在 handle_event 中调用 self.match_event(cx, event),否则 MatchEvent 不生效。
运行命令包括:cargo run -p my-app(开发)、cargo run -p my-app -- --hot(热重载,仅影响 Splash DSL)、cargo run -p my-app --release(发布)、cargo makepad run -p my-app(移动端/Web)。
适用场景
适用于 Makepad 2.0 应用从零搭建、事件与状态管理、Rust 与 Splash 混合开发、音频处理、以及 macOS 原生系统集成(菜单栏、全局热键、录音)等场景。
限制
- Splash VM 不支持断点调试或单步执行,调试主要依赖 std.println()。
- 无 AST dump 标志,检查解析结果需在 Rust 源码(script/)中添加日志。
- 音频 API 仅限 Rust,未暴露给 Splash 脚本。
- 热重载仅作用于 Splash DSL,Rust 代码改动仍需重新编译。
- macOS 集成中不应使用 objc2 crate,会与 Makepad 的 NSApplication 冲突;不应调用 CGEventTapEnable,会反而禁用事件监听。
- 文档未提供收费、价格等信息。