- 增加了wrapper处理原生app的交互
This commit is contained in:
62
wrappers/ios/README.md
Normal file
62
wrappers/ios/README.md
Normal file
@@ -0,0 +1,62 @@
|
||||
# DuooomiBleWrapper
|
||||
|
||||
该目录由 `pnpm build:ios` 生成,是可以直接交付给 iOS 原生宿主工程使用的 Swift Package。
|
||||
|
||||
## 目录内容
|
||||
|
||||
- `Frameworks/DuooomiBleSDK.xcframework`
|
||||
- `Frameworks/hermesvm.xcframework`
|
||||
- `Sources/DuooomiBleWrapper/DuooomiBleManager.swift`
|
||||
- `Sources/DuooomiBleWrapper/DuooomiBleRuntime.swift`
|
||||
|
||||
## 宿主 App 接入步骤
|
||||
|
||||
1. 将 `dist/ios/DuooomiBleWrapper` 作为本地 Swift Package 引入宿主工程。
|
||||
2. 在宿主 App 的一个长期存在的容器视图里启动 Brownfield 运行时。
|
||||
3. 运行时启动完成后,通过 `DuooomiBleManager.shared` 调用蓝牙能力。
|
||||
|
||||
## 最小使用示例
|
||||
|
||||
```swift
|
||||
try DuooomiBleRuntime.shared.start(in: view)
|
||||
|
||||
Task {
|
||||
let result = try await DuooomiBleManager.shared.connect(deviceId: "device-id")
|
||||
print(result)
|
||||
}
|
||||
```
|
||||
|
||||
如果是扫描,仍然沿用监听方式:
|
||||
|
||||
```swift
|
||||
DuooomiBleManager.shared.onDiscoveredDevicesChange = { devices in
|
||||
print(devices)
|
||||
}
|
||||
|
||||
DuooomiBleManager.shared.scan()
|
||||
```
|
||||
|
||||
## 如果宿主需要显式初始化 Brownfield
|
||||
|
||||
如果你的宿主工程不能被 `DuooomiBleRuntime` 自动识别出 `ReactNativeHostManager` 或 `ReactNativeView`,可以显式传入初始化逻辑:
|
||||
|
||||
```swift
|
||||
try DuooomiBleRuntime.shared.start(
|
||||
in: view,
|
||||
initializeHost: {
|
||||
ReactNativeHostManager.shared.initialize()
|
||||
},
|
||||
createReactNativeView: {
|
||||
ReactNativeView()
|
||||
}
|
||||
)
|
||||
```
|
||||
|
||||
## 说明
|
||||
|
||||
- `DuooomiBleRuntime` 负责启动 Expo Brownfield 对应的 RN/JS 运行时
|
||||
- `DuooomiBleManager` 的大部分命令方法为 `async throws`,例如 `connect`、`bind`、`transferFile`
|
||||
- `scan` / `stopScan` 仍然保持事件监听方式
|
||||
- `DuooomiBleManager` 也会订阅 `ble/sdk/BleSDK.ts` 中定义的 shared state 并转发给宿主
|
||||
|
||||
如果只调用 `DuooomiBleManager` 而没有先启动 `DuooomiBleRuntime`,JS 侧的 `bleSDK.initialize()` 不会执行,消息也不会被处理。
|
||||
Reference in New Issue
Block a user