XuqmGroup-iOSSDK/Sources/XuqmSDK/XuqmModuleRegistration.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

65 行
2.3 KiB
Swift

@_exported import XuqmCoreSDK
@_exported import XuqmImSDK
@_exported import XuqmPushSDK
@_exported import XuqmUpdateSDK
@_exported import XuqmLicenseSDK
@_exported import XuqmFileSDK
@_exported import XuqmBugCollectSDK
import Foundation
/// Auto-registers all feature module hooks with XuqmSDK.shared.
/// Import `XuqmSDK` to get the full SDK experience (backward compatible).
extension XuqmSDK {
/// Register all module hooks. Called automatically when any module is first used.
public func registerModuleHooks() {
// Note: licenseReader hook removed autoInitialize now reads config.xuqm directly via ConfigFileReader.
// Initialize hook auto-start push and bugcollect if configured
onInitialize = { @MainActor config in
if config.autoRegisterPush {
Task { @MainActor in
try? await PushSDK.shared.start()
}
}
// BugCollect
BugCollectSDK.shared.startCrashCapture()
BugCollectSDK.shared.startQueue()
}
// Login hook connect IM and register push token
onLogin = { @MainActor userId, userSig in
try await ImSDK.shared.login(userId, userSig)
if let token = XuqmSDK.shared.cachedDeviceToken {
try await PushSDK.shared.registerToken(token, userId: userId)
}
}
// Logout hook disconnect IM and unregister push
onLogout = { @MainActor userId in
ImSDK.shared.disconnect()
try await PushSDK.shared.unregisterToken(userId: userId)
}
// Device token hook register with push service
onDeviceToken = { @MainActor token, userId in
try await PushSDK.shared.registerToken(token, userId: userId)
}
}
}
/// Convenience initializer that auto-registers module hooks.
/// This provides backward compatibility for code that does `import XuqmSDK`.
@MainActor
public enum XuqmSDKSetup {
private static var hooksRegistered = false
/// Ensure module hooks are registered. Idempotent.
public static func ensureHooksRegistered() {
guard !hooksRegistered else { return }
hooksRegistered = true
XuqmSDK.shared.registerModuleHooks()
}
}