yx_tracking_ios/YXTrackingSDK/YXTrackingSQLiteManager.swift

76 lines
2.5 KiB
Swift

//
// YXTrackingSQLiteManager.swift
// YXTrackingSDK
//
// Created by 1234 on 2026/2/6.
//
import UIKit
import SQLite3
class YXTrackingSQLiteManager: NSObject {
static let shared = YXTrackingSQLiteManager()
///
private let fileManager = FileManager.default
///
var documentsDirectory: URL {
fileManager.urls(for: .documentDirectory, in: .userDomainMask).first!
}
///
var fileURL: URL {
documentsDirectory.appendingPathComponent("tracking.json")
}
/// JSON
let encoder = JSONEncoder()
/// JSON
let decoder = JSONDecoder()
///
class func addTrackingData(data: EventRequestResult) {
var trackingData: [EventRequestResult] = []
trackingData.append(contentsOf: readTrackingData())
trackingData.append(data)
let data = try! YXTrackingSQLiteManager.shared.encoder.encode(trackingData)
try! data.write(to: YXTrackingSQLiteManager.shared.fileURL, options: .atomic)
}
///
class func readTrackingData() -> [EventRequestResult] {
var trackingData: [EventRequestResult] = []
/// fileURL
guard YXTrackingSQLiteManager.shared.fileManager.fileExists(atPath: YXTrackingSQLiteManager.shared.fileURL.path) else {
return trackingData
}
let data = try! Data(contentsOf: YXTrackingSQLiteManager.shared.fileURL)
let array = try! YXTrackingSQLiteManager.shared.decoder.decode([EventRequestResult].self, from: data)
trackingData.append(contentsOf: array)
return trackingData
}
///
class func deleteTrackingData() {
guard YXTrackingSQLiteManager.shared.fileManager.fileExists(atPath: YXTrackingSQLiteManager.shared.fileURL.path) else {
YXTracking.shared.debug(message: "SDK tracking data file not exist!")
return
}
try! YXTrackingSQLiteManager.shared.fileManager.removeItem(at: YXTrackingSQLiteManager.shared.fileURL)
YXTracking.shared.debug(message: "SDK tracking data file deleted!")
}
///
class func getTrackingDataCount() -> Int {
var trackingData: [EventRequestResult] = []
trackingData.append(contentsOf: readTrackingData())
return trackingData.count
}
}