# DuooomiBleSDK (iOS) 纯原生 Swift BLE SDK,零第三方依赖。 ## 集成 ```swift // Package.swift dependencies: [ .package(path: "../duooomi-ios-sdk") ] ``` ## 初始化 ```swift let sdk = DuooomiBleSDK(config: .init( apiKey: "your-api-key" // 必填 // apiHost: URL(...)!, // 默认 https://api.mixvideo.bowong.cc // cdnHost: "https://cdn.bowong.cc/", // 默认 // firmwareIdentifier: "duomi", // 默认 // firmwareStatus: "DRAFT" // 默认 )) ``` ## API ### 扫描 | 方法 | 返回 | 说明 | |------|------|------| | `scan()` | `Void` | 开始扫描,结果通过 `discoveredDevices` 观察 | | `stopScan()` | `Void` | 停止扫描 | ### 连接 | 方法 | 返回 | 说明 | |------|------|------| | `connect(deviceId: String)` | `DiscoveredDevice` | 连接设备 | | `disconnect()` | `Void` | 断开连接 | | `getConnectedDevices()` | `[DiscoveredDevice]` | 获取系统已连接设备 | ### 设备命令 | 方法 | 返回 | 说明 | |------|------|------| | `getDeviceInfo()` | `DeviceInfo` | 品牌、容量、电量、型号 | | `getVersion()` | `VersionInfo` | 固件版本 | | `bind(userId: String)` | `BindingResponse` | 绑定设备,返回 sn + 文件列表。**绑定后才能查看设备文件** | | `unbind(userId: String)` | `UnbindResponse` | 解绑设备。**解绑后该账号的设备文件将被删除** | | `deleteFile(key: String)` | `DeleteFileResponse` | 删除设备上的单个文件 | ### 文件传输 | 方法 | 返回 | 说明 | |------|------|------| | `transferMedia(fileUrl: String)` | `Void` | 输入文件 URL(mp4/jpg/png),内部自动完成 ANI 转换 → prepare → 传输。进度通过 `transferProgress` 观察 | ### 固件升级 | 方法 | 返回 | 说明 | |------|------|------| | `fetchLatestFirmware(identifier:status:)` | `FirmwareInfo?` | 查询最新固件,nil 表示无可用版本 | | `upgradeFirmware(fileUrl: String)` | `Void` | OTA 传输固件包到设备 | ```swift // 1. 查询最新固件 let info = try await sdk.fetchLatestFirmware() // 2. OTA 升级 if let info { try await sdk.upgradeFirmware(fileUrl: info.fileUrl) } ``` ### 可观察状态 | 属性 | 类型 | 说明 | |------|------|------| | `btState` | `ConnectionState` | idle / scanning / connecting / connected / disconnecting / disconnected | | `discoveredDevices` | `[DiscoveredDevice]` | 扫描到的设备列表 | | `connectedDevice` | `DiscoveredDevice?` | 当前连接设备 | | `deviceInfo` | `DeviceInfo?` | 设备信息 | | `version` | `String` | 固件版本 | | `isActivated` | `Bool` | 是否已绑定 | | `transferProgress` | `Int` | 传输进度 0-100 | | `error` | `String?` | 最近错误 | ### 数据类型 ```swift // FirmwareInfo — fetchLatestFirmware 返回 public struct FirmwareInfo { let version: String // 版本号 let fileUrl: String // 固件下载地址 let description: String? // 描述 let fileSize: String? // 文件大小(字节字符串) let fileMd5: String? // MD5 校验 let identifier: String? // 设备标识 let status: String? // DRAFT / PUBLISHED } // DeviceInfo — getDeviceInfo 返回 public struct DeviceInfo { let name: String // 设备名 let brand: String // 品牌 let size: String // 屏幕尺寸 let powerlevel: Int // 电量百分比 let allspace: Int // 总存储(字节) let freespace: Int // 可用存储(字节) } // BindingResponse — bind 返回 public struct BindingResponse { let success: Int // 1=成功 let sn: String // 设备序列号 let contents: [String] // 设备文件 key 列表 } ``` ## Info.plist ```xml NSBluetoothAlwaysUsageDescription This app needs Bluetooth to communicate with your device ``` ## 技术规格 - iOS 16.0+ / Swift 5.9+ / 零依赖 - 公开 API @MainActor,BLE 操作专用串行队列