用途:为 iOS 和 Android 构建高质量 Expo 原生模块,覆盖视图、API、数据编组、共享对象、文档与验证。
主要能力与规范:以现代 Web 模块(如 std:kv-storage、clipboard)为设计参考,追求 100% 向后兼容,为单平台功能保留逃生通道;避免多余抽象,直接暴露原生能力;能用同步方法时不用异步;API 选项优先用字符串联合类型而非布尔标志、枚举或多参数,例如用 capture({ quality: 'high' | 'medium' | 'low' }) 替代 capture({ isHighQuality: boolean });用可选性做可用性检查,如 snapshot.capture?.(),而非额外的 isAvailable 函数或常量。
平台与架构:仅支持新架构,绝不支持旧版 React Native 架构;始终只使用 Expo Modules API;优先 Swift 和 Kotlin。
视图:参考 BaseUI、Radix 等 Web 组件库;区分控件与展示组件,控件交互性更强,展示组件更声明式;优先在视图上使用函数,而非 useImperativeHandle 加 findNodeHandle;记得在模块中导出视图。
数据编组:用 @retroactive Convertible 和 AnyArgument 在 Swift 类型与字典间转换,无需为每种类型写自定义序列化,即可跨边界传递复杂数据结构;JS 值与 Swift 值一致时使用简写,如 Property("__typename") { $0.__typename }。
共享对象:用于在 JS 中共享长生命周期原生实例,例如让解码后的位图跨 React 组件存活,避免组件每次挂载都新建原生实例。
AppDelegate 交互:实现 ExpoAppDelegateSubscriber 协议响应应用生命周期事件,并在 expo-module.config.json 的 apple.appDelegateSubscribers 中注册。
生态集成:创建 Config Plugin 配置权限与授权;权限 API 遵循 Expo 权限模型并实现 hooks;说明在 Expo Go 中不可用的情形并链接 dev client 说明;可考虑开发 devtools 插件,优先 Bun CLI 而非 UI;涉及启动应用或深链的功能可加 Expo Router 集成。
文档:在类型定义中标注函数与常量的 OS 版本可用性;若存在 isAvailable() 之类函数,需在文档中解释其存在原因及可能返回 false 的场景(如模拟器或特定 OS 版本)。
验证:在 Expo 应用中运行 yarn expo run:ios --no-bundler 无头编译模块,确认无编译错误。
限制:资料未提供具体收费、价格、平台支持范围或效果数据。