用途:以共享 Rust 库为中心,设计窄而带版本的跨语言 API,并生成 Swift、Kotlin/Android、Python、Ruby、JavaScript/WASM 等绑定,完成集成与端到端验证。
主要能力:固定契约(rustc 版本、目标三元组、MSRV、uniffi 版本与语言工具链版本);在过程宏、UDL、二者混合三种接口定义策略中选择;搭建脚手架与产物边界(如 crate-type = ["lib", "cdylib", "staticlib"]);设计符合 FFI 的公开 API(record 传值、object 表身份、导出错误枚举、限制字符串与集合规模);按语言生成并集成绑定;在 Rust、生成、宿主语言、分发三层验证;按层诊断符号缺失、重复定义、解码失败、对象泄漏、异步挂起等问题。
使用方式:先记录版本与契约,再选择接口策略,注意不要同时使用 uniffi::setup_scaffolding!() 与 uniffi::include_scaffolding!()。Rust 侧门禁命令:cargo fmt --all --check、cargo check --workspace --all-targets --all-features、cargo test --workspace --all-targets --all-features、cargo clippy --workspace --all-targets --all-features -- -D warnings。随后验证绑定可确定性再生成、宿主语言测试、最小消费者项目加载与调用。
适用场景:希望用 Rust 写一次核心逻辑供移动端与浏览器复用,或从 Kotlin、iOS 调用 Rust。
限制:UniFFI 只生成绑定,不负责打包、签名、发布或加载原生库;绑定与 Rust 产物须来自兼容的元数据与配置;各宿主语言命名、异常、空值、集合与生命周期语义与 Rust 不同;WASM 支持不稳定且假定单线程;Miri 无法验证真实外部运行时;不适用于无外部语言消费者的普通 Rust 库、wasm-bindgen/CXX/PyO3 等其它绑定方案,或与 UniFFI 无关的宏编写。