// // SceneDelegate.swift // EmployeeDirectory // // Created by Matt Bruce on 1/20/25. // import UIKit class SceneDelegate: UIResponder, UIWindowSceneDelegate { var window: UIWindow? let keyAppVersion = "savedAppVersion" func getAppVersion() -> String { if let version = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String, let build = Bundle.main.infoDictionary?["CFBundleVersion"] as? String { return "\(version) (\(build))" } return "Unknown Version" } // Retrieve saved version func getSavedAppVersion() -> String? { return UserDefaults.standard.string(forKey: keyAppVersion) } func saveAppVersion(_ version: String) { UserDefaults.standard.set(version, forKey: keyAppVersion) UserDefaults.standard.synchronize() } func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { // Ensure the scene is properly configured guard let windowScene = (scene as? UIWindowScene) else { return } // Create a new UIWindow let window = UIWindow(windowScene: windowScene) // Set up the root view controller let employeeListVC = EmployeesViewController() let navigationController = UINavigationController(rootViewController: employeeListVC) window.rootViewController = navigationController // get app version let currentAppVersion = getAppVersion() // get app cached version let savedAppVersion = getSavedAppVersion() ?? "none" // check to see if there is a diff and if so clear cache if savedAppVersion != currentAppVersion { EmployeeCacheService.shared.clear() // save the current app version for next run saveAppVersion(currentAppVersion) } // Set the window to the scene self.window = window window.makeKeyAndVisible() } func sceneDidDisconnect(_ scene: UIScene) { // Called as the scene is being released by the system. // This occurs shortly after the scene enters the background, or when its session is discarded. // Release any resources associated with this scene that can be re-created the next time the scene connects. // The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead). } func sceneDidBecomeActive(_ scene: UIScene) { // Called when the scene has moved from an inactive state to an active state. // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive. } func sceneWillResignActive(_ scene: UIScene) { // Called when the scene will move from an active state to an inactive state. // This may occur due to temporary interruptions (ex. an incoming phone call). } func sceneWillEnterForeground(_ scene: UIScene) { // Called as the scene transitions from the background to the foreground. // Use this method to undo the changes made on entering the background. } func sceneDidEnterBackground(_ scene: UIScene) { // Called as the scene transitions from the foreground to the background. // Use this method to save data, release shared resources, and store enough scene-specific state information // to restore the scene back to its current state. } }