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:
@@ -2,19 +2,69 @@ import SwiftUI
|
||||
import DuooomiBleSDK
|
||||
|
||||
/// Demo 入口:初始化 SDK 并注入到视图树。
|
||||
/// 只需传 apiKey,其余配置(apiHost/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
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user