diff --git a/Shared/AppDelegate.swift b/Shared/AppDelegate.swift index 767ef55..73c0c69 100644 --- a/Shared/AppDelegate.swift +++ b/Shared/AppDelegate.swift @@ -11,11 +11,16 @@ import UIKit import SwiftUI class AppDelegate: NSObject, UIApplicationDelegate { + static var pendingDeepLinkURL: URL? + private let savedOnboardingData = UserDefaultsStore.getOnboarding() @AppStorage(UserDefaultsStore.Keys.theme.rawValue, store: GroupUserDefaults.groupDefaults) private var theme: Theme = .system @MainActor func application(_ application: UIApplication, willFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool { + if let url = launchOptions?[.url] as? URL { + AppDelegate.pendingDeepLinkURL = url + } DataController.shared.removeNoForDates() DataController.shared.fillInMissingDates() UNUserNotificationCenter.current().delegate = self diff --git a/Shared/FeelsApp.swift b/Shared/FeelsApp.swift index ad14be3..258dd4f 100644 --- a/Shared/FeelsApp.swift +++ b/Shared/FeelsApp.swift @@ -63,9 +63,7 @@ struct FeelsApp: App { .environmentObject(iapManager) } .onOpenURL { url in - if url.scheme == "feels" && url.host == "subscribe" { - showSubscriptionFromWidget = true - } + handleDeepLink(url) } .alert("Data Storage Unavailable", isPresented: $showStorageFallbackAlert) { @@ -77,6 +75,12 @@ struct FeelsApp: App { if SharedModelContainer.isUsingInMemoryFallback { AnalyticsManager.shared.track(.storageFallbackActivated) } + if let url = AppDelegate.pendingDeepLinkURL { + AppDelegate.pendingDeepLinkURL = nil + DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) { + handleDeepLink(url) + } + } } // Lock screen overlay @@ -141,5 +145,10 @@ struct FeelsApp: App { } } } - + + private func handleDeepLink(_ url: URL) { + if url.scheme == "feels" && url.host == "subscribe" { + showSubscriptionFromWidget = true + } + } }