XuqmGroup-iOSSDK/Sources/XuqmBugCollectSDK/Fingerprint.swift
XuqmGroup 227bc66bfd feat: 添加 iOS BugCollect 崩溃收集模块
新增模块:XuqmBugCollectSDK
- BugCollectSDK: 主入口,错误捕获 API
- CrashCapture: 崩溃捕获(NSException + POSIX 信号)
- IssueEvent/LogEvent: 数据模型
- Fingerprint: 错误指纹计算(SHA-256)
- LogQueue: 内存队列 + 定时上传
- LogStorage: 崩溃文件持久化
- LogUploader: HTTP 上传到服务端
- FunnelTracker: 漏斗追踪

功能:
- captureError/captureCrash 捕获错误
- addBreadcrumb 添加面包屑
- event 记录自定义事件
- warn/info 日志级别记录
- 自动初始化(onInitialize hook)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-19 03:38:22 +08:00

34 行
1.2 KiB
Swift

此文件含有模棱两可的 Unicode 字符

此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。

import Foundation
import CryptoKit
///
public enum Fingerprint {
///
public static func compute(type: String, message: String, stacktrace: String) -> String {
let normalizedMessage = normalizeMessage(message)
let topFrames = extractTopFrames(stacktrace, count: 3)
let payload = "\(type):\(normalizedMessage):\(topFrames)"
let data = Data(payload.utf8)
let hash = SHA256.hash(data: data)
return hash.map { String(format: "%02x", $0) }.joined()
}
/// N hex H
private static func normalizeMessage(_ message: String) -> String {
var result = message
//
result = result.replacingOccurrences(of: #"\d+"#, with: "N", options: .regularExpression)
// hex
result = result.replacingOccurrences(of: #"[0-9a-fA-F]{8,}"#, with: "H", options: .regularExpression)
return result
}
///
private static func extractTopFrames(_ stacktrace: String, count: Int) -> String {
let lines = stacktrace.split(separator: "\n").prefix(count)
return lines.joined(separator: "|")
}
}