From cb02d8e3ba8485d991b68dfb400b5ec6af282936 Mon Sep 17 00:00:00 2001 From: AbhijeetMallick Date: Sat, 27 Apr 2024 03:30:53 +0530 Subject: [PATCH] Handle deleting health events on app version change, and handling a crash due to 'Unexpectedly found nil while implicitly unwrapping an Optional value' --- Sources/Tracker/Health/HealthTracker.swift | 18 +++++++++++++----- Sources/Tracker/Tracker.swift | 7 ++++--- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/Sources/Tracker/Health/HealthTracker.swift b/Sources/Tracker/Health/HealthTracker.swift index a2cdee9..1e5fd6e 100644 --- a/Sources/Tracker/Health/HealthTracker.swift +++ b/Sources/Tracker/Health/HealthTracker.swift @@ -42,15 +42,17 @@ final class HealthTracker { queue.async { let trackeVia: TrackedVia = Tracker.healthTrackingConfigs.trackedVia == .both ? .both : .external - var events: [HealthAnalysisEvent]! + var healthAnalysisEvents: [HealthAnalysisEvent]? if Tracker.healthTrackingConfigs.trackedVia == .both { - events = self._persistence.fetchAll() + healthAnalysisEvents = self._persistence.fetchAll() + } else { - events = self._persistence.deleteWhere(HealthAnalysisEvent.Columns.trackedVia, + healthAnalysisEvents = self._persistence.deleteWhere(HealthAnalysisEvent.Columns.trackedVia, value: trackeVia.rawValue) } - - guard !events.isEmpty else { return } + guard let events = healthAnalysisEvents, !events.isEmpty else { + return + } let instantEvents = events.filter { $0.eventType.rawValue == TrackerConstant.EventType.instant.rawValue } for instantEvent in instantEvents { @@ -108,4 +110,10 @@ final class HealthTracker { } return nil } + + func deleteHealthDataOnAppUpgrade() { + if let doesTableExist = _persistence.doesTableExist(with: HealthAnalysisEvent.description), doesTableExist { + _persistence.deleteAll() + } + } } diff --git a/Sources/Tracker/Tracker.swift b/Sources/Tracker/Tracker.swift index eacec11..4fc5d69 100644 --- a/Sources/Tracker/Tracker.swift +++ b/Sources/Tracker/Tracker.swift @@ -80,7 +80,7 @@ public final class Tracker { self._dataSource = dataSource self.delegate = delegate self.observeAppStateChanges() - self.flushOnAppUpgrade() + self.deleteHealthDataOnAppUpgrade() } @discardableResult @@ -283,12 +283,13 @@ public final class Tracker { } /// Flushes health events, being tracked via Clickstream, in case of an app upgrade. - private func flushOnAppUpgrade() { + private func deleteHealthDataOnAppUpgrade() { Tracker.queue.async { [weak self] in guard let checkedSelf = self else { return } let appVersionChecker = DefaultAppVersionChecker(currentAppVersion: checkedSelf.commonProperties?.app.version) if appVersionChecker.hasAppVersionChanged() { + print("hasAppVersionChanged yes ", .critical) // Delete health events being tracked via Clickstream - checkedSelf.healthTracker.flushFunnelEvents() + checkedSelf.healthTracker.deleteHealthDataOnAppUpgrade() } } }