feat: 重写 SDK 支持 iOS 12.2,移除 async/await 和 Combine

- 所有公开 API 改为 completion handler (Result<T, Error>)
- 状态通知改为 DuooomiBleSDKDelegate 协议
- 移除 Sendable、@MainActor、AsyncStream、CheckedContinuation
- 网络请求改为 URLSession.dataTask 回调
- BLE 通信改为 delegate + 闭包模式
- deployment target 降至 iOS 12.2

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
km2023
2026-04-16 16:59:39 +08:00
parent 79af43cdef
commit 1a7bbdc625
26 changed files with 3211 additions and 944 deletions

View File

@@ -2,19 +2,69 @@ import SwiftUI
import DuooomiBleSDK
/// Demo SDK
/// apiKeyapiHost/cdnHost/firmwareIdentifier/firmwareStatus使
@main
struct DemoApp: App {
@StateObject private var sdk = DuooomiBleSDK(config: .init(
apiKey: ""
))
@StateObject private var viewModel = DemoViewModel()
var body: some Scene {
WindowGroup {
NavigationView {
WrapperTestView()
WrapperTestView(viewModel: viewModel)
}
.environmentObject(sdk)
}
}
}
/// ViewModel SDK callback API DuooomiBleSDKDelegate UI
class DemoViewModel: NSObject, ObservableObject, DuooomiBleSDKDelegate {
let sdk: DuooomiBleSDK
@Published var btState: ConnectionState = .idle
@Published var connectedDevice: DiscoveredDevice? = nil
@Published var discoveredDevices: [DiscoveredDevice] = []
@Published var deviceInfo: DeviceInfo? = nil
@Published var version: String = ""
@Published var isActivated: Bool = false
@Published var transferProgress: Int = 0
@Published var error: String? = nil
override init() {
sdk = DuooomiBleSDK(config: .init(apiKey: ""))
super.init()
sdk.delegate = self
}
// MARK: - DuooomiBleSDKDelegate
func sdk(_ sdk: DuooomiBleSDK, didChangeState state: ConnectionState) {
btState = state
}
func sdk(_ sdk: DuooomiBleSDK, didUpdateDevices devices: [DiscoveredDevice]) {
discoveredDevices = devices
}
func sdk(_ sdk: DuooomiBleSDK, didConnectDevice device: DiscoveredDevice?) {
connectedDevice = device
}
func sdk(_ sdk: DuooomiBleSDK, didUpdateDeviceInfo info: DeviceInfo?) {
deviceInfo = info
}
func sdk(_ sdk: DuooomiBleSDK, didUpdateVersion version: String) {
self.version = version
}
func sdk(_ sdk: DuooomiBleSDK, didChangeActivation isActivated: Bool) {
self.isActivated = isActivated
}
func sdk(_ sdk: DuooomiBleSDK, didUpdateProgress progress: Int) {
transferProgress = progress
}
func sdk(_ sdk: DuooomiBleSDK, didEncounterError error: String?) {
self.error = error
}
}