CompositionRoot.swift 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. //
  2. // CompositionRoot.swift
  3. // JSJP_Student_sw
  4. //
  5. // Created by ningye on 2023/5/22.
  6. //
  7. import UIKit
  8. import CGFloatLiteral
  9. import Kingfisher
  10. import RxGesture
  11. import RxOptional
  12. import RxViewController
  13. import SnapKit
  14. import SwiftyColor
  15. import SwiftyImage
  16. import SwiftyUserDefaults
  17. import Then
  18. import URLNavigator
  19. import NSObject_Rx
  20. import ManualLayout
  21. import GDPerformanceView_Swift
  22. import Toaster
  23. import Dollar
  24. import WebKit
  25. import SwiftDate
  26. struct NYAppDependency {
  27. typealias OpenURLHandler = (_ url: URL, _ options: [UIApplication.OpenURLOptionsKey: Any]) -> Bool
  28. let window: UIWindow
  29. let configureSDKs: () -> Void
  30. let configureAppearance: () -> Void
  31. let configureUserAgent: () -> Void
  32. let congigurePerformance: () -> Void
  33. let openURL: OpenURLHandler
  34. }
  35. let navigator = Navigator()
  36. final class CompositionRoot {
  37. /// Builds a dependency graph and returns an entry view controller.
  38. static func resolve() -> NYAppDependency {
  39. let window = UIWindow(frame: UIScreen.main.bounds)
  40. window.backgroundColor = .white
  41. window.makeKeyAndVisible()
  42. URLNavigationMap.initialize(navigator: navigator)
  43. // let homeService = HomeService(networking: HomeNetworking())
  44. var presentMainScreen: (() -> Void)!
  45. presentMainScreen = {
  46. // let mainTabBarController = MainTabBarController(reactor: MainTabBarViewReactor(),
  47. // homeParentViewController: HomeParentViewController(service: homeService),
  48. // timekeepViewController: TimeKeepParentViewController(),
  49. // mineListViewController: MineParentViewController())
  50. // window.rootViewController = mainTabBarController
  51. //判断用户登录
  52. let loginController = LoginViewController(nibName: "LoginViewController")
  53. window.rootViewController = loginController
  54. }
  55. let splashViewController = SplashViewController(presentMainScreen: presentMainScreen)
  56. window.rootViewController = splashViewController
  57. return NYAppDependency(
  58. window: window,
  59. configureSDKs: self.configureSDKs,
  60. configureAppearance: self.configureAppearance,
  61. configureUserAgent: self.configureUserAgent,
  62. congigurePerformance: self.congigurePerformance,
  63. openURL: self.openURLFactory(navigator: navigator)
  64. )
  65. }
  66. static func configureSDKs() {
  67. }
  68. static func configureAppearance() {
  69. //设置时区
  70. let _ = Region(calendar: Calendars.gregorian, zone: Zones.asiaShanghai, locale: Locales.chinese)
  71. //打开app次数
  72. LocalManager.userInfo.openTimes += 1
  73. //设置环境 --默认是线上环境
  74. Defaults.currentEnvironment = .res
  75. //ToastView
  76. ToastView.appearance().font = NYFont.SysFont.sys_15
  77. // ToastView.appearance().textColor = UIColor.db_white
  78. }
  79. static func configureUserAgent() {
  80. // let webView = WKWebView(frame: .zero)
  81. // webView.evaluateJavaScript("navigator.userAgent") { (oldAgent, error) in
  82. //
  83. // guard let oldAgent = oldAgent as? String else { return }
  84. //
  85. // let newAgent = "\(oldAgent) BiliApp/StudioApp/6560"
  86. // let newAgentDic = ["UserAgent":newAgent]
  87. // UserDefaults.standard.register(defaults: newAgentDic)
  88. // if #available(iOS 9.0, *) {
  89. // //局部更新,即可以在其他用到的webView页面重新修改userAgent
  90. // webView.customUserAgent = newAgent
  91. // }
  92. // }
  93. // webView.load(URLRequest(url: URL(string:"http//www.baidu.com")!))
  94. }
  95. static func congigurePerformance() {
  96. //#if DEBUG
  97. // PerformanceMonitor.sharedInstance.startMonitoring()
  98. // PerformanceMonitor.sharedInstance.appVersionHidden = true
  99. // PerformanceMonitor.sharedInstance.deviceVersionHidden = true
  100. //#endif
  101. }
  102. static func openURLFactory(navigator: NavigatorType) -> NYAppDependency.OpenURLHandler {
  103. return { url, options -> Bool in
  104. if navigator.open(url) {
  105. return true
  106. }
  107. if navigator.present(url, wrap: MainNavigationController.self) != nil {
  108. return true
  109. }
  110. return false
  111. }
  112. }
  113. }