一键导入
xxf-webview
使用 XXFWebView 的 Bridge 做 Web 与 Native 双向通信。当用户要在 H5 与 iOS 之间发消息、发请求、注册处理器、约定事件协议,或询问“bridge 怎么接”时使用。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
使用 XXFWebView 的 Bridge 做 Web 与 Native 双向通信。当用户要在 H5 与 iOS 之间发消息、发请求、注册处理器、约定事件协议,或询问“bridge 怎么接”时使用。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
创建 XXF iOS 列表页模板(DiffableDataSource + BaseCollectionViewCell + StatefulView + 分页 ViewModel)
规范 ViewController 与 ViewModel 的分区组织方式。用于治理成员变量和方法过多、顺序混乱、阅读成本高的问题;通过 MARK 分区和职责分层保持代码导航清晰。
处理 XXF iOS 项目中的通用编码任务交付流程。用于 bugfix、功能开发、重构、回归修复等未显式指明测试或 review 的日常 coding 请求;负责自动串起模块 skill、补测、验证、代码审查与风险门禁。
iOS 性能门禁与主动鉴别。针对常规 coding 改动自动识别性能风险(主线程阻塞、列表卡顿、内存抖动、启动耗时、无效并发、过度渲染),并执行最小可行验证与门禁结论,不依赖用户额外提示。
Vibe Coding 通用治理闭环。用于把模糊需求转成可验证交付:先定义问题与边界,再走拼好码优先、最小改动、硬门禁验证、证据化交付和风险结论。适用于需求澄清、实现前规划、AI 协作治理、质量门禁落地。
XXFViewModel MVVM 的 VM 基类与生命周期。当用户要写 ViewModel、绑定 View、处理输入输出流,或询问"XXF 的 MVVM 怎么用"时使用。若出现 ViewModel 成员或方法膨胀、顺序混乱,应联动 `xxf-aaa-class-declaration-guidelines` 做分区治理。
| name | xxf-webview |
| description | 使用 XXFWebView 的 Bridge 做 Web 与 Native 双向通信。当用户要在 H5 与 iOS 之间发消息、发请求、注册处理器、约定事件协议,或询问“bridge 怎么接”时使用。 |
| allowed-tools | Read, Glob, Grep, Edit, Write |
handleWebEvent:H5 -> Native 调用入口
bridge.call('handleWebEvent', request, callback) 发给 NativeWebEventInterface 中暴露该异步方法并分发到 onWebEvent / eventHandlerRegistrynativeEvent:Native -> H5 调用入口
BridgeWebView.postEvent(...) 调 H5 的 nativeEventdsBridge.registerAsyn('nativeEvent', handler) 接收并回包Glob Sources/XXFWebView/**/*.swift
Grep "Bridge|WebEvent|Handler|request|response|direction" in Sources/XXFWebView/
重点文件通常包括:
Sources/XXFWebView/Bridge/BridgeWebView.swiftSources/XXFWebView/Bridge/WebEventInterface.swiftSources/XXFWebView/Bridge/Model/WebEventRequest.swiftSources/XXFWebView/Bridge/Model/WebEventResponse.swiftSources/XXFWebView/Bridge/Model/WebEventDirection.swiftSources/XXFWebView/Bridge/Handler/WebEventHandler*.swift不要凭记忆输出签名,先以当前仓库代码为准。
requestId 字段;如业务需要请求-响应关联,请在 data 中自行携带(例如 data.requestId)WebEventDirection 给 event 加前缀):
nativeToWeb:Native 发给 H5webToNative:H5 发给 Nativeunknown:兜底,不参与正常业务分发nativeEvent)let request = WebEventRequest(
name: "nativeMessage",
direction: .nativeToWeb,
data: ["text": "hello from native"]
)
bridgeWebView.postEvent(
request,
expecting: WebEventResponse<AnyCodable>.self
) { result in
// 处理 H5 回包
}
要点:
postEvent 内部固定调用 channel:nativeEventevent 最终会是带前缀的字符串(如 ntw:nativeMessage)evaluateJavaScript 拼桥接调用handleWebEvent)bridgeWebView.onWebEvent = { request, callback in
// request.event / request.data
callback(.success(data: AnyCodable(["reply": "native received"])))
}
或使用 eventHandlerRegistry 做按事件名分发。
handleWebEvent)const request = {
// 推荐与 Native 统一:带方向前缀(wtn:)
// 若历史包袱使用裸事件名(webMessage),Native 侧需兼容两种写法
event: "wtn:webMessage",
data: { text: "hello from h5" }
}
bridge.call("handleWebEvent", request, function(response) {
// response: { code, message, data }
})
nativeEvent)dsBridge.registerAsyn("nativeEvent", function(request, callback) {
// request: { event, data },event 可能带 ntw: 前缀
callback({
code: 200,
message: "h5 received",
data: { ok: true }
})
})
onWebEvent:单入口直接处理(优先级高)eventHandlerRegistry:按事件名分发(onWebEvent 未设置时生效)WKWebView.evaluateJavaScript 代替 BridgeXxxBridgeEvents.swift:事件名与 payload key 常量XxxWebEventHandler.swift:按能力拆分 handler(登录、路由、设备能力)BridgeDebugLogger.swift:统一收发日志与耗时埋点