XuqmGroup-iOSSDK/Sources/XuqmSDK/Update/UpdateSDK.swift
XuqmGroup 1ea512ae10 feat(sdk): 添加即时通讯和推送功能
- 新增 ApiClient 类用于处理 API 请求和响应
- 实现 ImClient 类支持 WebSocket 连接和消息收发
- 添加 ImSDK 类提供完整的即时通讯功能接口
- 定义 ImTypes.swift 包含聊天类型、消息类型等相关数据结构
- 实现 PushSDK 类支持推送通知令牌注册
- 添加基础的 UpdateSDK 框架结构
- 集成登录认证和聊天室订阅功能
- 实现群组管理、好友关系和会话功能
- 支持多种消息类型包括文本、图片、视频、音频等
- 提供历史消息查询和黑名单管理功能
2026-04-28 10:27:23 +08:00

67 行
2.0 KiB
Swift

import Foundation
#if canImport(UIKit)
import UIKit
#elseif canImport(AppKit)
import AppKit
#endif
public struct AppUpdateInfo: Decodable, Sendable {
public let needsUpdate: Bool
public let versionName: String?
public let versionCode: Int?
public let changeLog: String?
public let forceUpdate: Bool?
public let appStoreUrl: String?
}
public struct RnUpdateInfo: Decodable, Sendable {
public let needsUpdate: Bool
public let latestVersion: String
public let downloadUrl: String
public let md5: String
public let minCommonVersion: String
public let note: String
}
@MainActor
public final class UpdateSDK {
public static let shared = UpdateSDK()
private init() {}
public func checkAppUpdate(currentVersionCode: Int) async throws -> AppUpdateInfo {
let config = XuqmSDK.shared.requireConfig()
return try await ApiClient.shared.request(
path: "/api/v1/updates/app/check",
queryItems: [
URLQueryItem(name: "appId", value: config.appId),
URLQueryItem(name: "platform", value: "IOS"),
URLQueryItem(name: "currentVersionCode", value: "\(currentVersionCode)"),
]
)
}
public func openAppStore(url: String) {
guard let storeURL = URL(string: url) else { return }
#if canImport(UIKit)
UIApplication.shared.open(storeURL)
#elseif canImport(AppKit)
NSWorkspace.shared.open(storeURL)
#endif
}
public func checkRnUpdate(moduleId: String, currentVersion: String) async throws -> RnUpdateInfo {
let config = XuqmSDK.shared.requireConfig()
return try await ApiClient.shared.request(
path: "/api/v1/rn/update/check",
queryItems: [
URLQueryItem(name: "appId", value: config.appId),
URLQueryItem(name: "moduleId", value: moduleId),
URLQueryItem(name: "platform", value: "IOS"),
URLQueryItem(name: "currentVersion", value: currentVersion),
]
)
}
}