From 128afd86668d8787e55b669e4a61ae727f75409a Mon Sep 17 00:00:00 2001 From: lxm <1274844347@qq.com> Date: Thu, 13 Nov 2025 11:37:03 +0800 Subject: [PATCH] =?UTF-8?q?refactor(BleService):=20=E6=8F=90=E5=8F=96UUID?= =?UTF-8?q?=E8=A7=A3=E6=9E=90=E9=80=BB=E8=BE=91=E5=88=B0=E7=8B=AC=E7=AB=8B?= =?UTF-8?q?=E6=96=B9=E6=B3=95=E5=B9=B6=E5=A2=9E=E5=BC=BA=E6=A0=A1=E9=AA=8C?= =?UTF-8?q?=EF=BC=88=E8=A7=A3=E5=86=B311=E6=9C=8812=E6=97=A5=E5=B4=A9?= =?UTF-8?q?=E6=BA=83=E9=97=AE=E9=A2=98=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将UUID字符串解析逻辑提取到独立的parseCBUUID方法,增加对32位不带短横线UUID的支持,并优化输入校验。移除冗余的try-catch结构,简化主扫描逻辑。 --- .../Sources/ble_service/BleService.swift | 51 ++++++++++++++----- 1 file changed, 37 insertions(+), 14 deletions(-) diff --git a/local_plugins/ble_service/ios/ble_service/Sources/ble_service/BleService.swift b/local_plugins/ble_service/ios/ble_service/Sources/ble_service/BleService.swift index a6914b556..84c3a4a44 100644 --- a/local_plugins/ble_service/ios/ble_service/Sources/ble_service/BleService.swift +++ b/local_plugins/ble_service/ios/ble_service/Sources/ble_service/BleService.swift @@ -282,22 +282,11 @@ private var cmdReplyType: UInt8 = 0 // 处理传入的UUID参数 for uuidStr in uuids { - do { - let cbuuid: CBUUID - if uuidStr.count == 4 { - // 短UUID,直接使用 - cbuuid = CBUUID(string: uuidStr) - } else if uuidStr.count == 36 { - // 完整UUID - cbuuid = CBUUID(string: uuidStr) - } else { - os_log("⚠️ 无效的UUID格式: %{public}@", log: logger, type: .default, uuidStr) - continue - } + if let cbuuid = parseCBUUID(from: uuidStr) { serviceUUIDs.append(cbuuid) os_log("✅ 添加扫描过滤器UUID: %{public}@", log: logger, type: .info, uuidStr) - } catch { - os_log("❌ 构造UUID失败: %{public}@, 错误: %{public}@", log: logger, type: .error, uuidStr, error.localizedDescription) + } else { + os_log("⚠️ 无效的UUID格式或字符: %{public}@", log: logger, type: .error, uuidStr) } } @@ -319,6 +308,40 @@ private var cmdReplyType: UInt8 = 0 } return true } + + /// 验证并解析 UUID 字符串为 CBUUID + /// - Parameter uuidStr: UUID 字符串(支持 4 位短 UUID、36 位完整 UUID;扩展支持 32 位不带短横线 UUID) + /// - Returns: 解析成功返回 CBUUID,否则返回 nil + private func parseCBUUID(from uuidStr: String) -> CBUUID? { + let trimmed = uuidStr.trimmingCharacters(in: .whitespacesAndNewlines) + + // 4 位短 UUID:仅允许十六进制字符,通过正则校验 + if trimmed.count == 4 { + if trimmed.range(of: "^[0-9a-fA-F]{4}$", options: .regularExpression) != nil { + return CBUUID(string: trimmed.lowercased()) + } else { + return nil + } + } + + // 36 位完整 UUID:使用系统 UUID 进行格式校验 + if trimmed.count == 36, let nsuuid = UUID(uuidString: trimmed) { + return CBUUID(nsuuid: nsuuid) + } + + // 32 位完整 UUID(不带短横线):按 8-4-4-4-12 格式插入短横线后校验 + if trimmed.count == 32, + trimmed.range(of: "^[0-9a-fA-F]{32}$", options: .regularExpression) != nil { + let lower = trimmed.lowercased() + let formatted = "\(lower.prefix(8))-\(lower.dropFirst(8).prefix(4))-\(lower.dropFirst(12).prefix(4))-\(lower.dropFirst(16).prefix(4))-\(lower.dropFirst(20))" + if let nsuuid = UUID(uuidString: formatted) { + return CBUUID(nsuuid: nsuuid) + } + } + + // 其他长度不支持 + return nil + } /// 停止扫描 public func stopScan() {