FreeAPSApp.swift 2.6 KB

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