主要改动: - 新增 fetchLatestFirmware/upgradeFirmware/tryReportPendingUpgrade 三段 OTA 接口,对齐 expo bindDeviceWithOrchestration 行为 - bind 仅做硬绑+getVersion,软绑/对账上报/拉最新固件搬到 fetchLatestFirmware 内部串;软绑失败自动硬解回滚 - UpgradeRecord 复合主键 (sn, firmwareId) 持久化 + sn 级 in-flight 互斥 - DuooomiBleSDKDelegate 新增 didUpdateUpgradeRecords,集成方 可观察对账上报结果(reported/outcome 状态) - DuooomiBleSDK 主类按职责拆 5 个 extension 文件,公开 API 不变 - TargetFirmware 简化为只取必要字段 + 新增 forceUpgrade - scanNamePrefix 改为必填 String - demo 秘钥移至本地 DemoSecrets.swift (gitignored) - README 重写:完整 OTA 流程示例 + 上报状态判定表 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
45 lines
1.4 KiB
Swift
45 lines
1.4 KiB
Swift
import Foundation
|
||
|
||
/// 升级对账结果。
|
||
/// - `success`: 设备实际版本 == 目标版本,已成功上报
|
||
/// - `versionMismatch`: 实际版本 ≠ 目标版本,已上报 failure
|
||
/// - `nil`: 30 天 TTL 过期未上报,保留为审计轨迹
|
||
public enum UpgradeOutcome: String, Codable, Equatable {
|
||
case success
|
||
case versionMismatch = "version_mismatch"
|
||
}
|
||
|
||
/// OTA 升级记录。复合主键 `(sn, firmwareId)`。
|
||
/// 与 RN `bleStore.upgradeRecords` 1:1 对齐。
|
||
public struct UpgradeRecord: Codable, Equatable {
|
||
public let sn: String
|
||
public let firmwareId: String
|
||
public let fromVersion: String
|
||
public let targetVersion: String
|
||
/// 触发 OTA 烧录的时间戳(毫秒,与 RN `Date.now()` 同口径)
|
||
public let triggeredAt: Int64
|
||
public let reported: Bool
|
||
public let reportedAt: Int64?
|
||
public let outcome: UpgradeOutcome?
|
||
|
||
public init(
|
||
sn: String,
|
||
firmwareId: String,
|
||
fromVersion: String,
|
||
targetVersion: String,
|
||
triggeredAt: Int64,
|
||
reported: Bool = false,
|
||
reportedAt: Int64? = nil,
|
||
outcome: UpgradeOutcome? = nil
|
||
) {
|
||
self.sn = sn
|
||
self.firmwareId = firmwareId
|
||
self.fromVersion = fromVersion
|
||
self.targetVersion = targetVersion
|
||
self.triggeredAt = triggeredAt
|
||
self.reported = reported
|
||
self.reportedAt = reportedAt
|
||
self.outcome = outcome
|
||
}
|
||
}
|