Files
duooomi-ble-sdk/wrappers/ios/README.md
2026-04-08 17:04:29 +08:00

1.8 KiB
Raw Blame History

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 调用蓝牙能力。

最小使用示例

try DuooomiBleRuntime.shared.start(in: view)

Task {
  let result = try await DuooomiBleManager.shared.connect(deviceId: "device-id")
  print(result)
}

如果是扫描,仍然沿用监听方式:

DuooomiBleManager.shared.onDiscoveredDevicesChange = { devices in
  print(devices)
}

DuooomiBleManager.shared.scan()

如果宿主需要显式初始化 Brownfield

如果你的宿主工程不能被 DuooomiBleRuntime 自动识别出 ReactNativeHostManagerReactNativeView,可以显式传入初始化逻辑:

try DuooomiBleRuntime.shared.start(
  in: view,
  initializeHost: {
    ReactNativeHostManager.shared.initialize()
  },
  createReactNativeView: {
    ReactNativeView()
  }
)

说明

  • DuooomiBleRuntime 负责启动 Expo Brownfield 对应的 RN/JS 运行时
  • DuooomiBleManager 的大部分命令方法为 async throws,例如 connectbindtransferFile
  • scan / stopScan 仍然保持事件监听方式
  • DuooomiBleManager 也会订阅 ble/sdk/BleSDK.ts 中定义的 shared state 并转发给宿主

如果只调用 DuooomiBleManager 而没有先启动 DuooomiBleRuntimeJS 侧的 bleSDK.initialize() 不会执行,消息也不会被处理。