// // AppDelegate.swift // GLKittutorial // // Created by Mathieu Labbe on 2020-12-28. // import UIKit import ARKit func setDefaultsFromSettingsBundle() { let plistFiles = ["Root", "Mapping", "Assembling"] for plistName in plistFiles { //Read PreferenceSpecifiers from Root.plist in Settings.Bundle if let settingsURL = Bundle.main.url(forResource: plistName, withExtension: "plist", subdirectory: "Settings.bundle"), let settingsPlist = NSDictionary(contentsOf: settingsURL), let preferences = settingsPlist["PreferenceSpecifiers"] as? [NSDictionary] { for prefSpecification in preferences { if let key = prefSpecification["Key"] as? String, let value = prefSpecification["DefaultValue"] { //If key doesn't exists in userDefaults then register it, else keep original value if UserDefaults.standard.value(forKey: key) == nil { UserDefaults.standard.set(value, forKey: key) NSLog("registerDefaultsFromSettingsBundle: Set following to UserDefaults - (key: \(key), value: \(value), type: \(type(of: value)))") } } } } else { NSLog("registerDefaultsFromSettingsBundle: Could not find Settings.bundle") } } } @main class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { // Always set Version to default let defaults = UserDefaults.standard defaults.removeObject(forKey: "Version") setDefaultsFromSettingsBundle() // Override point for customization after application launch. if !ARWorldTrackingConfiguration.supportsFrameSemantics(.sceneDepth) { // Ensure that the device supports scene depth and present // an error-message view controller, if not. let storyboard = UIStoryboard(name: "Main", bundle: nil) window?.rootViewController = storyboard.instantiateViewController(withIdentifier: "unsupportedDeviceMessage") } return true } // MARK: UISceneSession Lifecycle func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { // Called when a new scene session is being created. // Use this method to select a configuration to create the new scene with. return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) } func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set) { // Called when the user discards a scene session. // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. // Use this method to release any resources that were specific to the discarded scenes, as they will not return. } }