FreeAPSApp.swift 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. import CoreData
  2. import Foundation
  3. import SwiftUI
  4. import Swinject
  5. @main struct FreeAPSApp: App {
  6. @Environment(\.scenePhase) var scenePhase
  7. @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
  8. @StateObject var dataController = CoreDataStack.shared
  9. // Dependencies Assembler
  10. // contain all dependencies Assemblies
  11. // TODO: Remove static key after update "Use Dependencies" logic
  12. private static var assembler = Assembler([
  13. StorageAssembly(),
  14. ServiceAssembly(),
  15. APSAssembly(),
  16. NetworkAssembly(),
  17. UIAssembly(),
  18. SecurityAssembly()
  19. ], parent: nil, defaultObjectScope: .container)
  20. var resolver: Resolver {
  21. FreeAPSApp.assembler.resolver
  22. }
  23. // Temp static var
  24. // Use to backward compatibility with old Dependencies logic on Logger
  25. // TODO: Remove var after update "Use Dependencies" logic in Logger
  26. static var resolver: Resolver {
  27. FreeAPSApp.assembler.resolver
  28. }
  29. private func loadServices() {
  30. resolver.resolve(AppearanceManager.self)!.setupGlobalAppearance()
  31. _ = resolver.resolve(DeviceDataManager.self)!
  32. _ = resolver.resolve(APSManager.self)!
  33. _ = resolver.resolve(FetchGlucoseManager.self)!
  34. _ = resolver.resolve(FetchTreatmentsManager.self)!
  35. _ = resolver.resolve(FetchAnnouncementsManager.self)!
  36. _ = resolver.resolve(CalendarManager.self)!
  37. _ = resolver.resolve(UserNotificationsManager.self)!
  38. _ = resolver.resolve(WatchManager.self)!
  39. _ = resolver.resolve(HealthKitManager.self)!
  40. _ = resolver.resolve(BluetoothStateManager.self)!
  41. }
  42. init() {
  43. debug(
  44. .default,
  45. "iAPS Started: v\(Bundle.main.releaseVersionNumber ?? "")(\(Bundle.main.buildVersionNumber ?? "")) [buildDate: \(Bundle.main.buildDate)] [buildExpires: \(Bundle.main.profileExpiration)]"
  46. )
  47. loadServices()
  48. }
  49. var body: some Scene {
  50. WindowGroup {
  51. Main.RootView(resolver: resolver)
  52. .environment(\.managedObjectContext, dataController.persistentContainer.viewContext)
  53. .environmentObject(Icons())
  54. .onOpenURL(perform: handleURL)
  55. }
  56. .onChange(of: scenePhase) { newScenePhase in
  57. debug(.default, "APPLICATION PHASE: \(newScenePhase)")
  58. }
  59. }
  60. private func handleURL(_ url: URL) {
  61. let components = URLComponents(url: url, resolvingAgainstBaseURL: false)
  62. switch components?.host {
  63. case "device-select-resp":
  64. resolver.resolve(NotificationCenter.self)!.post(name: .openFromGarminConnect, object: url)
  65. default: break
  66. }
  67. }
  68. }